hook the right constraints

This commit is contained in:
lperron@google.com
2012-07-05 12:54:25 +00:00
parent 7262fc4c8c
commit 999be2637b
2 changed files with 8 additions and 4 deletions

View File

@@ -2320,10 +2320,14 @@ IntExpr* Solver::MakeSum(const std::vector<IntVar*>& vars) {
new_max = CapAdd(vars[i]->Max(), new_max);
}
}
const string name =
const bool all_booleans = AreAllBooleans(vars.data(), vars.size());
const string name = all_booleans ?
StringPrintf("BooleanSum([%s])",
DebugStringVector(vars, ", ").c_str()) :
StringPrintf("Sum([%s])", DebugStringVector(vars, ", ").c_str());
IntVar* const sum_var = MakeIntVar(new_min, new_max, name);
if (AreAllBooleans(vars.data(), vars.size())) {
if (all_booleans) {
AddConstraint(RevAlloc(
new SumBooleanEqualToVar(this, vars.data(), vars.size(), sum_var)));
} else if (new_min != kint64min && new_max != kint64max) {

View File

@@ -1002,7 +1002,7 @@ Constraint* Solver::MakeIsLessOrEqualCt(
} else if (right->Bound()) {
return MakeIsLessOrEqualCstCt(left->Var(), right->Min(), b);
}
return MakeIsLessOrEqualCstCt(MakeDifference(left, right)->Var(), 0, b);
return RevAlloc(new IsLessOrEqualCt(this, left->Var(), right->Var(), b));
}
IntVar* Solver::MakeIsLessVar(
@@ -1054,7 +1054,7 @@ Constraint* Solver::MakeIsLessCt(
} else if (right->Bound()) {
return MakeIsLessCstCt(left->Var(), right->Min(), b);
}
return MakeIsLessCstCt(MakeDifference(left, right)->Var(), 0, b);
return RevAlloc(new IsLessCt(this, left->Var(), right->Var(), b));
}
IntVar* Solver::MakeIsGreaterOrEqualVar(