Added log method
This commit is contained in:
parent
daec1d198f
commit
304b71e1d9
1 changed files with 24 additions and 10 deletions
|
@ -5,18 +5,20 @@ import org.insa.graphs.algorithm.utils.ElementNotFoundException;
|
||||||
import org.insa.graphs.model.Arc;
|
import org.insa.graphs.model.Arc;
|
||||||
import org.insa.graphs.model.Graph;
|
import org.insa.graphs.model.Graph;
|
||||||
import org.insa.graphs.algorithm.utils.BinaryHeap;
|
import org.insa.graphs.algorithm.utils.BinaryHeap;
|
||||||
|
import org.insa.graphs.model.Node;
|
||||||
import org.insa.graphs.model.Path;
|
import org.insa.graphs.model.Path;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
|
|
||||||
public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
|
|
||||||
public DijkstraAlgorithm(ShortestPathData data) {
|
public DijkstraAlgorithm(ShortestPathData data) {
|
||||||
super(data);
|
super(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final private boolean DEBUG = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ShortestPathSolution doRun() {
|
protected ShortestPathSolution doRun() {
|
||||||
final ShortestPathData data = getInputData();
|
final ShortestPathData data = getInputData();
|
||||||
|
@ -40,20 +42,26 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
int iterationCounter= 0;
|
int iterationCounter= 0;
|
||||||
|
|
||||||
while (!heap.isEmpty() && labels[destination].isNotMarked()) {
|
while (!heap.isEmpty() && labels[destination].isNotMarked()) {
|
||||||
Label parent = heap.deleteMin();
|
|
||||||
parent.setMarked(true);
|
|
||||||
System.out.println(parent.getCost());
|
|
||||||
iterationCounter++;
|
iterationCounter++;
|
||||||
for (Arc arc : graph.getNodes().get(parent.getAssociatedNode()).getSuccessors()) {
|
|
||||||
Label current = labels[arc.getDestination().getId()];
|
Label parentLabel = heap.deleteMin();
|
||||||
|
parentLabel.setMarked(true);
|
||||||
|
Node parentNode = graph.getNodes().get(parentLabel.getAssociatedNode());
|
||||||
|
notifyNodeMarked(parentNode);
|
||||||
|
|
||||||
|
this.log("Cout marqué : " + parentLabel.getCost());
|
||||||
|
this.log("Nb successeurs : " + parentNode.getNumberOfSuccessors());
|
||||||
|
|
||||||
|
for (Arc arc : parentNode.getSuccessors()) {
|
||||||
|
Label currentLabel = labels[arc.getDestination().getId()];
|
||||||
notifyNodeReached(arc.getDestination());
|
notifyNodeReached(arc.getDestination());
|
||||||
|
|
||||||
if (current.isNotMarked() && data.isAllowed(arc)) {
|
if (currentLabel.isNotMarked() && data.isAllowed(arc)) {
|
||||||
this.updateCost(arc, parent, current, heap, data);
|
this.updateCost(arc, parentLabel, currentLabel, heap, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println("Nb itérations: " + iterationCounter);
|
this.log("===============");
|
||||||
ShortestPathSolution solution = null;
|
ShortestPathSolution solution = null;
|
||||||
// Destination has no predecessor, the solution is infeasible...
|
// Destination has no predecessor, the solution is infeasible...
|
||||||
if (labels[destination].getFatherArc() == null) {
|
if (labels[destination].getFatherArc() == null) {
|
||||||
|
@ -76,9 +84,15 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
// Create the final solution.
|
// Create the final solution.
|
||||||
solution = new ShortestPathSolution(data, AbstractSolution.Status.OPTIMAL, new Path(graph, arcs));
|
solution = new ShortestPathSolution(data, AbstractSolution.Status.OPTIMAL, new Path(graph, arcs));
|
||||||
}
|
}
|
||||||
|
this.log("Nb arcs solution : " + solution.getPath().getArcs().size());
|
||||||
|
this.log("Nb itérations solution: " + iterationCounter);
|
||||||
return solution;
|
return solution;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void log(String message) {
|
||||||
|
if (this.DEBUG)
|
||||||
|
System.out.println(message);
|
||||||
|
}
|
||||||
|
|
||||||
private void updateCost(Arc arc, Label parent, Label current, BinaryHeap<Label> heap, ShortestPathData data) {
|
private void updateCost(Arc arc, Label parent, Label current, BinaryHeap<Label> heap, ShortestPathData data) {
|
||||||
double newCost = parent.getCost() + data.getCost(arc);
|
double newCost = parent.getCost() + data.getCost(arc);
|
||||||
|
|
Loading…
Reference in a new issue