Пример #1
0
  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();
  }