如果条件在Cplex目标函数

时间:2018-04-27 15:03:22

标签: linear-programming cplex integer-programming

我是Cplex的新手。我正在解决整数编程问题,但我遇到了目标函数问题。 问题是我有一些项目,有一个截止日期D,如果项目迟到,我的迟到惩罚b,所以看起来像b *(cn-D)。其中cn是项目的实际计算时间,它是决策变量。

看起来像这样 if (cn-D)>=0 then b*(cn-D)==0

我尝试使用" if-then"约束,但似乎它不适用于决策变量。 我看了类似的问题,但找不到解决方案。请帮我定义正确的目标函数。

1 个答案:

答案 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配方涉及迟到的调度模型。而不是重新发明轮子,可能有必要咨询其中一些,看看其他人做了什么来制定这个。