首页 > 解决方案 > CP求解器可以在特定点初始化吗?

问题描述

我正在使用 CP-Sat 求解器来优化我正在制定的时间表。然而,这现在需要很长时间才能解决。是否可以使用旧结果作为求解器的种子,作为起点,以减少找到最佳结果所需的时间?

标签: pythonor-toolscp-sat-solver

解决方案


看看这个解决方案提示示例:

num_vals = 3
x = model.NewIntVar(0, num_vals - 1, 'x')
y = model.NewIntVar(0, num_vals - 1, 'y')
z = model.NewIntVar(0, num_vals - 1, 'z')

model.Add(x != y)

model.Maximize(x + 2 * y + 3 * z)

# Solution hinting: x <- 1, y <- 2
model.AddHint(x, 1)
model.AddHint(y, 2)

编辑:你也应该尝试

  • 减少变量的数量。
  • 减少整数变量的域。
  • 使用多个线程运行求解器solver.parameters.num_search_workers = 8
  • 比整数变量/约束更喜欢布尔值。
  • 设置冗余约束和/或对称破坏约束。
  • 分离您的问题并合并结果。

推荐阅读