可以将s_j = max {a_j,s_i + t_ij}表示为线性约束吗?

时间:2013-10-26 12:30:32

标签: linear-programming linearization

我的问题是,是否有一种技巧可以将以下内容表达为线性约束?

S_j = max {a_j,S_i + t_ij}

其中a_j和t_ij是常量

非常感谢提前

1 个答案:

答案 0 :(得分:0)

是的,你可以通过引入一个新的二进制变量y_j(0或1)和几个线性约束来实现这一点。

我们可以将您的约束重写为:

Sj = a      if a > Si + T
Sj = Si + T if a < Si + T


Sj = a y_j + (Si + T) (1 - yj)       .....(1)

如果a更大,那么假设y_j = 0

如果a小于Si + T

,则

y_j = 1

M y_j + a - (Si + T) > 0   ....(2) 
where M is a big number, much bigger than a or Si or T.

如果y_j为1,则通常满足上述约束,并且Sj将等于a。 如果y_j为0,则a必须更大才能满足约束,Sj = Si + T

在您的表述中,只需包含(1)和(2),您就会强制执行max约束。