this repo has no description
1include "disjunctive.mzn";
2
3% Número de trabajos.
4int: jobs;
5set of int: JOB = 1..jobs;
6
7% Número de tareas por trabajo.
8int: tasks;
9set of int: TASK = 1..tasks;
10
11% Duración de tareas.
12array [JOB,TASK] of int: d;
13
14% Duración total.
15int: total = sum(i in JOB, j in TASK)(d[i,j]);
16
17% Dígitos para salida.
18int: digs = ceil(log(10.0,total));
19
20% Horas de inicio.
21array [JOB,TASK] of var 0..total: s;
22
23% Tiempo de finalización total.
24var 0..total: end;
25
26% Asegurar de que las tareas se realicen en secuencia.
27constraint %% ensure the tasks occur in sequence
28 forall(i in JOB) (
29 forall(j in 1..tasks-1)
30 (s[i,j] + d[i,j] <= s[i,j+1]) /\
31 s[i,tasks] + d[i,tasks] <= end
32 );
33
34% Garantizar que no se superponen las tareas.
35constraint
36 forall(j in TASK) (
37 disjunctive([s[i,j] | i in JOB], [d[i,j] | i in JOB])
38 );
39
40solve minimize end;
41
42output ["Fin = \(end)\n"] ++
43 [ show_int(digs,s[i,j]) ++ " " ++
44 if j == tasks then "\n" else "" endif |
45 i in JOB, j in TASK ];