对于调度问题,使用相同的操作模式来最大化连续天数

问题描述

我正在解决一个炼油厂调度问题,其中处理单元可以在不同的操作模式下运行。假设一个处理单元X具有两个操作模式A和 B 。我正在寻找一种有效的公式来强制我的MILP计划模型生成10天的计划,例如AAAAAA BBBB ,而不是A B A B AA B A B A,即模式开关的数量应最少。

当前在我的模型中,我有一个二进制变量 use_caps(mode,day)为1,然后为一天选择了一种操作模式。我使用此变量构造以下1-0变量: same_mode(mode,day)= e = use_caps(mode,day)+ use_caps(mode,day + 1)-1 。除了最后一天,我都会计算所有天数。如您所见,变量 same_mode(mode,day)取值为1,然后 day day + 1 使用相同的操作模式,否则它是0。

然后,我用它来奖励用于构建带有最少开关的调度表的模型。我通过向目标添加奖金来做到这一点: same_mode_bonus = e = sum((mode,days),same_mode(mode,day)* bonus_value)其中 bonus_value 一个相对较大的参数。由于存在利润最大化问题,因此我的模型尝试生成所需的进度表。我的策略在许多情况下都能很好地工作,但有时会失败。因此,我的问题是:是否有其他更好的策略/公式来构建此类计划,或者获得更好计划的唯一方法是调整参数 bonus_value 的值?

解决方法

我不确定您的方法是否正确:

 same_mode(mode,day) =e= use_caps(mode,day) + use_caps(mode,day+1) - 1

这将在给定的一天禁止:

 use_caps(mode,day) = use_caps(mode,day+1) = 0

这将得到same_mode(mode,day) = -1

我可能会按照以下方式实现它:

minimize sum(day,switch(day))
switch(day) >= use_caps(mode,day+1)-use_caps(mode,day)   ∀mode
switch(day) ∈ {0,1}

即我们计算从0到1(一种模式)的时间。