this repo has no description
1include "steelmillslab.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 random_assignment(var bool: b) = forall(i in 1..nbSlabs) (
8 int_eq_imp(assign[i], sol(assign[i]), b /\ (uniform_internal(1,100) < 80))
9);
10
11predicate random_bin(var bool: b) = let {
12 var int: bin = uniform_internal(1, nbSlabs);
13 } in forall(i in 1..nbSlabs) (
14 int_eq_imp(assign[i], sol(assign[i]), b /\ (bin != sol(assign[i])))
15 );
16
17% Round Robin
18array[1..2] of var bool: nbh;
19constraint random_assignment(nbh[1]);
20constraint random_bin(nbh[2]);
21var 1..2: select;
22constraint lastval(select) mod 2 + 1 = select;
23constraint bool_eq_imp(nbh[1], false, status() == START);
24constraint bool_eq_imp(nbh[2], false, status() == START);
25constraint bool_eq_imp(nbh[1], select == 1, status() != START);
26constraint bool_eq_imp(nbh[2], select == 2, status() != START);
27
28annotation main_vars(array[int] of var int: vars);
29
30solve
31 :: main_vars(assign)
32 :: int_search(ordered, first_fail, indomain_min, complete)
33 minimize objective;