this repo has no description
at develop 1.1 kB view raw
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 ];