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