我正在使用 CPLEX OPL 来模拟灵活的作业车间调度。我可以使用强度函数在操作员轮班期间将任务分配给他/她。如果跨度超出班次,则任务将暂停,如果时间再次到操作员的班次,则任务将继续。然而,实际情况是,如果班次发生变化,任务将被分配给不同的操作员。有谁知道如何在 CPLEX 中实现这一点?
非常感谢!
我可以使用强度函数。但单个任务仅与单个操作员相关联。
如果您不希望间隔经过周末/假期,您可以使用重叠长度来禁止。
using CP;
int startWeekend=6;
int endWeekend=8;
stepFunction weekIntensity=stepwise{100->5;0->7;100};
dvar interval itvs in 1..10 size 4 intensity weekIntensity;
maximize endOf(itvs);
subject to
{
//overlapLength(itvs,startWeekend,endWeekend)==0;
}
execute
{
writeln(itvs);
writeln("start : ",Opl.startOf(itvs));
writeln("end : ",Opl.endOf(itvs));
}
给予
// solution with objective 10
<1 4 10 4>
start : 4
end : 10
如果您取消注释overlapLength约束,那么您会得到
// solution with objective 6
<1 1 6 4>
start : 1
end : 6