16 lines
396 B
MiniZinc
16 lines
396 B
MiniZinc
predicate adaptive_uniform(array[int] of var int: x, float: init_rate) =
|
|
let {
|
|
var float: rate;
|
|
} in if status() = START then
|
|
rate = init_rate
|
|
elseif status() = UNSAT then
|
|
rate = max(last_val(rate) - 0.02, 0.6)
|
|
else
|
|
rate = min(last_val(rate) + 0.02, 0.95)
|
|
endif
|
|
/\ forall(i in index_set(x)) (
|
|
if uniform(0.0, 1.0) > rate then
|
|
x[i] = sol(x[i])
|
|
endif
|
|
);
|