我是Cplex的新手。我正在解决整数编程问题,但我遇到了目标函数问题。 问题是我有一些项目,有一个截止日期D,如果项目迟到,我的迟到惩罚b,所以看起来像b *(cn-D)。其中cn是项目的实际计算时间,它是决策变量。
看起来像这样
if (cn-D)>=0 then b*(cn-D)==0
我尝试使用" if-then"约束,但似乎它不适用于决策变量。 我看了类似的问题,但找不到解决方案。请帮我定义正确的目标函数。
答案 0 :(得分:1)
对此进行建模的标准方法是:
min sum(i, penalty(i)*Tardy(i))
Tardy(i) >= CompletionTime(i) - DueDate(i)
Tardy(i) >= 0
Tardy
是一个非负变量,永远不会变为负数。其他数量是:
penalty
:一个常数,表示与作业i
相关的费用在一个单位时间内迟缓。CompletionTime
:一个保存作业i
DueDate
:具有作业截止日期i
的常量。以上测量总和。有时我们也想测量计数:迟到的工作数量。这是为了防止许多工作迟到。在最一般的情况下,目标中的总和和计数都具有不同的权重或惩罚。
几乎无限数量的论文显示MIP配方涉及迟到的调度模型。而不是重新发明轮子,可能有必要咨询其中一些,看看其他人做了什么来制定这个。