我正在使用CPLEX和OPL,我在模型中指定了我需要的约束。
设备'A'的运行时间限制为2小时。它还具有维护停机时间,至少1小时。
每次't'和总t为10(离散)。例如,
t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 ....
Equip'A' 0 1 1 0 0 0 1 1 0 1 ....
* downtime is possible to exceed its own maintain time.
在这种情况下,我如何确保持续的正常运行时间。不是'0 1 0 1',我的意思是'0 1 1 0 1 1 0'=>'1',意思是操作,应该是相邻的(为了确保持续的正常运行时间)。
每次我运行这个问题时,答案总是从每个'1'离开,例如'0 1 0 1 0 0 0 1 0 0 1'。
我希望我能有一个想法或数学方法来解决这个问题。
观察连续的三胞胎,不允许使用1 1 1
(3小时正常运行时间)和0 1 0
(单小时正常运行时间)模式。
这可以用线性不等式表示(t
从1到8):
A[t] + A[t+1] + A[t+2] <= 2 and
A[t+1] <= A[t] + A[t+2]
要覆盖角落的情况(开始1 0
或结束0 1
),您还需要:
A[1] <= A[2] and
A[10] <= A[9]