this repo has no description
1enum JOB; 2enum TASK; 3TASK: last = max(TASK); 4array [JOB,TASK] of int: d; % task durations 5int: total = sum(i in JOB, j in TASK)(d[i,j]);% total duration 6int: digs = ceil(log(10.0,int2float(total))); % digits for output 7array [JOB,TASK] of var 0..total: s; % start times 8var 0..total: end; % total end time 9 10 11constraint %% ensure the tasks occur in sequence 12 forall(i in JOB) ( 13 forall(j in TASK where j < last) 14 (s[i,j] + d[i,j] <= s[i,enum_next(TASK,j)]) /\ 15 s[i,last] + d[i,last] <= end 16 ); 17 18constraint %% ensure no overlap of tasks 19 forall(j in TASK) ( 20 forall(i,k in JOB where i < k) ( 21 s[i,j] + d[i,j] <= s[k,j] \/ 22 s[k,j] + d[k,j] <= s[i,j] 23 ) 24 ); 25 26solve minimize end; 27 28output ["end = \(end)\n"] ++ 29 [ show_int(digs,s[i,j]) ++ " " ++ 30 if j == last then "\n" else "" endif | 31 i in JOB, j in TASK ];