predicate adaptiveUniform(array[int] of var int: x, float: initialDestrRate) = let { var float: rate; } in if status() = START then rate = initialDestrRate elseif status() = UNSAT then rate = min(lastval(rate)-0.02,0.6) else rate = max(lastval(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]) else true endif);