我正在尝试在项目中使用 google CP-SAT 求解器,版本 9.11.4210。该问题的一部分包括将两个变量之和除以另一个变量,但求解器返回
MODEL_INVALID
。我将问题简化如下:
model = CpModel()
v1 = model.NewIntVar(1, 1, "var1")
v2 = model.NewIntVar(1, 1, "var2")
div = model.NewIntVar(2, 2, "div")
model.add_division_equality(div, v1 + v2, v2)
solver = CpSolver()
status = solver.solve(model)
if status == MODEL_INVALID:
print("The model is invalid")
当我用例如替换分子时,模型不是无效的
v1 + 1
。有什么想法为什么会发生这种情况或如何解决吗?
您检查过错误消息吗?
它会告诉你乘积、除法、模都接受 1-var 仿射表达式作为参数 (a * var + v)。
因此您需要为超过 1 项的线性表达式创建中间变量。