Performance 如何通过添加unit子句以增量方式解决一系列CP-SAT问题来实现加速?
我正在解决一系列SAT问题,下一个SAT问题总是可以通过向上一个SAT问题的模型中添加一些单元子句来增量构建。我们不仅可以重用前一个SAT问题中的约束和变量,还可以通过解决前一个SAT问题重用中间结果来加速CP-SAT吗 以下代码是否有效:Performance 如何通过添加unit子句以增量方式解决一系列CP-SAT问题来实现加速?,performance,solver,or-tools,Performance,Solver,Or Tools,我正在解决一系列SAT问题,下一个SAT问题总是可以通过向上一个SAT问题的模型中添加一些单元子句来增量构建。我们不仅可以重用前一个SAT问题中的约束和变量,还可以通过解决前一个SAT问题重用中间结果来加速CP-SAT吗 以下代码是否有效: solver = cp_model.CpSolver() x = model.NewBoolVar('x') y = model.NewBoolVar('y') model.AddBoolOr([x, y.Not()])
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)
这被称为解决方案暗示
见谢谢,劳伦特。“Addhint”很有用,但这些值并不是作为硬约束添加的。这意味着硬约束定义的下一个问题可能无法通过暗示得到精确解决,因为如果解算器选择放弃在提示后寻找解决方案,则可能会恢复提示。然后只需逐个添加约束var==值。SAT解算器是否能够重用上一个SAT问题的部分计算(没有新约束的问题)?例如,添加新约束只会影响某些变量的值,而不会影响所有变量的值。然后SAT解算器仍然可以使用这些未受影响变量的值,并节省一些计算。