如何通过添加单元子句来加速解决一系列 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)

这称为解决方案提示。

this example