我有一个优化问题,我有一个“BoolVar”对象列表的列表。所以是这样的:
[[BoolVar1,BoolVar2],[BoolVar3, BoolVar4],[BoolVar5,BoolVar6]]
我需要评估以下内容:
(BoolVar1 && BoolVar2) || (BoolVar3 && BoolVar4) || (BoolVar5 && BoolVar6)
我是否必须这样做:
and12 = model.NewBoolVar("and12")
model.Add(and12 == True).OnlyEnforceIf([BoolVar1,BoolVar2])
and34 = model.NewBoolVar("and34")
model.Add(and34 == True).OnlyEnforceIf([BoolVar3,BoolVar4])
and56 = model.NewBoolVar("and56")
model.Add(and56 == True).OnlyEnforceIf([BoolVar5,BoolVar6])
model.AddBoolOr([and12,and34,and56])
我已经尝试过这段代码,它似乎可以工作,但由于“OnlyEnforceIf”功能,我对此表示怀疑。如果不执行会怎样?然后 and12 是否设置为 False,或者它可以是 False 还是 True,因为那时这个等式没有被强制执行?我根据这篇文章来到了这段代码。