this repo has no description
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;