What's wrong with by BackJumpingStrategy.java in CSP
ThuriyaThwin opened this issue · comments
`
public class BackjumpingStrategy extends SolutionStrategy {
static int numberOfBacktrack = 0;
static int numberOfConsistencyCheck = 0;
Map conflict = new HashMap();
boolean backjump;
int count=0;
public Assignment solve(CSP csp) {
return recursiveBackJumpingSearch(csp, new Assignment());
}
private Assignment recursiveBackJumpingSearch(CSP csp, Assignment assignment) {
Assignment result ;
if (assignment.isComplete(csp.getVariables())) {
return assignment;
}
else {
Variable var= selectUnassignedVariable(assignment, csp);
if(!(var instanceof NullType))
{
if(numberOfBacktrack>1)
{
Variable lastvar=assignment.lastVar();
conflict.put(var,lastvar);
conflict.put(var,conflict.get(lastvar));
}
}else
{
Variable lastvar=assignment.lastVar();
conflict.put(lastvar,conflict.get(var));
conflict.remove(lastvar,lastvar);
var=lastvar;
}
for (Object value : orderDomainValues(var, assignment, csp)) {
assignment.setAssignment(var, value);
fireStateChanged(assignment, csp);
if (assignment.isConsistent(csp.getConstraints(var))) {
result=recursiveBackJumpingSearch(csp, assignment);
if (result != null) {
return result;
}
if (result == null) {
numberOfBacktrack++;
}
}
assignment.removeAssignment(var);
}
}
return null;
}
protected Variable selectUnassignedVariable(Assignment assignment, CSP csp) {
for (Variable var : csp.getVariables()) {
if (!(assignment.hasAssignmentFor(var)))
return var;
}
return null;
}
protected Iterable<?> orderDomainValues(Variable var, Assignment assignment, CSP csp) {
return csp.getDomain(var);
}
public int getNumberOfBacktrack() {
return numberOfBacktrack;
}
public int getNumberOfConsistencyCheck() {
return numberOfConsistencyCheck;
}
`
I am implementing backjumping algorithm based on aima framework but it doesn't work as expected.
What's wrong with me?