Originally posted by: UDOPS
here you go:
dvar
boolean Dispatch[Paths]; dvar
boolean Turnaround[Layover]; dexpr
float Primal=sum(r in Trains) ( sum(<r,TrainData[r].origin,j,ti,tj,d> in Paths) (TrainData[r].utility+(1-Problem[1].delayzero)*TrainData[r].delay_bonus*(ti-TrainData[r].early_start)) *Dispatch[<r,TrainData[r].origin,j,ti,tj,d>]
//origin arc + sum(<r,i,-1,ti,tj,d> in Paths) (1-Problem[1].bonuszero)*TrainData[r].arrival_bonus*(TrainData[r].late_end-tj)*Dispatch[<r,i,-1,ti,tj,d>]
//destination arc - sum(<r,i,i,ti,tj,d> in Paths) (1-Problem[1].stopzero)*TrainData[r].stop_cost*(tj-ti)*Dispatch[<r,i,i,ti,tj,d>]
//idle arcs, scaled for variable stop size - sum(<r,r2,tj,tii> in Layover) (1-Problem[1].layoverzero)*TrainData[r].layover_cost*(tii-tj)*Turnaround[<r,r2,tj,tii>]
//layover linkage );
//end of primal objective dexpr
float BlockSlack[<i,t> in BlockOccupied]=sum(<r,i,j,ti,tj,d> in BlockTransit[<i,t>]) Dispatch[<r,i,j,ti,tj,d>] - BlockData[i].capacity; dexpr
float CellSlack[<a,t> in CellOccupied]= sum(<r,i,j,ti,tj,1> in CellTransit[<a,t>]) Dispatch[<r,i,j,ti,tj,1>] + sum(<r,i,j,ti,tj,-1> in CellTransit[<a,t>]) Dispatch[<r,i,j,ti,tj,-1>] + ((Problem[1].idletransition==1) ? sum(<r,i,i,ti,tj,d> in CellTransit[<a,t>]) Dispatch[<r,i,i,ti,tj,d>]: 0)-CellCap[<a,t>]; dexpr
float NBSlack[<i,t> in NBOccupied]= sum(<r,eye,j,ti,tj,1> in BlockTransit[<i,t>])Dispatch[<r,eye,j,ti,tj,1>]+ sum(<r,a,b,c,d,1> in BlockPending1[<i,t>]) Dispatch[<r,a,b,c,d,1>] + sum(<r,e,f,g,h,1> in BlockPending2[<i,t>]) Dispatch[<r,e,f,g,h,1>] -BlockData[i].capacity; dexpr
float SBSlack[<i,t> in SBOccupied]= sum(<r,eye,j,ti,tj,-1> in BlockTransit[<i,t>])Dispatch[<r,eye,j,ti,tj,-1>]+ sum(<r,a,b,c,d,-1> in BlockPending1[<i,t>]) Dispatch[<r,a,b,c,d,-1>] + sum(<r,e,f,g,h,-1> in BlockPending2[<i,t>]) Dispatch[<r,e,f,g,h,-1>] -BlockData[i].capacity;
#DecisionOptimization#OPLusingCPLEXOptimizer