this repo has no description
at develop 1.2 kB view raw
1include "rcpsp-wet.mzn"; 2include "restart.mzn"; 3 4predicate int_eq_imp(var int: x, var int: y, var bool: b); 5predicate bool_eq_imp(var bool: x, var bool: y, var bool: b); 6 7predicate randomize(var bool: b) = 8 forall(t in Tasks) ( 9 int_eq_imp(s[t], sol(s[t]), b /\ uniform_internal(1,100) < 80) 10 ); 11 12predicate free_timeslot(var bool: b) = 13 let { 14 int: slot = max(Times) div 10; 15 var int: time = uniform_internal(min(Times), max(Times) - slot); 16 } in forall(t in Tasks) ( 17 int_eq_imp(s[t], sol(s[t]), b /\ (sol(s[t]) < time \/ time+slot > sol(s[t]))) 18 ); 19 20% Round Robin 21array[1..2] of var bool: nbh; 22constraint randomize(nbh[1]); 23constraint free_timeslot(nbh[2]); 24var 1..2: select; 25constraint lastval(select) mod 2 + 1 = select; 26constraint bool_eq_imp(nbh[1], false, status() == START); 27constraint bool_eq_imp(nbh[2], false, status() == START); 28constraint bool_eq_imp(nbh[1], select == 1, status() != START); 29constraint bool_eq_imp(nbh[2], select == 2, status() != START); 30 31annotation main_vars(array[int] of var int: vars); 32 33solve 34 ::int_search(s, first_fail, indomain_min, complete) 35 minimize objective;