Do not create large boolean scal prod expr, crr, create the var instead

This commit is contained in:
lperron@google.com
2014-05-25 16:34:08 +00:00
parent c576b93e3e
commit 6eeb140ec6

View File

@@ -2702,10 +2702,17 @@ IntExpr* MakeScalProdAux(Solver* solver, const std::vector<IntVar*>& vars,
} else {
if (AreAllBooleans(vars)) {
if (AreAllPositive(coefs)) {
if (vars.size() > 8) {
return solver->MakeSum(
solver->RegisterIntExpr(solver->RevAlloc(
new PositiveBooleanScalProd(solver, vars, coefs))),
constant);
solver->RegisterIntExpr(solver->RevAlloc(
new PositiveBooleanScalProd(solver, vars, coefs)))->Var(),
constant);
} else {
return solver->MakeSum(
solver->RegisterIntExpr(solver->RevAlloc(
new PositiveBooleanScalProd(solver, vars, coefs))),
constant);
}
} else {
// If some coefficients are non-positive, partition coefficients in two
// sets, one for the positive coefficients P and one for the negative