better IsEqual on var of size 2

This commit is contained in:
lperron@google.com
2012-06-29 14:34:23 +00:00
parent 6e4be4f76d
commit 8e2352e545
2 changed files with 10 additions and 1 deletions

View File

@@ -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);
}

View File

@@ -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.