CP 求解器可以在特定点初始化吗?
Can the CP solver be initialised at a specific point?
我正在使用 CP-Sat 求解器来优化我正在制定的时间表。但是,现在这需要很长时间才能解决。是否可以将旧结果作为求解器的种子作为起点,以减少找到最佳结果所需的时间?
看看这个解决方案提示示例:
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
.
- 布尔值优于整数 variables/contraints。
- 设置冗余约束and/or对称破坏约束。
- 分离您的问题并合并结果。
我正在使用 CP-Sat 求解器来优化我正在制定的时间表。但是,现在这需要很长时间才能解决。是否可以将旧结果作为求解器的种子作为起点,以减少找到最佳结果所需的时间?
看看这个解决方案提示示例:
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
. - 布尔值优于整数 variables/contraints。
- 设置冗余约束and/or对称破坏约束。
- 分离您的问题并合并结果。