在 OrTools CP-SAT 中修复某些变量时模型不可行

Model infeasible when fixing some variables in OrTools CP-SAT

提问人:Leonardo Ribeiro 提问时间:8/3/2023 最后编辑:Laurent PerronLeonardo Ribeiro 更新时间:8/4/2023 访问量:97

问:

我在Ortools CP-SAT中有一个布尔变量,比方说x。该变量位于约束条件中,假设 y = -5 * x。我在模型中还有另外两个约束,它们是模型。加法 (y >= 0)。OnlyEnforceIf(z) 和模型。加(y < 0)。OnlyEnforceIf(z.Not())。当我尝试修复 x = 1 并求解它时,我得到的答案是该模型不可行?有谁知道原因? 我以为这是可行的。

OR-工具 约束编程 运筹学 CP-SAT-求解器

答:

0赞 Bhartendu Awasthi 8/4/2023 #1

下面的代码片段对我有用。我没有指定目标函数,因为我不确定。

from ortools.sat.python import cp_model as cp

model = cp.CpModel()

x = model.NewBoolVar("")
model.Add(x == 1)

z = model.NewBoolVar("")
y = model.NewIntVar(-100, 100, name = "")

model.Add(y == -5 * x)

model.Add(y >= 0).OnlyEnforceIf(z)
model.Add(y < 0).OnlyEnforceIf(z.Not())


solver = cp.CpSolver() 
# model.Minimize(y)
solver.Solve(model) # status = 4 => optimal

solver.Value(x) # x = 1
solver.Value(z) # z = 0
solver.Value(y) # y = -5