如何通过添加单元子句来加速解决一系列 CP-SAT 问题?
How to achieve a speed up by adding unit clauses to solve a sequence of CP-SAT problems incrementally?
我正在解决一系列 SAT 问题,其中下一个 SAT 问题始终可以通过向上一个 SAT 问题的模型添加一些单元子句来逐步构建。我们能否通过不仅重用之前 SAT 问题中的约束和变量,而且通过解决之前的 SAT 问题重用中间结果来加速 CP-SAT?
以下代码是否有效:
solver = cp_model.CpSolver()
x = model.NewBoolVar('x')
y = model.NewBoolVar('y')
model.AddBoolOr([x, y.Not()])
# retrieve the results for the first problem
status = solver.Solve(model)
....
# add a new unit clause
model.AddBoolOr([x.Not()])
# retrieve the results for the second problem
status = solver.Solve(model)
这称为解决方案提示。
我正在解决一系列 SAT 问题,其中下一个 SAT 问题始终可以通过向上一个 SAT 问题的模型添加一些单元子句来逐步构建。我们能否通过不仅重用之前 SAT 问题中的约束和变量,而且通过解决之前的 SAT 问题重用中间结果来加速 CP-SAT?
以下代码是否有效:
solver = cp_model.CpSolver()
x = model.NewBoolVar('x')
y = model.NewBoolVar('y')
model.AddBoolOr([x, y.Not()])
# retrieve the results for the first problem
status = solver.Solve(model)
....
# add a new unit clause
model.AddBoolOr([x.Not()])
# retrieve the results for the second problem
status = solver.Solve(model)
这称为解决方案提示。