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