【问题标题】:MIP: Adding a Variable to Indicate EqualityMIP:添加一个变量来表示相等
【发布时间】:2019-01-18 21:47:59
【问题描述】:

我正在尝试在 OR Tools Python API 中构建 MIP 模型。我有两个表达式xy 并且想要创建一个变量b,当x == y 时等于1,否则为0。到目前为止,我尝试将-M(1 - b) <= x - y <= M(1 - b) 的约束添加到M 的某个大值,如果x != y 则强制b 为0。我被卡住的地方是添加一个约束,如果x == y,则强制b 为1。我想我想要x - y >= 1 - by - x >= 1 - b 之类的东西,但我不知道如何在逻辑上组合这样的约束。关于如何做到这一点的任何建议?还是采用一些完全不同的方法?

【问题讨论】:

  • 关于布尔值的重要知识:False == 0 && True == 1
  • 你的意思是我应该说b = x == y?我认为我无法以这种形式向模型添加约束。
  • 我的意思是布尔值 True 等于数字 1,布尔值 False 等于数字 0。

标签: python or-tools mixed-integer-programming


【解决方案1】:

我认为以下表达式对你有用:

b <= x - y + 1
b <= y - x + 1
b >= 1-x + 1-y - 1
b >= y + x - 1

【讨论】:

  • 对不起,我应该提到 xy 是整数变量,不一定是二进制的,我认为这只有在它们是二进制时才有效。
【解决方案2】:

请注意,根据模型的性质,CP-SAT 求解器可能具有竞争力。并且它原生地提供了具体化和半具体化。

请看一下

【讨论】:

  • 我使用 OR-tools 的原因是能够将我的模型插入到许多不同的求解器中以便比较它们。 CP-SAT 也支持这个吗?
  • 不,CP-SAT 是一个独立的求解器。不过 minizinc 有一个后端。
猜你喜欢
  • 2020-12-31
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2018-11-30
  • 2020-07-13
  • 2011-09-22
相关资源
最近更新 更多