我的问题设置相当简单。我想在模型找到具有已定义约束的
const
和 x
后,向决策变量 y
和 x
添加 y
值。但我想仅当新的 const
和 x
值在其域范围内并遵循所有其他约束时才添加该 y
值。
我尝试了如下问题:
"""Model finding x and y values based on previously defined constraints"""
# defines NewBoolVar(b1, b2)
# This is the trick I tried to used
# defined a temporary bool var - NewBoolVar(temp_bool) and always wants it to be true
model.Add(1>=0).OnlyEnforceIf(temp_bool) #always keeps temp_bool true
model.Add(x == x + const). OnlyEnforceIf(b1)
model.Add(y == y + const). OnlyEnforceIf(b2)
model.AddBoolOr([b1, temp_bool])
model.AddBoolOr([b2, temp_bool])
根据上述公式,我假设模型应该给出我期望的结果。但我没有得到我想要的。即使
x
和 y
在域范围内并遵循其他约束,它们也不会添加 const
值。我同意我有这个 temp_bool
变量,它正在完成它的工作,但没有给我预期的结果。
所以我想知道有什么技巧可以用来达到我的期望吗?还有其他方法可以建议吗?
谢谢:)
您所写的内容没有任何内容是正确的:
==
不是赋值而是相等测试。因此它总是会失败。model.Add(1 >= 0).OnlyEnforceIf(b)
:那是什么??? model.AddBoolOr(b)
或 slightly worse model.Add(b == 1)
。b implies true
,这实际上不会影响b
。 b=true
和 b=false
都是有效的解决方案。model.AddBoolOr(b1, temp_bool)
:temp_bool 始终为 true。 bool_or 总是满足并且不约束 b1
。