问题描述
我想为我的PySCIPOpt模型添加一个NOT约束。我可以看到andConsAnd
,addConsOr
和addConsXor
,但NOT运算符没有一个。添加NOT约束的最简单方法是什么?
我想到了:
x = model.addVar('B')
not_x = model.addVar('B')
model.addCons(not_x == (x - 1) * (x - 1))
但这看起来很丑。
我之所以需要not_x
是因为我想稍后将其添加到一个连词中,例如:
model.addConsAnd([not_x,y],True)
但是,据我所知,如果我使用Python not运算符进行操作,则PySCIPOpt接口将无法正常工作:
model.addConsAdd([not x,True)
所以上面的行中断了我的jupyter笔记本中的内核。
任何帮助表示赞赏。
解决方法
二进制变量not x
的表达式x
与1-x
相同。这在混合整数编程模型中得到了广泛的应用。