aimacode / aima-java

Java implementation of algorithms from Russell And Norvig's "Artificial Intelligence - A Modern Approach"

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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?