import choco.Problem; import choco.ContradictionException; import choco.integer.*; public class MyProblem extends Problem { int[] inst; long nodes; long time; long nodeLimit; int status; public MyProblem() { super(); nodes = 0; time = 0; nodeLimit = -1; status = 0; } private boolean isConsistent(DecisionVar[] v,int i,int x) throws ContradictionException { //System.out.println("isConsistent(" + v[i] + "," + i + "," + x + ")"); nodes++; boolean consistent = true; inst[i] = x; try{v[i].setVal(x);super.propagate();} catch (ContradictionException e) {consistent = false;} return consistent; } // // test if the problem can be made AC when v takes value x // public long getNodes(){return nodes;} public long getTime(){return time;} public int getStatus(){return status;} public void setNodeLimit(long nodeLimit){this.nodeLimit = nodeLimit;} private int getPotentialDiscrepancies(DecisionVar[] v,int n,int i){ int pd = 0; for (int j=i;j0 && nodes>nodeLimit) throw new Exception(); if (i==n) return true; // all vars instantiated DecVarEnumeration dve = new DecVarEnumeration(v[i]); boolean result = false; int m = v[i].getDomainSize(); int x = dve.getNextValue(); int y = -999; int pd = getPotentialDiscrepancies(v,n,i+1); if (lateDiscrepancies && k<=pd && !result){ worldPush(); result = isConsistent(v,i,x) && ldsProbe(v,n,k,i+1,lateDiscrepancies); worldPop(); } for (int j=1;j0 && nodes>nodeLimit) throw new Exception(); if (i==n) return true; // all vars instantiated //System.out.println("bt(" + v[i] + ")"); DecVarEnumeration dve = new DecVarEnumeration(v[i]); boolean result = false; int m = v[i].getDomainSize(); int x = -999; for (int j=0;j