【发布时间】:2016-02-21 17:30:52
【问题描述】:
我目前学习运筹学。我需要将模型制定为 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?
谢谢!
【问题讨论】:
标签: scheduling linear-programming job-scheduling cplex lingo