better IsEqual on var of size 2
This commit is contained in:
@@ -379,6 +379,15 @@ IntVar* Solver::MakeIsEqualCstVar(IntVar* const var, int64 value) {
|
||||
if (value == 0 && IsADifference(var, &left, &right)) {
|
||||
return MakeIsEqualVar(left, right);
|
||||
}
|
||||
if (var->Max() - var->Min() == 1) {
|
||||
if (value == var->Min()) {
|
||||
return MakeDifference(value + 1, var)->Var();
|
||||
} else if (value == var->Max()) {
|
||||
return MakeSum(var, -value + 1)->Var();
|
||||
} else {
|
||||
return MakeIntConst(0);
|
||||
}
|
||||
}
|
||||
return var->IsEqual(value);
|
||||
}
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ void ParserState::ComputeViableTarget(
|
||||
id == "array_bool_element" ||
|
||||
id == "int_lin_eq_reif" ||
|
||||
id == "int_eq_reif" ||
|
||||
id == "int_ne_reif",
|
||||
id == "int_ne_reif" ||
|
||||
id == "bool_eq_reif" ||
|
||||
id == "bool_ne_reif") {
|
||||
// Defines a bool var.
|
||||
|
||||
Reference in New Issue
Block a user