转换为布尔值,用于整数线性编程


11

我想在整数线性程序中表达以下约束:

y={0if x=01if x0.

我已经有整型变量,我承诺- 100 X 100。如何以适合于整数线性规划求解器的形式表达上述约束?x,y100x100

据推测,这将需要引入一些其他变量。我需要添加哪些新变量和约束?可以使用一个新变量完全完成此操作吗?二?

等效地,这是在问如何执行约束

y0 if and only if x0.

在我已经有暗示的约束的情况下0 ÿ 1|x|1000y1


(我的目标是修复https://cs.stackexchange.com/a/12118/755中的错误。)


1
你尝试了什么?您是否尝试过通过一些示例来查看是否看到模式?如果是,您是否尝试过猜测然后尝试证明呢?
布里卡

1
h!我知道你在那儿做什么了,@ Brika。如果您想看看我尝试了什么,请在这里以及为什么错误的解释。如果您想查看我的下一个尝试,请参阅我的答案。感谢您阅读我的旧问题,如果将来可以改进它们,我很乐意听到您的任何建议!
DW

这是非常好的。;)
Brika

Answers:


4

我想我可以用一个额外的二元变量做δ{0,1}

100yx100y
0.001y100.001δx0.001y+100.001(1δ)

更新资料

假设x是一个连续变量。如果我们限制x整数值,那么第二个约束可被简化为:

y101δxy+101(1δ)


1
我通过一个小程序对它进行了详尽的测试来验证了此正确性。谢谢您的解决方案!
DW

@ErwinKalvelagen,能否请您使用二进制变量delta来解释您的逻辑,例如,如果y = {a:x> 0,b:x <0},则为更一般的情况。
尼克

1
@Nick二进制变量用于为“ OR”构造建模。请参阅此处以回答您的问题。
Erwin Kalvelagen '16

@ErwinKalvelagen,一个很好的答案,我尝试将您的方法应用于此处的问题cs.stackexchange.com/questions/64794/…
尼克

1
xx

1

0xNN=100

  1. 0z1,z2,z1
  2. xN(1z1)0
  3. xNz11
  4. xN(1z2)0
  5. xNz21
  6. z1+z21z
  7. zz1
  8. zz2

z1=1x0z2=1x0z=z1z2


z=1yx=100y=1z=0z1,z2xNz21x<Nx99x=99y=1y=0xNxN0xN

1

t,ut=1x0u=1x0y=¬(tu)

0t,u,y11+x101t101+x1x101u101xt+u11y1yt1yu

x99x100x99

@TLW,谢谢您抓住了它!我已经编辑了答案以修复该错误。我用一个小程序对它进行了详尽的测试,我认为它现在应该是正确的。
DW
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.