diff --git a/gbac/on_record.mzn b/gbac/on_record.mzn new file mode 100644 index 0000000..1a98176 --- /dev/null +++ b/gbac/on_record.mzn @@ -0,0 +1,32 @@ +include "gbac.mzn"; +include "restart.mzn"; + +predicate int_eq_imp(var int: x, var int: y, var bool: b); +predicate bool_eq_imp(var bool: x, var bool: y, var bool: b); + +predicate random_allocation(var bool: b) = forall(i in courses) ( + int_eq_imp(period_of[i], sol(period_of[i]), b /\ (uniform_internal(1,100) < 80)) +); + +predicate free_period(var bool: b) = let { + var int: period = uniform_internal(periods); + } in forall(i in courses) ( + int_eq_imp(period_of[i], sol(period_of[i]), b /\ (sol(period_of[i]) != period)) + ); + +% Round Robin +array[1..2] of var bool: nbh; +constraint random_allocation(nbh[1]); +constraint free_period(nbh[2]); +var 1..2: select; +constraint lastval(select) mod 2 + 1 = select; +constraint bool_eq_imp(nbh[1], false, status() == START); +constraint bool_eq_imp(nbh[2], false, status() == START); +constraint bool_eq_imp(nbh[1], select == 1, status() != START); +constraint bool_eq_imp(nbh[2], select == 2, status() != START); + +annotation main_vars(array[int] of var int: vars); + +solve + :: main_vars(period_of) + :: int_search(period_of,first_fail,indomain_min,complete) minimize objective; diff --git a/gbac/on_replay.mzn b/gbac/on_replay.mzn new file mode 100644 index 0000000..efb3eb2 --- /dev/null +++ b/gbac/on_replay.mzn @@ -0,0 +1,7 @@ +include "gbac.mzn"; + +annotation main_vars(array[int] of var int: vars); + +solve + :: main_vars(period_of) + :: int_search(period_of,first_fail,indomain_min,complete) minimize objective; diff --git a/gbac/on_restart.mzn b/gbac/on_restart.mzn index 1a98176..b6e8205 100644 --- a/gbac/on_restart.mzn +++ b/gbac/on_restart.mzn @@ -28,5 +28,4 @@ constraint bool_eq_imp(nbh[2], select == 2, status() != START); annotation main_vars(array[int] of var int: vars); solve - :: main_vars(period_of) :: int_search(period_of,first_fail,indomain_min,complete) minimize objective; diff --git a/gbac/original.mzn b/gbac/original.mzn index efb3eb2..c3c7a6c 100644 --- a/gbac/original.mzn +++ b/gbac/original.mzn @@ -3,5 +3,4 @@ include "gbac.mzn"; annotation main_vars(array[int] of var int: vars); solve - :: main_vars(period_of) :: int_search(period_of,first_fail,indomain_min,complete) minimize objective; diff --git a/rcpsp-wet/on_record.mzn b/rcpsp-wet/on_record.mzn new file mode 100644 index 0000000..11f715d --- /dev/null +++ b/rcpsp-wet/on_record.mzn @@ -0,0 +1,36 @@ +include "rcpsp-wet.mzn"; +include "restart.mzn"; + +predicate int_eq_imp(var int: x, var int: y, var bool: b); +predicate bool_eq_imp(var bool: x, var bool: y, var bool: b); + +predicate randomize(var bool: b) = + forall(t in Tasks) ( + int_eq_imp(s[t], sol(s[t]), b /\ uniform_internal(1,100) < 80) + ); + +predicate free_timeslot(var bool: b) = + let { + int: slot = max(Times) div 10; + var int: time = uniform_internal(min(Times), max(Times) - slot); + } in forall(t in Tasks) ( + int_eq_imp(s[t], sol(s[t]), b /\ (sol(s[t]) < time \/ time+slot > sol(s[t]))) + ); + +% Round Robin +array[1..2] of var bool: nbh; +constraint randomize(nbh[1]); +constraint free_timeslot(nbh[2]); +var 1..2: select; +constraint lastval(select) mod 2 + 1 = select; +constraint bool_eq_imp(nbh[1], false, status() == START); +constraint bool_eq_imp(nbh[2], false, status() == START); +constraint bool_eq_imp(nbh[1], select == 1, status() != START); +constraint bool_eq_imp(nbh[2], select == 2, status() != START); + +annotation main_vars(array[int] of var int: vars); + +solve + ::main_vars(s) + ::int_search(s, first_fail, indomain_min, complete) + minimize objective; diff --git a/rcpsp-wet/on_replay.mzn b/rcpsp-wet/on_replay.mzn new file mode 100644 index 0000000..3792ecb --- /dev/null +++ b/rcpsp-wet/on_replay.mzn @@ -0,0 +1,8 @@ +include "rcpsp-wet.mzn"; + +annotation main_vars(array[int] of var int: vars); + +solve + ::main_vars(s) + ::int_search(s, first_fail, indomain_min, complete) + minimize objective; diff --git a/rcpsp-wet/on_restart.mzn b/rcpsp-wet/on_restart.mzn index 11f715d..2386e3e 100644 --- a/rcpsp-wet/on_restart.mzn +++ b/rcpsp-wet/on_restart.mzn @@ -31,6 +31,5 @@ constraint bool_eq_imp(nbh[2], select == 2, status() != START); annotation main_vars(array[int] of var int: vars); solve - ::main_vars(s) ::int_search(s, first_fail, indomain_min, complete) minimize objective; diff --git a/rcpsp-wet/original.mzn b/rcpsp-wet/original.mzn index 3792ecb..e8f3a05 100644 --- a/rcpsp-wet/original.mzn +++ b/rcpsp-wet/original.mzn @@ -3,6 +3,5 @@ include "rcpsp-wet.mzn"; annotation main_vars(array[int] of var int: vars); solve - ::main_vars(s) ::int_search(s, first_fail, indomain_min, complete) minimize objective; diff --git a/run_record_gecode.sh b/run_record_gecode.sh index 48a4272..5ba8059 100755 --- a/run_record_gecode.sh +++ b/run_record_gecode.sh @@ -7,7 +7,7 @@ folder=$1 source setup.sh solver="./software/install/gecode_on_record/bin/fzn-gecode" -model="./${folder}/on_restart" +model="./${folder}/on_record" output_folder="./output/gecode/${folder}/record" mkdir -p ${output_folder} diff --git a/run_replay_gecode.sh b/run_replay_gecode.sh index 27facd6..8574462 100755 --- a/run_replay_gecode.sh +++ b/run_replay_gecode.sh @@ -7,7 +7,7 @@ folder=$1 source setup.sh solver="./software/install/gecode_on_replay/bin/fzn-gecode" -model="./${folder}/original" +model="./${folder}/on_replay" output_folder="./output/gecode/${folder}/replay" records_folder="./output/gecode/${folder}/record" mkdir -p ${output_folder} diff --git a/steelmillslab/on_record.mzn b/steelmillslab/on_record.mzn new file mode 100644 index 0000000..bb30f17 --- /dev/null +++ b/steelmillslab/on_record.mzn @@ -0,0 +1,33 @@ +include "steelmillslab.mzn"; +include "restart.mzn"; + +predicate int_eq_imp(var int: x, var int: y, var bool: b); +predicate bool_eq_imp(var bool: x, var bool: y, var bool: b); + +predicate random_assignment(var bool: b) = forall(i in 1..nbSlabs) ( + int_eq_imp(assign[i], sol(assign[i]), b /\ (uniform_internal(1,100) < 80)) +); + +predicate random_bin(var bool: b) = let { + var int: bin = uniform_internal(1, nbSlabs); + } in forall(i in 1..nbSlabs) ( + int_eq_imp(assign[i], sol(assign[i]), b /\ (bin != sol(assign[i]))) + ); + +% Round Robin +array[1..2] of var bool: nbh; +constraint random_assignment(nbh[1]); +constraint random_bin(nbh[2]); +var 1..2: select; +constraint lastval(select) mod 2 + 1 = select; +constraint bool_eq_imp(nbh[1], false, status() == START); +constraint bool_eq_imp(nbh[2], false, status() == START); +constraint bool_eq_imp(nbh[1], select == 1, status() != START); +constraint bool_eq_imp(nbh[2], select == 2, status() != START); + +annotation main_vars(array[int] of var int: vars); + +solve + :: main_vars(assign) + :: int_search(ordered, first_fail, indomain_min, complete) + minimize objective; diff --git a/steelmillslab/on_replay.mzn b/steelmillslab/on_replay.mzn new file mode 100644 index 0000000..7ff3d38 --- /dev/null +++ b/steelmillslab/on_replay.mzn @@ -0,0 +1,8 @@ +include "steelmillslab.mzn"; + +annotation main_vars(array[int] of var int: vars); + +solve + :: main_vars(assign) + :: int_search(ordered, first_fail, indomain_min, complete) + minimize objective; diff --git a/steelmillslab/on_restart.mzn b/steelmillslab/on_restart.mzn index bb30f17..0193f79 100644 --- a/steelmillslab/on_restart.mzn +++ b/steelmillslab/on_restart.mzn @@ -28,6 +28,5 @@ constraint bool_eq_imp(nbh[2], select == 2, status() != START); annotation main_vars(array[int] of var int: vars); solve - :: main_vars(assign) :: int_search(ordered, first_fail, indomain_min, complete) minimize objective; diff --git a/steelmillslab/original.mzn b/steelmillslab/original.mzn index 7ff3d38..5038784 100644 --- a/steelmillslab/original.mzn +++ b/steelmillslab/original.mzn @@ -3,6 +3,5 @@ include "steelmillslab.mzn"; annotation main_vars(array[int] of var int: vars); solve - :: main_vars(assign) :: int_search(ordered, first_fail, indomain_min, complete) minimize objective;