IBM ILOG Solver User's Manual > More on Solving > Setting Filter Levels: Coloring Graphs > Complete program |
Complete program |
INDEX
![]() |
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 |