A* + tests Dijkstra et A*
This commit is contained in:
parent
5c9a41dd1d
commit
a95084f21e
10 changed files with 440 additions and 7 deletions
|
@ -1,9 +1,74 @@
|
||||||
package org.insa.graphs.algorithm.shortestpath;
|
package org.insa.graphs.algorithm.shortestpath;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import org.insa.graphs.algorithm.AbstractInputData.Mode;
|
||||||
|
import org.insa.graphs.algorithm.AbstractSolution.Status;
|
||||||
|
import org.insa.graphs.algorithm.utils.BinaryHeap;
|
||||||
|
import org.insa.graphs.model.Arc;
|
||||||
|
import org.insa.graphs.model.Graph;
|
||||||
|
import org.insa.graphs.model.Node;
|
||||||
|
import org.insa.graphs.model.Path;
|
||||||
|
import org.insa.graphs.model.Point;
|
||||||
|
|
||||||
public class AStarAlgorithm extends DijkstraAlgorithm {
|
public class AStarAlgorithm extends DijkstraAlgorithm {
|
||||||
|
|
||||||
public AStarAlgorithm(ShortestPathData data) {
|
public AStarAlgorithm(ShortestPathData data) {
|
||||||
super(data);
|
super(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Label createLabel(ShortestPathData data, Arc pere, Label noeudPrecedent) {
|
||||||
|
if(pere == null && noeudPrecedent == null) {
|
||||||
|
return new LabelStar(data.getOrigin(),
|
||||||
|
0,
|
||||||
|
Point.distance(data.getOrigin().getPoint(), data.getDestination().getPoint() ) ,
|
||||||
|
null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double coutEstime = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//Cas chemin le plus court
|
||||||
|
if(data.getMode() == Mode.LENGTH) {
|
||||||
|
coutEstime = pere.getDestination().getPoint().distanceTo(data.getDestination().getPoint() );
|
||||||
|
//Cas chemin le plus rapide
|
||||||
|
}else if(data.getMode() == Mode.TIME) {
|
||||||
|
|
||||||
|
int vitesse,
|
||||||
|
vitesseGraph = data.getGraph().getGraphInformation().getMaximumSpeed() ,
|
||||||
|
vitesseArc = data.getMaximumSpeed() ;
|
||||||
|
|
||||||
|
//On récupère la vitesse
|
||||||
|
if(data.getGraph().getGraphInformation().hasMaximumSpeed() && vitesseArc !=-1 ) {
|
||||||
|
vitesse = Math.min(vitesseGraph, vitesseArc);
|
||||||
|
}else {
|
||||||
|
if(data.getGraph().getGraphInformation().hasMaximumSpeed() && vitesseArc == -1) {
|
||||||
|
vitesse = vitesseGraph;
|
||||||
|
}else if( !data.getGraph().getGraphInformation().hasMaximumSpeed() && vitesseArc !=-1) {
|
||||||
|
vitesse = vitesseArc;
|
||||||
|
}else{
|
||||||
|
vitesse = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
coutEstime = pere.getDestination().getPoint().distanceTo(data.getDestination().getPoint()) * 3.6f / vitesse;
|
||||||
|
}else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return new LabelStar(pere.getDestination(),
|
||||||
|
noeudPrecedent.getCost() + data.getCost(pere),
|
||||||
|
coutEstime,
|
||||||
|
pere);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
Label labels[] = new Label[graph.getNodes().size()];
|
Label labels[] = new Label[graph.getNodes().size()];
|
||||||
Arrays.fill(labels, null);
|
Arrays.fill(labels, null);
|
||||||
|
|
||||||
Label origine = new Label(data.getOrigin(), 0 , null);
|
Label origine = createLabel(data, null, null);
|
||||||
labels[data.getOrigin().getId()] = origine;
|
labels[data.getOrigin().getId()] = origine;
|
||||||
tas.insert(origine);
|
tas.insert(origine);
|
||||||
|
|
||||||
|
@ -69,6 +69,9 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
minimum.setMark();
|
minimum.setMark();
|
||||||
notifyNodeMarked(minimum.getCurrent());
|
notifyNodeMarked(minimum.getCurrent());
|
||||||
|
|
||||||
|
// System.out.println(minimum.getTotalCost());
|
||||||
|
|
||||||
|
|
||||||
// System.out.println(minimum.getCurrent().getNumberOfSuccessors());
|
// System.out.println(minimum.getCurrent().getNumberOfSuccessors());
|
||||||
|
|
||||||
//Pour chaque successeurs du noeud minimum
|
//Pour chaque successeurs du noeud minimum
|
||||||
|
@ -83,14 +86,14 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
|
|
||||||
//Si le successeur n'existe pas, on le crée
|
//Si le successeur n'existe pas, on le crée
|
||||||
if(successeur == null) {
|
if(successeur == null) {
|
||||||
successeur = new Label(arc.getDestination(), minimum.getCost() + data.getCost(arc), arc);
|
successeur = this.createLabel(data, arc, minimum);
|
||||||
labels[arc.getDestination().getId()] = successeur;
|
labels[arc.getDestination().getId()] = successeur;
|
||||||
tas.insert(successeur);
|
tas.insert(successeur);
|
||||||
|
|
||||||
notifyNodeReached(successeur.getCurrent());
|
notifyNodeReached(successeur.getCurrent());
|
||||||
|
|
||||||
//Sinon on regarde si on peut optimiser le coût du successeur
|
//Sinon on regarde si on peut optimiser le coût du successeur
|
||||||
}else {
|
}else{
|
||||||
if(successeur.getCost() > minimum.getCost() + data.getCost(arc)) {
|
if(successeur.getCost() > minimum.getCost() + data.getCost(arc)) {
|
||||||
successeur.setCost(minimum.getCost() + data.getCost(arc));
|
successeur.setCost(minimum.getCost() + data.getCost(arc));
|
||||||
successeur.setFather(arc);
|
successeur.setFather(arc);
|
||||||
|
@ -98,7 +101,7 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
try {
|
try {
|
||||||
tas.miseAJour(successeur);
|
tas.miseAJour(successeur);
|
||||||
}catch(Exception e) {
|
}catch(Exception e) {
|
||||||
System.out.println("fatal error");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,5 +138,14 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||||
System.out.println("nb erreurs = "+cptErreurs);
|
System.out.println("nb erreurs = "+cptErreurs);
|
||||||
return solution;
|
return solution;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Label createLabel(ShortestPathData data, Arc pere, Label noeudPrecedent) {
|
||||||
|
if(pere != null && noeudPrecedent != null) {
|
||||||
|
return new Label( pere.getDestination() , noeudPrecedent.getCost()+ data.getCost(pere), pere);
|
||||||
|
}else {
|
||||||
|
return new Label(data.getOrigin(), 0, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,8 +46,13 @@ public class Label implements Comparable<Label>{
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return ""+this.getCost();
|
return ""+this.getCost();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getTotalCost() {
|
||||||
|
return this.cout;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(Label o) {
|
public int compareTo(Label o) {
|
||||||
return Double.compare(this.getCost(), o.getCost());
|
return Double.compare(this.getTotalCost(), o.getTotalCost());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package org.insa.graphs.algorithm.shortestpath;
|
||||||
|
|
||||||
|
import org.insa.graphs.model.Arc;
|
||||||
|
import org.insa.graphs.model.Node;
|
||||||
|
|
||||||
|
public class LabelStar extends Label{
|
||||||
|
|
||||||
|
private Double coutEstime;
|
||||||
|
|
||||||
|
public LabelStar(Node sommetCourant, double cout, double coutEstime, Arc pere) {
|
||||||
|
super(sommetCourant, cout, pere);
|
||||||
|
this.coutEstime = coutEstime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTotalCost(){
|
||||||
|
return this.getCost() + this.coutEstime;
|
||||||
|
}
|
||||||
|
}
|
|
@ -230,6 +230,7 @@ public class BinaryHeap<E extends Comparable<E>> implements PriorityQueue<E> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isValid() {
|
public boolean isValid() {
|
||||||
E current;
|
E current;
|
||||||
E parent;
|
E parent;
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
package org.insa.graphs.algorithm.shortestpath;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.insa.graphs.algorithm.AbstractSolution.Status;
|
||||||
|
import org.insa.graphs.algorithm.shortestpath.AStarAlgorithm;
|
||||||
|
import org.insa.graphs.algorithm.shortestpath.DijkstraAlgorithm;
|
||||||
|
import org.insa.graphs.algorithm.shortestpath.ShortestPathSolution;
|
||||||
|
import org.insa.graphs.model.Arc;
|
||||||
|
import org.insa.graphs.model.Graph;
|
||||||
|
import org.insa.graphs.model.Node;
|
||||||
|
import org.insa.graphs.model.Path;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class AStarAlgorithmTest extends algorithmTest{
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAStarShortest() {
|
||||||
|
|
||||||
|
for(int i=0; i<dataShortest.length; i++) {
|
||||||
|
AStarAlgorithm aStar = new AStarAlgorithm(dataShortest[i]);
|
||||||
|
ShortestPathSolution solution = aStar.run();
|
||||||
|
Path cheminSolution = solution.getPath();
|
||||||
|
|
||||||
|
Graph graph = solution.getInputData().getGraph();
|
||||||
|
|
||||||
|
//Vérifie chemin valide
|
||||||
|
assertTrue(cheminSolution.isValid());
|
||||||
|
assertEquals(cheminSolution.getOrigin(), graph.get(tabOrigin[i]));
|
||||||
|
assertEquals(cheminSolution.getDestination(), graph.get(tabDestination[i]));
|
||||||
|
|
||||||
|
// List of nodes
|
||||||
|
ArrayList<Node> nodes = new ArrayList<Node>();
|
||||||
|
List<Arc> arcsSolution = cheminSolution.getArcs();
|
||||||
|
nodes.add(arcsSolution.get(0).getOrigin());
|
||||||
|
|
||||||
|
for(int j=0;j<arcsSolution.size(); j++) {
|
||||||
|
nodes.add(arcsSolution.get(j).getDestination());
|
||||||
|
}
|
||||||
|
|
||||||
|
Path cheminShortest = Path.createShortestPathFromNodes(graph, nodes);
|
||||||
|
|
||||||
|
//Vérifie que les chemins sont identiques (Arcs, taille, temps)
|
||||||
|
assertEquals(cheminSolution.getArcs(), cheminShortest.getArcs());
|
||||||
|
assertTrue(cheminSolution.getLength() == cheminShortest.getLength());
|
||||||
|
assertTrue(cheminSolution.getMinimumTravelTime() == cheminShortest.getMinimumTravelTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAStarFastest() {
|
||||||
|
|
||||||
|
for(int i=0; i<dataShortest.length; i++) {
|
||||||
|
AStarAlgorithm aStar = new AStarAlgorithm(dataFastest[i]);
|
||||||
|
ShortestPathSolution solution = aStar.run();
|
||||||
|
Path cheminSolution = solution.getPath();
|
||||||
|
|
||||||
|
Graph graph = solution.getInputData().getGraph();
|
||||||
|
|
||||||
|
//Vérifie chemin valide
|
||||||
|
assertTrue(cheminSolution.isValid());
|
||||||
|
assertEquals(cheminSolution.getOrigin(), graph.get(tabOrigin[i]));
|
||||||
|
assertEquals(cheminSolution.getDestination(), graph.get(tabDestination[i]));
|
||||||
|
|
||||||
|
// List of nodes
|
||||||
|
ArrayList<Node> nodes = new ArrayList<Node>();
|
||||||
|
List<Arc> arcsSolution = cheminSolution.getArcs();
|
||||||
|
nodes.add(arcsSolution.get(0).getOrigin());
|
||||||
|
|
||||||
|
for(int j=0;j<arcsSolution.size(); j++) {
|
||||||
|
nodes.add(arcsSolution.get(j).getDestination());
|
||||||
|
}
|
||||||
|
|
||||||
|
Path cheminFastest = Path.createFastestPathFromNodes(graph, nodes);
|
||||||
|
|
||||||
|
//Vérifie que les chemins sont identiques (Arcs, taille, temps)
|
||||||
|
assertEquals(cheminSolution.getArcs(), cheminFastest.getArcs());
|
||||||
|
assertTrue(cheminSolution.getLength() == cheminFastest.getLength());
|
||||||
|
assertTrue(cheminSolution.getMinimumTravelTime() == cheminFastest.getMinimumTravelTime());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDijkstraInfeasable() {
|
||||||
|
|
||||||
|
AStarAlgorithm aStar = new AStarAlgorithm(dataInfeasable);
|
||||||
|
ShortestPathSolution solution = aStar.run();
|
||||||
|
Path cheminSolution = solution.getPath();
|
||||||
|
|
||||||
|
//Vérifie chemin valide
|
||||||
|
assertEquals(cheminSolution, null);
|
||||||
|
assertEquals(solution.getStatus(), Status.INFEASIBLE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,127 @@
|
||||||
|
package org.insa.graphs.algorithm.shortestpath;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.insa.graphs.algorithm.ArcInspector;
|
||||||
|
import org.insa.graphs.algorithm.ArcInspectorFactory;
|
||||||
|
import org.insa.graphs.algorithm.AbstractSolution.Status;
|
||||||
|
import org.insa.graphs.algorithm.shortestpath.DijkstraAlgorithm;
|
||||||
|
import org.insa.graphs.algorithm.shortestpath.ShortestPathData;
|
||||||
|
import org.insa.graphs.algorithm.shortestpath.ShortestPathSolution;
|
||||||
|
import org.insa.graphs.model.Arc;
|
||||||
|
import org.insa.graphs.model.Graph;
|
||||||
|
import org.insa.graphs.model.Node;
|
||||||
|
import org.insa.graphs.model.Path;
|
||||||
|
import org.insa.graphs.model.io.BinaryGraphReader;
|
||||||
|
import org.insa.graphs.model.io.BinaryPathReader;
|
||||||
|
import org.insa.graphs.model.io.GraphReader;
|
||||||
|
import org.insa.graphs.model.io.PathReader;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class DijkstraAlgorithmTest extends algorithmTest {
|
||||||
|
|
||||||
|
// Small graph use for tests
|
||||||
|
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDijkstraShortest() {
|
||||||
|
|
||||||
|
for(int i=0; i<dataShortest.length; i++) {
|
||||||
|
|
||||||
|
DijkstraAlgorithm dijkstra = new DijkstraAlgorithm(dataShortest[i]);
|
||||||
|
ShortestPathSolution solution = dijkstra.run();
|
||||||
|
Path cheminSolution = solution.getPath();
|
||||||
|
|
||||||
|
Graph graph = solution.getInputData().getGraph();
|
||||||
|
|
||||||
|
//Vérifie chemin valide
|
||||||
|
assertTrue(cheminSolution.isValid());
|
||||||
|
assertEquals(cheminSolution.getOrigin(), graph.get(tabOrigin[i]));
|
||||||
|
assertEquals(cheminSolution.getDestination(), graph.get(tabDestination[i]));
|
||||||
|
|
||||||
|
// List of nodes
|
||||||
|
ArrayList<Node> nodes = new ArrayList<Node>();
|
||||||
|
List<Arc> arcsSolution = cheminSolution.getArcs();
|
||||||
|
nodes.add(arcsSolution.get(0).getOrigin());
|
||||||
|
|
||||||
|
for(int j=0;j< arcsSolution.size(); j++) {
|
||||||
|
nodes.add(arcsSolution.get(j).getDestination());
|
||||||
|
}
|
||||||
|
|
||||||
|
Path cheminShortest = Path.createShortestPathFromNodes(graph, nodes);
|
||||||
|
|
||||||
|
//Vérifie que les chemins sont identiques (Arcs, taille, temps)
|
||||||
|
assertEquals(cheminSolution.getArcs(), cheminShortest.getArcs());
|
||||||
|
assertTrue(cheminSolution.getLength() == cheminShortest.getLength());
|
||||||
|
assertTrue(cheminSolution.getMinimumTravelTime() == cheminShortest.getMinimumTravelTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDijkstraFastest() {
|
||||||
|
|
||||||
|
for(int i=0; i<dataShortest.length; i++) {
|
||||||
|
DijkstraAlgorithm dijkstra = new DijkstraAlgorithm(dataFastest[i]);
|
||||||
|
ShortestPathSolution solution = dijkstra.run();
|
||||||
|
Path cheminSolution = solution.getPath();
|
||||||
|
|
||||||
|
Graph graph = solution.getInputData().getGraph();
|
||||||
|
|
||||||
|
//Vérifie chemin valide
|
||||||
|
assertTrue(cheminSolution.isValid());
|
||||||
|
assertEquals(cheminSolution.getOrigin(), graph.get(tabOrigin[i]));
|
||||||
|
assertEquals(cheminSolution.getDestination(), graph.get(tabDestination[i]));
|
||||||
|
|
||||||
|
// List of nodes
|
||||||
|
ArrayList<Node> nodes = new ArrayList<Node>();
|
||||||
|
List<Arc> arcsSolution = cheminSolution.getArcs();
|
||||||
|
nodes.add(arcsSolution.get(0).getOrigin());
|
||||||
|
|
||||||
|
for(int j=0; j<arcsSolution.size(); j++) {
|
||||||
|
nodes.add(arcsSolution.get(j).getDestination());
|
||||||
|
}
|
||||||
|
|
||||||
|
Path cheminFastest = Path.createFastestPathFromNodes(graph, nodes);
|
||||||
|
|
||||||
|
//Vérifie que les chemins sont identiques (Arcs, taille, temps)
|
||||||
|
assertEquals(cheminSolution.getArcs(), cheminFastest.getArcs());
|
||||||
|
assertTrue(cheminSolution.getLength() == cheminFastest.getLength());
|
||||||
|
assertTrue(cheminSolution.getMinimumTravelTime() == cheminFastest.getMinimumTravelTime());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDijkstraInfeasable() {
|
||||||
|
|
||||||
|
DijkstraAlgorithm dijkstra = new DijkstraAlgorithm(dataInfeasable);
|
||||||
|
ShortestPathSolution solution = dijkstra.run();
|
||||||
|
Path cheminSolution = solution.getPath();
|
||||||
|
|
||||||
|
//Vérifie chemin valide
|
||||||
|
assertEquals(cheminSolution, null);
|
||||||
|
assertEquals(solution.getStatus(), Status.INFEASIBLE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package org.insa.graphs.algorithm.shortestpath;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.insa.graphs.algorithm.ArcInspector;
|
||||||
|
import org.insa.graphs.algorithm.ArcInspectorFactory;
|
||||||
|
import org.insa.graphs.algorithm.shortestpath.ShortestPathData;
|
||||||
|
import org.insa.graphs.model.Graph;
|
||||||
|
import org.insa.graphs.model.io.BinaryGraphReader;
|
||||||
|
import org.insa.graphs.model.io.GraphReader;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
|
||||||
|
public class algorithmTest {
|
||||||
|
|
||||||
|
protected Graph graph, graphPolynesie, graphBelgique;
|
||||||
|
|
||||||
|
|
||||||
|
final String hauteGaronne = "/Users/Kevin/Desktop/programmation/java_files/Maps/europe/france/haute-garonne.mapgr";
|
||||||
|
final String polynesie = "/Users/Kevin/Desktop/programmation/java_files/Maps/europe/france/french-polynesia.mapgr";
|
||||||
|
final String belgique = "/Users/Kevin/Desktop/programmation/java_files/Maps/europe/belgique/belgium.mapgr";
|
||||||
|
|
||||||
|
final static int taille = 5;
|
||||||
|
|
||||||
|
protected ShortestPathData dataShortest[];
|
||||||
|
protected ShortestPathData dataFastest[];
|
||||||
|
protected ShortestPathData dataInfeasable;
|
||||||
|
protected int tabOrigin[], tabDestination[];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
List<ArcInspector> arcList = ArcInspectorFactory.getAllFilters();
|
||||||
|
ArcInspector arcShortestAllRoad = arcList.get(0);
|
||||||
|
ArcInspector arcFastestAllRoad = arcList.get(2);
|
||||||
|
|
||||||
|
try (GraphReader readerHauteGaronne = new BinaryGraphReader(new DataInputStream(
|
||||||
|
new BufferedInputStream(new FileInputStream(hauteGaronne))))) {
|
||||||
|
|
||||||
|
// TODO: Read the graph.
|
||||||
|
graph = readerHauteGaronne.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
try (GraphReader readerPolynesie = new BinaryGraphReader(new DataInputStream(
|
||||||
|
new BufferedInputStream(new FileInputStream(polynesie))))) {
|
||||||
|
|
||||||
|
// TODO: Read the graph.
|
||||||
|
graphPolynesie = readerPolynesie.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
try (GraphReader readerBelgique = new BinaryGraphReader(new DataInputStream(
|
||||||
|
new BufferedInputStream(new FileInputStream(belgique))))) {
|
||||||
|
|
||||||
|
// TODO: Read the graph.
|
||||||
|
graphBelgique = readerBelgique.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
dataShortest = new ShortestPathData[taille];
|
||||||
|
dataFastest = new ShortestPathData[taille];
|
||||||
|
tabOrigin = new int[taille]; tabDestination = new int[taille];
|
||||||
|
|
||||||
|
tabOrigin[0] = 10991; tabOrigin[1] = 102582; tabOrigin[2]= 81460; tabOrigin[3]= 942294; tabOrigin[4]= 10228;
|
||||||
|
|
||||||
|
tabDestination[0] = 89149; tabDestination[1]= 84718; tabDestination[2] = 129594; tabDestination[3] = 412806 ; tabDestination[4]= 666164 ;
|
||||||
|
|
||||||
|
|
||||||
|
dataShortest[0] = new ShortestPathData(graph, graph.get(tabOrigin[0]), graph.get(tabDestination[0]), arcShortestAllRoad);
|
||||||
|
dataShortest[1] = new ShortestPathData(graph, graph.get(tabOrigin[1]), graph.get(tabDestination[1]), arcShortestAllRoad);
|
||||||
|
dataShortest[2] = new ShortestPathData(graph, graph.get(tabOrigin[2]), graph.get(tabDestination[2]), arcShortestAllRoad);
|
||||||
|
dataShortest[3] = new ShortestPathData(graphBelgique, graphBelgique.get(tabOrigin[3]), graphBelgique.get(tabDestination[3]), arcShortestAllRoad);
|
||||||
|
dataShortest[4] = new ShortestPathData(graphBelgique, graphBelgique.get(tabOrigin[4]), graphBelgique.get(tabDestination[4]), arcShortestAllRoad);
|
||||||
|
|
||||||
|
dataFastest[0] = new ShortestPathData(graph, graph.get(tabOrigin[0]), graph.get(tabDestination[0]) , arcFastestAllRoad);
|
||||||
|
dataFastest[1] = new ShortestPathData(graph, graph.get(tabOrigin[1]), graph.get(tabDestination[1]), arcFastestAllRoad);
|
||||||
|
dataFastest[2] = new ShortestPathData(graph, graph.get(tabOrigin[2]), graph.get(tabDestination[2]), arcFastestAllRoad);
|
||||||
|
dataFastest[3] = new ShortestPathData(graphBelgique, graphBelgique.get(tabOrigin[3]), graphBelgique.get(tabDestination[3]), arcFastestAllRoad);
|
||||||
|
dataFastest[4] = new ShortestPathData(graphBelgique, graphBelgique.get(tabOrigin[4]), graphBelgique.get(tabDestination[4]), arcFastestAllRoad);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dataInfeasable = new ShortestPathData(graphPolynesie, graphPolynesie.get(2984), graphPolynesie.get(10467), arcFastestAllRoad);
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -499,6 +499,7 @@ public class MainWindow extends JFrame {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Runnable runnable = null;
|
Runnable runnable = null;
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,7 @@ public class GraphStatistics {
|
||||||
* @return true if this graph has a maximum speed limit, false otherwise.
|
* @return true if this graph has a maximum speed limit, false otherwise.
|
||||||
*/
|
*/
|
||||||
public boolean hasMaximumSpeed() {
|
public boolean hasMaximumSpeed() {
|
||||||
return this.maximumLength != NO_MAXIMUM_SPEED;
|
return this.maximumSpeed != NO_MAXIMUM_SPEED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue