使用 OR-Tools CP-CAT 求解器的 Python 接口(参考),我希望能够保存 cp_model,稍后或从不同的进程加载它,并继续与之交互。
我能够将模型序列化为 Protubuf,然后加载并解决它:
from google.protobuf import text_format
from ortools.sat.python import cp_model
def create_model():
model = cp_model.CpModel()
a = model.NewIntVar(0, 10, "var_a")
b = model.NewIntVar(0, 10, "var_b")
model.Maximize(a + b)
return model
def clone_model(model):
new_model = cp_model.CpModel()
text_format.Parse(str(model), new_model.Proto())
return new_model
def solve_model(model):
solver = cp_model.CpSolver()
status = solver.Solve(new_model)
print(solver.StatusName(status))
print(solver.ObjectiveValue())
# Works fine
model = create_model()
new_model = clone_model(model)
solve_model(new_model)
但是,我想在加载模型后继续与模型交互。例如,我希望能够执行以下操作:
model = create_model()
new_model = clone_model(model)
c = new_model.NewIntVar(0, 5, "var_c")
new_model.Add(a < c)
问题是最后一行不起作用,因为a
没有定义;而且我找不到任何方法来访问现有模型的变量。
我正在寻找类似的东西:a = new_model.getExistingVariable("var_a")
这将允许我在加载模型后继续与模型中预先存在的变量进行交互。