Performance 如何通过添加unit子句以增量方式解决一系列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()])

我正在解决一系列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)

这被称为解决方案暗示


谢谢,劳伦特。“Addhint”很有用,但这些值并不是作为硬约束添加的。这意味着硬约束定义的下一个问题可能无法通过暗示得到精确解决,因为如果解算器选择放弃在提示后寻找解决方案,则可能会恢复提示。然后只需逐个添加约束var==值。SAT解算器是否能够重用上一个SAT问题的部分计算(没有新约束的问题)?例如,添加新约束只会影响某些变量的值,而不会影响所有变量的值。然后SAT解算器仍然可以使用这些未受影响变量的值,并节省一些计算。