import java.io.*; import java.util.*; import edu.neu.ccs.evergreen.ir.*; import edu.neu.ccs.evergreen.*; /** * * @author Vlad-Alexandru Slavici * */ class Decide{ static Vector sortedVariables=new Vector(); static int c=0; /** * choose what variable to decide based on the values of the lookahead polynomials * * @param csp * the current CSP instance * @param initial * is it a first call to the method after restart * * @return the object */ public static VarAssign/**/ choose(CSP csp, boolean initial){ Random r=new Random(); if (sortedVariables.size()>0) while (csp.unassigned.indexOf(((VarAssign)sortedVariables.get(0)).getVar())<0) { sortedVariables.remove(0); if (sortedVariables.size()==0) break; } //we choose to sort the numbers with a csp.p probability if (r.nextInt(1000)*1.0/1000<=csp.p || sortedVariables.size()==0){ //we must sort the numbers according to the biases Vector sortedVar=new Vector(); Vector sortedValues=new Vector(); Vector unassigned=new Vector(csp.unassigned); Vector assignment=new Vector(csp.assignment.keySet()); for (int i=0;i ((Output)sortedValues.get(j)).getPolynomial().eval(((Output)sortedValues.get(j)).getMaxBias())) break; } sortedVar.add(j,new VarAssign((Integer)unassigned.get(i),new Integer(0))); sortedValues.add(j,outp); csp.assignment.put(csp.unassigned.get(i),new Integer(1)); csp_aux=new CSP(); it=csp.assignment.keySet().iterator(); while (it.hasNext()){ Integer v=(Integer)it.next(); csp_aux.assignment.put(new Integer(v.intValue()),new Integer(((Integer)csp.assignment.get(v)).intValue())); } it=csp.previous_best.keySet().iterator(); while (it.hasNext()){ Integer v=(Integer)it.next(); csp_aux.previous_best.put(new Integer(v.intValue()),new Integer(((Integer)csp.previous_best.get(v)).intValue())); } for (int k=0;k ((Output)sortedValues.get(j)).getPolynomial().eval(((Output)sortedValues.get(j)).getMaxBias())) break; } sortedVar.add(j,new VarAssign((Integer)unassigned.get(i),new Integer(1))); sortedValues.add(j,outp); csp.assignment.remove(unassigned.get(i)); } sortedVariables=new Vector(sortedVar); sortedVariables.remove(0); return (VarAssign)sortedVar.get(0); } else{ return (VarAssign)sortedVariables.remove(0); } } }