如何通过比较两个变量来返回二进制值?

时间:2016-02-21 17:30:53

标签: scheduling linear-programming job-scheduling cplex lingo

我目前正在学习运筹学。我需要将模型表示为LP模型。

目标函数是

y = ( ai * C1i + bi * C2i)
        ,where ai = max(0, xi - Ti) ; bi = max(0, Ti - xi)

这是一个调度问题。 xi是作业i的预定时间的决定变量,Ti是作业i的最佳拟合时间。每个早期或晚期的单位将受到罚款。 C1i和C2i是每单位的罚金。

如果工作i在​​工作i的最佳时间Ti之前开始,则罚金将是

 bi * C2i.

如果工作i是在工作i的最佳时间Ti之后开始,那么惩罚将是

ai * C1i.

在我的配方中,我发现在Lingo或Cplex中使用max(,)函数很困难。实际上,程序中没有max(,)函数。如果任务在Ti之前开始,ai = xi - Ti将为负数。 bi = Ti - xi将是积极的。我无法想到转换的方式"如果是否定的话,则值会变为0"。

是否可以使用以下功能来制定目标?

 y = ( ai * C1i*yi + bi * C2i*(1-yi))

如果Ti - xi >= 0(在作业i的最佳时间之前开始),则yi = 1 否则,yi =0

但是,如何在LP模型中制定上述if-then-statement?

谢谢!

1 个答案:

答案 0 :(得分:1)

这个问题有点难以解析,但我认为你所追求的是:

enter image description here

实际上,这是在重复的问题here中提出的。 (对不起:该问题已被删除)。