我正在尝试解决一个问题,即有一组对象需要在特定时间点在不同点之间移动。
我已经能够在线性规划方面形成大多数约束,即:
object1FirstDepartureTime > X
object1FirstArrivalTime < Y
object1FirstArrivalTime - object1FirstDepartureTime > Z
object1SecondDepartureTime - object1FirstArrivalTime > A
等等所有对象及其所有到达/离开的等等。目标函数将花费最少或最多可能的时间。
我遇到的问题是有一个额外的约束:某些物体需要伴随其他物体的行程持续时间。例如,object1可以伴随object2,object3或object4。这些物体本身具有一定的到达或离开约束。我想让我的(也许是混合整数)线性程序处理随附对象的选择。但是在尝试将其形式化时,我无法找到一种方法来保持线性。我想到了像
这样的混合整数约束object2GoWIthObject1 + object3GoWithObject1 + object4GoWithObject1 < 2
object2GoWIthObject1, object3GoWithObject1, object4GoWithObject1 are all less than 2
object2GoWIthObject1, object3GoWithObject1, object4GoWithObject1 are all integers
但我无法弄清楚如何表达约束,例如“如果对象2伴随对象1,它将在时间X与对象1一起离开并在时间Y到达”。这似乎是非线性的,因为我将布尔变量(如果对象2伴随对象1)乘以行程时间。
当然,我可以为每个“if ... then ...”语句创建不同的线性问题,但是有60个伴随路径和10个伴随对象,这将导致10 ^ 60个线性程序要解决,这不好。
如果有人对如何形式化这个线性规划问题有任何直觉,那么“将X伴随Y?”的决定。可以在问题本身表达,我非常感激!
答案 0 :(得分:1)
是的,您可以修改配方以处理您的约束。有许多标准技巧涉及“Big-M”和新的0-1来实现这一目标。 (韩的回答正确地暗示了这一点。)
为了适应您的特定非线性约束,您将引入新的0-1变量(如“GoWith”变量),然后在您的公式中添加额外的线性约束。
让我们按照你所说的要求:如果对象2伴随对象1,它将在时间X与对象1离开并在时间Y到达
Start1 >= X
Arrive1 <= Y
是对象1已有的约束。
让我们介绍二进制变量 Z12 ,如果Object2与Object1一起移动,则为1,否则Z12 = 0。
所以,
If Z12 = 1, then Start2 > X
If Z12 = 1 then Arrive2 < Y
我们可以将其重写为:
Start2 - X >= 0 if Z12 =1
Start2 - X >= -M if Z12 =0, where M is a large number.
将它们组合成一个线性约束:
Start2 - X >= M(Z12-1)
当Z12为1时,此约束具有约束力,否则会非常满意。
同样,为了使Object2到达以匹配Object1的到来,你会写:
Arrive2 < Y if Z12=1
Arrive2 < M if Z12=0
哪个成为
Arrive2 < Y + M(1-Z12), a linear constraint.
通过类似地引入二元变量Z13,Z14等,您可以在一个线性公式中处理所有约束。
在IP制定中使用的更多“技巧”可以在以下位置找到: http://agecon2.tamu.edu/people/faculty/mccarl-bruce/mccspr/new15.pdf
答案 1 :(得分:0)
一种方法是使用像这样的big-M方法:
object1FirstDepartureTime - object2FirstDepartureTime > -M * object2GoWIthObject1
object1FirstDepartureTime - object2FirstDepartureTime < M * object2GoWIthObject1
M是一个足够大的常数。 big-M方法的问题在于它导致LP放松不良。