#include #include class rulers { public : rulers(IlcManager, IlcInt, IlcInt, IlcInt, IlcInt, IlcInt); ~rulers() { }; void print_solution(); void print(IlcIntVar); private : IlcManager manager; IlcInt n; IlcInt m; IlcInt diffs; IlcInt heuristic; IlcInt propagation_method; IlcIntVarArray originalVars; IlcIntVarArray auxiliaryVars; }; rulers::rulers(IlcManager man, IlcInt vars, IlcInt dom, IlcInt added_vars, IlcInt h, IlcInt method) : manager(man), n(vars), m(dom), diffs(added_vars), heuristic(h), propagation_method(method), originalVars(man,n,0,m-1), auxiliaryVars(man,added_vars,0,m-1) { IlcInt i,j,counter=0; if (!propagation_method) { manager.add(IlcAllDiff(auxiliaryVars, IlcWhenDomain)); } else { manager.add(IlcAllDiff(auxiliaryVars, IlcWhenValue)); } for (i=0; i<(n-1); i++) manager.add(originalVars[i] < originalVars[i+1]); manager.add(originalVars[0]==0); manager.add(originalVars[n-1]==m-1); for (i=0; i<(n-1); i++) { for (j=i+1; j