在Cplex中,有没有办法在轮班发生变化时为时间间隔变量分配不同的运算符?

问题描述 投票:0回答:1

我正在使用 CPLEX OPL 来模拟灵活的作业车间调度。我可以使用强度函数在操作员轮班期间将任务分配给他/她。如果跨度超出班次,则任务将暂停,如果时间再次到操作员的班次,则任务将继续。然而,实际情况是,如果班次发生变化,任务将被分配给不同的操作员。有谁知道如何在 CPLEX 中实现这一点?

非常感谢!

我可以使用强度函数。但单个任务仅与单个操作员相关联。

scheduling cplex opl
1个回答
0
投票

如果您不希望间隔经过周末/假期,您可以使用重叠长度来禁止。

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
© www.soinside.com 2019 - 2024. All rights reserved.