在pyscipopt中添加NOT约束

问题描述

我想为我的PySCIPOpt模型添加一个NOT约束。我可以看到andConsAndaddConsOraddConsXor,但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的表达式x1-x相同。这在混合整数编程模型中得到了广泛的应用。