14 foreach(var r
in routings){
if(r.GroupingConstraint is
null)
continue;
for(
int t=1;t<=instance.PlanningHorizon;t++){
int g=r.GroupingConstraint.GetGroupingPeriodCount(t);
int last=Math.Min(instance.PlanningHorizon,t+g-1);
for(
int k=t+1;k<=last;k++){var first=ordered.Select((m,i)=>(m,i)).Where(x=>x.m.MacroPeriod==t).ToArray();var later=ordered.Select((m,i)=>(m,i)).Where(x=>x.m.MacroPeriod==k).ToArray();
foreach(var a
in first)
foreach(var b
in later)
AddConstraint(context,$
"glspGrouping_r{r.Id}_t{t}_s{a.m.MicroPeriodIndex}_k{k}_v{b.m.MicroPeriodIndex}",
new LinearExpressionBuilder().Add(Start(context,profile,ordered,a.i,r,plantId,wc.Id)).
Add(Start(context,profile,ordered,b.i,r,plantId,wc.Id)).
Build(),
MathematicalConstraintSense.LessThanOrEqual,1.0);}}}