当分子是两个变量的线性表达式时,在 Ortools 中添加除法约束会导致 MODEL_INVALID 模型

问题描述 投票:0回答:1

我正在尝试在项目中使用 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
。有什么想法为什么会发生这种情况或如何解决吗?

or-tools constraint-programming
1个回答
0
投票

您检查过错误消息吗?

它会告诉你乘积、除法、模都接受 1-var 仿射表达式作为参数 (a * var + v)。

因此您需要为超过 1 项的线性表达式创建中间变量。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.