Skip to content

Commit

Permalink
Backjumping bug fixed.
Browse files Browse the repository at this point in the history
  • Loading branch information
RuedigerLunde committed Nov 30, 2021
1 parent 864cdee commit 8ea5a88
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 15 deletions.
Expand Up @@ -34,7 +34,8 @@ public class MapCSP extends CSP<Variable, String> {
* Australia, with the colors Red, Green, and Blue.
*/
public MapCSP() {
super(Arrays.asList(NSW, WA, T, NT, Q, SA, V));
super(Arrays.asList(NT, SA, V, T, NSW, Q, WA));
//super(Arrays.asList(NSW, WA, T, NT, Q, SA, V));

Domain<String> colors = new Domain<>(RED, GREEN, BLUE);
for (Variable var : getVariables())
Expand Down
Expand Up @@ -84,10 +84,14 @@ private SolutionOrNogood<VAR, VAL> backtrack(CSP<VAR, VAL> csp, Assignment<VAR,
fireStateChanged(csp, assignment, var);
if (assignment.isConsistent(csp.getConstraints(var))) {
SolutionOrNogood<VAR, VAL> res = backtrack(csp, assignment);
if (res.hasSolution() || !res.nogood.contains(var))
if (res.hasSolution()) {
return res; // solution found!
} else if (!res.nogood.contains(var)) {
assignment.remove(var);
return res; // jump back!
else
} else {
result.nogood.addAll(res.nogood);
}
} else {
result.nogood.addAll(findCause(csp, assignment, var));
}
Expand Down
Expand Up @@ -28,12 +28,12 @@ public void setUp() {
public void testBackTrackingSearch() {
Optional<Assignment<Variable, String>> results = new FlexibleBacktrackingSolver<Variable, String>().solve(csp);
Assert.assertTrue(results.isPresent());
Assert.assertEquals(MapCSP.GREEN, results.get().getValue(MapCSP.WA));
Assert.assertEquals(MapCSP.BLUE, results.get().getValue(MapCSP.WA));
Assert.assertEquals(MapCSP.RED, results.get().getValue(MapCSP.NT));
Assert.assertEquals(MapCSP.BLUE, results.get().getValue(MapCSP.SA));
Assert.assertEquals(MapCSP.GREEN, results.get().getValue(MapCSP.Q));
Assert.assertEquals(MapCSP.GREEN, results.get().getValue(MapCSP.SA));
Assert.assertEquals(MapCSP.BLUE, results.get().getValue(MapCSP.Q));
Assert.assertEquals(MapCSP.RED, results.get().getValue(MapCSP.NSW));
Assert.assertEquals(MapCSP.GREEN, results.get().getValue(MapCSP.V));
Assert.assertEquals(MapCSP.BLUE, results.get().getValue(MapCSP.V));
Assert.assertEquals(MapCSP.RED, results.get().getValue(MapCSP.T));
}

Expand Down
Expand Up @@ -85,11 +85,12 @@ protected List<Parameter> createParameters() {
"Backtracking + Forward Checking + MRV&DEG",
"Backtracking + AC3",
"Backtracking + AC3 + MRV&DEG + LCV",
"Backtracking + Backjumping",
"Backtracking + Backjumping + MRV&DEG",
"Min-Conflicts (50)",
"Tree-CSP-Solver",
"Tree-CSP-Solver with Random Root",
"Backtracking + Backjumping",
"Backtracking + Backjumping + MRV&DEG");
"Tree-CSP-Solver with Random Root"
);
return Arrays.asList(p1, p2);
}

Expand Down Expand Up @@ -136,19 +137,19 @@ public void initialize() {
strategy = new FlexibleBacktrackingSolver<Variable, String>().setAll();
break;
case 8:
strategy = new MinConflictsSolver<>(50);
strategy = new BackjumpingBacktrackingSolver<>();
break;
case 9:
strategy = new TreeCspSolver<>();
strategy = new BackjumpingBacktrackingSolver<Variable, String>().set(CspHeuristics.mrvDeg());
break;
case 10:
strategy = new TreeCspSolver<Variable, String>().useRandom(true);
strategy = new MinConflictsSolver<>(50);
break;
case 11:
strategy = new BackjumpingBacktrackingSolver<>();
strategy = new TreeCspSolver<>();
break;
case 12:
strategy = new BackjumpingBacktrackingSolver<Variable, String>().set(CspHeuristics.mrvDeg());
strategy = new TreeCspSolver<Variable, String>().useRandom(true);
break;
}

Expand Down

0 comments on commit 8ea5a88

Please sign in to comment.