这可以用混合整数线性规划来形式化吗?

时间:2011-12-12 10:47:16

标签: linear-programming

我正在尝试解决一个问题,即有一组对象需要在特定时间点在不同点之间移动。

我已经能够在线性规划方面形成大多数约束,即:

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?”的决定。可以在问题本身表达,我非常感激!

2 个答案:

答案 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放松不良。