我目前学习运筹学。我需要将模型制定为 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?
谢谢!