public static void main(String[] args) { RuleModel m = new RuleModel(); m.buildConsecutiveWERule(); m.buildNoNightBeforeFreeWE(); m.buildNoMoreThanDayRule(); m.buildRestAfterNight(); m.buildCompleteWE(); m.fillModel(); m.addLexConstraint(); m.addMandatoryShift(); m.addMinCoverConstraint(); CPSolver s = new CPSolver(); s.read(m); ArrayList<IntDomainVar> mars = new ArrayList<IntDomainVar>(); for (int i = 0; i < 8; i++) mars.add(s.getVar(m.cvs[i][4])); int[][] lowb = new int[28][3]; { for (int i = 0; i < lowb.length; i++) { lowb[i][0] = 3; lowb[i][1] = 1; lowb[i][2] = 4; } } CoverVarValSelector sel = new CoverVarValSelector(s, m.vs, lowb); // s.attachGoal(new AssignVar(sel,sel)); // s.attachGoal(new AssignVar(new StaticVarOrder(mars.toArray(new IntDomainVar[8])),new // DecreasingDomain())); s.attachGoal( new AssignVar( new StaticVarOrder(s, s.getVar(ArrayUtils.flatten(ArrayUtils.transpose(m.vs)))), new IncreasingDomain())); // s.addGoal(new AssignVar(new // RandomIntVarSelector(s,s.getVar(ArrayUtils.flatten(ArrayUtils.transpose(m.vs))),0),new // RandomIntValSelector())); if (s.solve()) { int i = 0; for (IntegerVariable[] va : m.vs) { for (IntDomainVar v : s.getVar(va)) { System.out.print(toChar(v.getVal()) + " "); } System.out.print(" | "); for (IntDomainVar v : s.getVar(m.cvs[i++])) { System.out.print(v.getVal() + " "); } System.out.println(""); } } s.printRuntimeStatistics(); }