| IBM ILOG Solver User's Manual > More on Solving > Setting Filter Levels: Coloring Graphs > Complete program |
Complete program |
INDEX
PREVIOUS
NEXT
|
The complete graph coloring program follows. The results will vary depending on platform, machine, configuration, and so on. You can also view it online in the file YourSolverHome/examples/src/graph.cpp.
#include <ilsolver/ilosolverint.h>
ILOSTLBEGIN
IloInt createClique(IloInt i, IloInt j, IloInt n){
if (j >= i) return (i*n-i*(i+1)/2+j-i);
else return createClique(j,i-1,n);
}
void testGraph(IloInt nTest)
{
IloEnv env;
try {
IloModel model(env);
IloInt n = (nTest%2)?nTest+1:nTest;
env.out() << "--------------------------------------" << endl;
IloInt nbNodes = n*(n-1)/2;
IloInt nbColors = n-1;
IloInt i, j;
IloIntVarArray vars(env,nbNodes,0,nbColors-1);
for(i = 0; i < n-2; i++){
model.add(vars[i] < vars[i+1]);
}
for(i = 0; i < n; i++){
IloIntVarArray clique(env,n-1);
for(j = 0; j < n-1; j++){
clique[j] = vars[createClique(i,j, n)];
}
model.add(IloAllDiff(env,clique));
}
IloSolver solver(model);
IloTimer timer(env);
// IloExtendedLevel
solver.setDefaultFilterLevel(IloAllDiffCt,IloExtendedLevel);
timer.start();
if (!solver.solve(IloGenerate(env,vars,IloChooseMinSizeInt)))
solver.out() << "No solution" << endl;
solver.out() << "IloExtendedLevel \t clique size:" << nTest;
solver.out() << "\t#fails:\t" << solver.getNumberOfFails() << "\t";
solver.out() << "cpu time: " << timer.getTime() << " s" << endl;
// Redundant constraint for other levels
IloIntVarArray cards(env,nbColors,nbNodes/nbColors,
nbNodes/nbColors);
IloConstraint distribute=IloDistribute(env,cards,vars);
model.add(distribute);
// IloMediumLevel
solver.setDefaultFilterLevel(IloAllDiffCt,IloMediumLevel);
timer.restart();
if (! solver.solve(IloGenerate(env,vars,IloChooseMinSizeInt)))
solver.out() << "No solution" << endl;
solver.out() << "IloMediumLevel \t \t clique size:" << nTest;
solver.out() << "\t#fails:\t" << solver.getNumberOfFails() << "\t";
solver.out() << "cpu time: " << timer.getTime() << " s" << endl;
// IloBasicLevel
solver.setDefaultFilterLevel(IloAllDiffCt,IloBasicLevel);
timer.restart();
if (! solver.solve(IloGenerate(env,vars,IloChooseMinSizeInt)))
solver.out() << "No solution" << endl;
solver.out() << "IloBasicLevel \t \t clique size:" << nTest;
solver.out() << "\t#fails:\t" << solver.getNumberOfFails() << "\t";
solver.out() << "cpu time: " << timer.getTime() << " s" << endl;
solver.out() << endl;
}
catch (IloException& ex) {
cerr << "Error: " << ex << endl;
}
env.end();
}
int main(int argc, char** argv){
IloInt b1=(argc>1)?atoi(argv[1]):27;
IloInt b2=(argc>2)?atoi(argv[2]):b1+4;
for(IloInt nTest = b1; nTest < b2+1; nTest+=2){
testGraph(nTest);
}
return 0;
}
Results: cliques of size 27, 29, and 31
-------------------------------------- IloExtendedLevel clique size:27 #fails: 0 cpu time: 0.651 s IloMediumLevel clique size:27 #fails: 1 cpu time: 0.09 s IloBasicLevel clique size:27 #fails: 1 cpu time: 0.05 s -------------------------------------- IloExtendedLevel clique size:29 #fails: 4 cpu time: 0.541 s IloMediumLevel clique size:29 #fails: 7 cpu time: 0.11 s IloBasicLevel clique size:29 #fails: 23 cpu time: 0.07 s -------------------------------------- IloExtendedLevel clique size:31 #fails: 4 cpu time: 0.751 s IloMediumLevel clique size:31 #fails: 49 cpu time: 0.16 s IloBasicLevel clique size:31 #fails: 65 cpu time: 0.11 s
Results: cliques of size 51, 53, and 55
-------------------------------------- IloExtendedLevel clique size:51 #fails: 501 cpu time: 9.754 s IloMediumLevel clique size:51 #fails: 10906 cpu time: 13.299 s IloBasicLevel clique size:51 #fails: 24512 cpu time: 19.578 s -------------------------------------- IloExtendedLevel clique size:53 #fails: 2 cpu time: 10.896 s IloMediumLevel clique size:53 #fails: 368 cpu time: 1.121 s IloBasicLevel clique size:53 #fails: 13159 cpu time: 9.063 s -------------------------------------- IloExtendedLevel clique size:55 #fails: 2 cpu time: 13.35 s IloMediumLevel clique size:55 #fails: 27 cpu time: 1.221 s IloBasicLevel clique size:55 #fails: 94 cpu time: 0.892 s
Results: cliques of size 61
-------------------------------------- IloExtendedLevel clique size:61 #fails: 5 cpu time: 22.502 s IloMediumLevel clique size:61 #fails: 120408491 cpu time: 172926 s
Results: cliques of size 71
-------------------------------------- IloExtendedLevel clique size:71 #fails: 5 cpu time: 49.471 s IloMediumLevel clique size:71 #fails: 586 cpu time: 5.217 s IloBasicLevel clique size:71 #fails: 1167 cpu time: 4.977 s
| © Copyright IBM Corp. 1987, 2009. Legal terms. | PREVIOUS NEXT |