// NSCPModelConstrained.ConstraintOptions patternOptions = NSCPModelConstrained.ConstraintOptions.WITH_REG;
NSCPModelConstrained.ConstraintOptions patternOptions = NSCPModelConstrained.ConstraintOptions.WITH_MCR;
BranchingStrategy strategy = BranchingStrategy.FORCE_DOMWDEG;
Solver solver = new Solver();
NurseSchedulingProblem m = new NSCPModelConstrained(data, basisOptions, patternOptions, solver);
SearchMonitorFactory.limitTime(solver, 180000);
IntVar[] vars = ArrayUtils.flatten(ArrayUtils.transpose(m.getShifts()));
solver.set(strategy.getGoal(solver, vars));
if (Boolean.TRUE == solver.findSolution()) {
m.printSolution(solver);
NSChecker checker = new NSChecker(data);
if (checker.checkSolution(m.getSolution(solver)))
System.out.println("Solution checked.");
}
String content =
solver.getMeasures().getTimeCount() + " ms,\t " + solver.getMeasures().getNodeCount() + " nodes,\t "
+ solver.getMeasures().getBackTrackCount() + " bks,\t "
+ strategy.name() + "\t " + patternOptions.name() + "\t "
+ m.getDescription() + "\n";
System.out.println(content);
}