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 ];