Use separate models for record/replay so chuffed behaves correctly
This commit is contained in:
parent
9071b2aa0f
commit
ac2c1ccd23
32
gbac/on_record.mzn
Normal file
32
gbac/on_record.mzn
Normal file
@ -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;
|
7
gbac/on_replay.mzn
Normal file
7
gbac/on_replay.mzn
Normal file
@ -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;
|
@ -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;
|
||||
|
@ -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;
|
||||
|
36
rcpsp-wet/on_record.mzn
Normal file
36
rcpsp-wet/on_record.mzn
Normal file
@ -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;
|
8
rcpsp-wet/on_replay.mzn
Normal file
8
rcpsp-wet/on_replay.mzn
Normal file
@ -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;
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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}
|
||||
|
||||
|
@ -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}
|
||||
|
33
steelmillslab/on_record.mzn
Normal file
33
steelmillslab/on_record.mzn
Normal file
@ -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;
|
8
steelmillslab/on_replay.mzn
Normal file
8
steelmillslab/on_replay.mzn
Normal file
@ -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;
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user