ILCGOAL2(computeSum, IlcIntVar, var, IlcIntVarVarArray, vars){
IloSolver solver = getSolver();
IlcInt sum = 0;
for(IlcInt i = 0; i < vars.getSize(); i++)
sum += vars[i].getValue();
var.setValue(sum);
return 0;
}
ILOCPGOALWRAPPER2(computeSum, solver, IloNumVar, var, IloNumVarArray, vars){
IlcIntVarArray svars = solver.getIntVarArray(vars);
IlcIntVar svar = solver.getIntVar(var);
return IlcComputeSum(solver, var, vars);
}
int main(){
IloEnv env;
IloModel m(env);
IloIntVarArray vars(env, 5, 0, 3);
IloIntVar sum(env, 0, 100);
m.add(vars);
m.add(sum);
m.add(IloMaximize(env, sum));
IloSolver s(m);
s.solve(IloGenerate(env, vars) && computeSum(env, sum, vars)); // not good
cout << "Sum = " << s.getIntVar(sum) << endl;
cout << "#tries = " << s.getNumberOfChoicePoints() << endl;
env.end();
return 0;
}
|