// START extra variables/constraints for guided improvement algorithm
List<Constraint> stack = new ArrayList<>();
IntVar lbA = VF.enumerated("lbA", 0, 2, solver);
IntVar lbB = VF.enumerated("lbB", 0, 2, solver);
BoolVar aSBetter = ICF.arithm(a, ">", lbA).reif();
BoolVar bSBetter = ICF.arithm(b, ">", lbB).reif();
BoolVar aBetter = ICF.arithm(a, ">=", lbA).reif();
BoolVar bBetter = ICF.arithm(b, ">=", lbB).reif();
push(ICF.arithm(lbA, "=", a), stack, solver);
push(ICF.arithm(lbB, "=", b), stack, solver);
Constraint strictlyBetter
= LCF.or(
LCF.and(aSBetter, bBetter),