Originally posted by: PhilippeLaborie
using CP;
int ProdA = 0;
int ProdB = 1;
int ProdC = 2;
int ProdD = 3;
int ProdE = 4;
tuple TTime { int prod1; int prod2; int delay; }
{TTime} TT = {
<ProdA, ProdB, 2>, <ProdA, ProdC, 7>, <ProdA, ProdD, 9>, <ProdA, ProdE, 1>,
<ProdB, ProdA, 5>, <ProdB, ProdC, 6>, <ProdB, ProdD, 2>, <ProdB, ProdE, 7>,
<ProdE, ProdA, 12>, <ProdE, ProdB, 11>, <ProdE, ProdC, 15>, <ProdE, ProdD, 14>, <ProdE, ProdE, 10> };
tuple Op { int product; int duration; }
{Op} ops = {
<ProdE, 0>, // Initial operation
<ProdA, 10>, <ProdC, 21>, <ProdE, 13>, <ProdD, 25>, <ProdD, 28>,
<ProdB, 24>, <ProdA, 17>, <ProdA, 12>, <ProdC, 18> };
dvar interval act[o in ops] size o.duration;
dvar sequence machine
in all(o in ops) act[o]
types all(o in ops) o.product;
minimize max(o in ops) endOf(act[o]);
subject to {
endOf(act[first(ops)])==0;
noOverlap(machine, TT, true);
}
#DecisionOptimization