fin de séance, abandon des AccessRestrictions
This commit is contained in:
parent
af1f34f75b
commit
f75175a71a
1 changed files with 78 additions and 56 deletions
|
@ -56,31 +56,35 @@ public class DijkstraAlgorithm_et_AStarTest{
|
||||||
public static void initAll() throws IOException {
|
public static void initAll() throws IOException {
|
||||||
|
|
||||||
//TODO: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHHHH
|
//TODO: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHHHH
|
||||||
/*//gestion des restrictions pour pouvoir créer les Bellman-Ford
|
//rabbithole, mission annulée
|
||||||
|
//sinon, utilisation de toAccessInformation(), à condition de savoir quel bit correspond à quoi...
|
||||||
|
//gestion des restrictions pour pouvoir créer les Bellman-Ford
|
||||||
AccessRestrictions voiture, pedestre;
|
AccessRestrictions voiture, pedestre;
|
||||||
AccessRestrictions.AccessRestriction authorise = AccessRestrictions.AccessRestriction.ALLOWED;
|
/*AccessRestrictions.AccessRestriction authorise = AccessRestrictions.AccessRestriction.ALLOWED;
|
||||||
EnumMap<AccessMode, AccessRestrictions.AccessRestriction> pmap, vmap;
|
EnumMap<AccessMode, AccessRestrictions.AccessRestriction> pmap, vmap;
|
||||||
pmap = null;//dkgfvbwslidfue djeflmmqff^dfomqf^sf652s894fd5swrtwedf+e
|
pmap = null;//dkgfvbwslidfue djeflmmqff^dfomqf^sf652s894fd5swrtwedf+e
|
||||||
vmap = new EnumMap<AccessMode, AccessRestrictions.AccessRestriction>();
|
vmap = null;//cette initalisation ne marche pas, COMMENT faire? ->toAccessInformation de voiture et pedestre sans passer par des EnumMap
|
||||||
pmap.put(AccessMode.FOOT, authorise);
|
pmap.put(AccessMode.FOOT, authorise);
|
||||||
vmap.put(AccessMode.MOTORCAR, authorise);
|
//vmap.put(AccessMode.MOTORCAR, authorise);*/
|
||||||
pedestre = new AccessRestrictions(pmap);
|
//bloc actuellement inutile
|
||||||
voiture = new AccessRestrictions(vmap);*/
|
|
||||||
|
|
||||||
RoadInformation speed10 = new RoadInformation(RoadType.MOTORWAY, null, false, 36, ""),
|
voiture = new AccessRestrictions();//vmap en paramètre si possible
|
||||||
speed20 = new RoadInformation(RoadType.MOTORWAY, null, false, 72, ""),
|
pedestre = new AccessRestrictions();//pmap en paramètre si possible
|
||||||
pietonable = new RoadInformation(RoadType.PEDESTRIAN, null, false, 5, "");
|
|
||||||
|
RoadInformation speed10 = new RoadInformation(RoadType.MOTORWAY, voiture, false, 36, ""),
|
||||||
|
speed20 = new RoadInformation(RoadType.MOTORWAY, voiture, false, 72, ""),
|
||||||
|
pietonable = new RoadInformation(RoadType.PEDESTRIAN, pedestre, false, 5, "");
|
||||||
//cyclable = new RoadInformation(RoadType.CYCLEWAY, null, false, 20, ""),
|
//cyclable = new RoadInformation(RoadType.CYCLEWAY, null, false, 20, ""),
|
||||||
//toutes les routes ici sont à double sens
|
//toutes les routes ici sont à double sens
|
||||||
//attention, les piétons ont une maxspeed définie à 5
|
//attention, les piétons ont une maxspeed définie à 5
|
||||||
|
|
||||||
// Create nodes
|
// Create nodes
|
||||||
nodes = new Node[8];
|
nodes = new Node[9];
|
||||||
for (int i = 0; i < nodes.length; ++i) {
|
for (int i = 0; i < nodes.length; ++i) {
|
||||||
nodes[i] = new Node(i, null);
|
nodes[i] = new Node(i, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// définition des arcs
|
// définition des arcs (graphe custom)
|
||||||
ab = Node.linkNodes(nodes[0], nodes[1], 10, speed10, null);
|
ab = Node.linkNodes(nodes[0], nodes[1], 10, speed10, null);
|
||||||
ac = Node.linkNodes(nodes[0], nodes[2], 50, speed20, null);
|
ac = Node.linkNodes(nodes[0], nodes[2], 50, speed20, null);
|
||||||
ad = Node.linkNodes(nodes[0], nodes[3], 15, speed10, null);
|
ad = Node.linkNodes(nodes[0], nodes[3], 15, speed10, null);
|
||||||
|
@ -103,62 +107,65 @@ public class DijkstraAlgorithm_et_AStarTest{
|
||||||
|
|
||||||
//initialisation des datas
|
//initialisation des datas
|
||||||
dataal= new ShortestPathData(graph, nodes[0], nodes[4], alllen);//a->e
|
dataal= new ShortestPathData(graph, nodes[0], nodes[4], alllen);//a->e
|
||||||
datacl= new ShortestPathData(graph, nodes[0], nodes[0], carlen);//b->g
|
datacl= new ShortestPathData(graph, nodes[1], nodes[6], carlen);//b->g
|
||||||
dataat= new ShortestPathData(graph, nodes[0], nodes[0], alltime);//h->b
|
dataat= new ShortestPathData(graph, nodes[7], nodes[1], alltime);//h->b
|
||||||
datact= new ShortestPathData(graph, nodes[0], nodes[0], cartime);//c->b
|
datact= new ShortestPathData(graph, nodes[2], nodes[1], cartime);//c->b
|
||||||
datapt= new ShortestPathData(graph, nodes[5], nodes[0], pietime);//f->e
|
datapt= new ShortestPathData(graph, nodes[5], nodes[4], pietime);//f->e
|
||||||
onenodata=new ShortestPathData(graph, nodes[2], nodes[2], pietime);
|
onenodata=new ShortestPathData(graph, nodes[2], nodes[2], pietime);
|
||||||
emptydata=new ShortestPathData(graph, null, null, pietime);
|
emptydata=new ShortestPathData(graph, null, null, pietime);
|
||||||
invalidata=new ShortestPathData(graph, nodes[0], nodes[7], carlen);//h est accessible uniquement aux piétons
|
invalidata=new ShortestPathData(graph, nodes[0], nodes[8], carlen);//h aurait dû être inaccessible aux voitures
|
||||||
|
//pour compenser, ajout du node i non relié
|
||||||
|
|
||||||
//initialisation des Dijkstras
|
//initialisation des Dijkstras
|
||||||
dijkal = (new DijkstraAlgorithm(dataal)).run();
|
dijkal = (new DijkstraAlgorithm(dataal)).run();
|
||||||
dijkcl = (new DijkstraAlgorithm(datacl)).run();
|
dijkcl = (new DijkstraAlgorithm(datacl)).run();
|
||||||
dijkat = (new DijkstraAlgorithm(dataat)).run();
|
dijkat = (new DijkstraAlgorithm(dataat)).run();
|
||||||
dijkct = (new DijkstraAlgorithm(datact)).run();
|
dijkct = (new DijkstraAlgorithm(datact)).run();
|
||||||
//dijkpt = (new DijkstraAlgorithm(datapt)).run();//erreur ici
|
dijkpt = (new DijkstraAlgorithm(datapt)).run();
|
||||||
onenodijk = (new DijkstraAlgorithm(onenodata)).run();
|
onenodijk = (new DijkstraAlgorithm(onenodata)).run();
|
||||||
emptydijk = (new DijkstraAlgorithm(emptydata)).run();//erreur ici
|
emptydijk = (new DijkstraAlgorithm(emptydata)).run();
|
||||||
//invalidijk = (new DijkstraAlgorithm(invalidata)).run();//et erreur là
|
invalidijk = (new DijkstraAlgorithm(invalidata)).run();
|
||||||
|
System.out.print(invalidijk.toString());//----------------------hey, look here
|
||||||
|
|
||||||
//initialisation des A*
|
//initialisation des A*
|
||||||
asal = (new DijkstraAlgorithm(dataal)).run();
|
asal = (new DijkstraAlgorithm(dataal)).run();
|
||||||
ascl = (new DijkstraAlgorithm(datacl)).run();
|
ascl = (new DijkstraAlgorithm(datacl)).run();
|
||||||
asat = (new DijkstraAlgorithm(dataat)).run();
|
asat = (new DijkstraAlgorithm(dataat)).run();
|
||||||
asct = (new DijkstraAlgorithm(datact)).run();
|
asct = (new DijkstraAlgorithm(datact)).run();
|
||||||
//aspt = (new DijkstraAlgorithm(datapt)).run();//erreur ici
|
aspt = (new DijkstraAlgorithm(datapt)).run();
|
||||||
asonenod = (new DijkstraAlgorithm(onenodata)).run();
|
asonenod = (new DijkstraAlgorithm(onenodata)).run();
|
||||||
asempty = (new DijkstraAlgorithm(emptydata)).run();//erreur ici
|
asempty = (new DijkstraAlgorithm(emptydata)).run();
|
||||||
//asinvalid = (new DijkstraAlgorithm(invalidata)).run();//et erreur là
|
asinvalid = (new DijkstraAlgorithm(invalidata)).run();
|
||||||
|
|
||||||
//initialisation des Bellman-Ford pour comparaison
|
//initialisation des Bellman-Ford pour comparaison
|
||||||
bfaal = (new BellmanFordAlgorithm(dataal)).run();
|
bfaal = (new BellmanFordAlgorithm(dataal)).run();
|
||||||
//bfacl = (new BellmanFordAlgorithm(datacl)).run();
|
bfacl = (new BellmanFordAlgorithm(datacl)).run();
|
||||||
/*bfaat = (new BellmanFordAlgorithm(dataat)).run();
|
bfaat = (new BellmanFordAlgorithm(dataat)).run();
|
||||||
bfact = (new BellmanFordAlgorithm(datact)).run();
|
bfact = (new BellmanFordAlgorithm(datact)).run();
|
||||||
bfapt = (new BellmanFordAlgorithm(datapt)).run();*/ //erreurs partout ici...
|
bfapt = (new BellmanFordAlgorithm(datapt)).run();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//créer plus et avec des maps différentes
|
|
||||||
//faire des test spécifiques pour longs trajets
|
|
||||||
|
|
||||||
|
/* ( Test faits directement via la console et DijkstraAlgorithm.java, actuellement commentés:
|
||||||
/*(Test faits directement via la console et DijkstraAlgorithm.java, actuellement commentés:
|
- coûts croissants
|
||||||
-coûts croissants
|
- nbr successeurs cohérents
|
||||||
-nbr successeurs cohérents
|
- tas valide. ) */
|
||||||
-tas valide.)*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void cheminValideD() {
|
public void cheminValideD() {
|
||||||
assertTrue(dijkal.getPath().isValid());
|
assertTrue(dijkal.getPath().isValid());
|
||||||
assertTrue(dijkcl.getPath().isValid());
|
assertTrue(dijkcl.getPath().isValid());
|
||||||
assertTrue(dijkat.getPath().isValid());
|
assertTrue(dijkat.getPath().isValid());
|
||||||
assertTrue(dijkct.getPath().isValid());
|
assertTrue(dijkct.getPath().isValid());
|
||||||
//assertTrue(dijkpt.getPath().isValid());//pas normal
|
assertTrue(dijkpt.getPath().isValid());
|
||||||
assertTrue(onenodijk.getPath().isValid());
|
assertTrue(onenodijk.getPath().isValid());
|
||||||
assertTrue(emptydijk.getPath().isValid());
|
assertTrue(emptydijk.getPath().isValid());
|
||||||
//assertFalse(invalidijk.getPath().isValid());
|
assertFalse(invalidijk.getPath().isValid());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -167,10 +174,10 @@ public class DijkstraAlgorithm_et_AStarTest{
|
||||||
assertTrue(ascl.getPath().isValid());
|
assertTrue(ascl.getPath().isValid());
|
||||||
assertTrue(asat.getPath().isValid());
|
assertTrue(asat.getPath().isValid());
|
||||||
assertTrue(asct.getPath().isValid());
|
assertTrue(asct.getPath().isValid());
|
||||||
//assertTrue(aspt.getPath().isValid());//pas normal
|
assertTrue(aspt.getPath().isValid());
|
||||||
assertTrue(asonenod.getPath().isValid());
|
assertTrue(asonenod.getPath().isValid());
|
||||||
assertTrue(asempty.getPath().isValid());
|
assertTrue(asempty.getPath().isValid());
|
||||||
//assertFalse(asinvalid.getPath().isValid());
|
assertFalse(asinvalid.getPath().isValid());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -179,10 +186,10 @@ public class DijkstraAlgorithm_et_AStarTest{
|
||||||
assertTrue(dijkcl.isFeasible());
|
assertTrue(dijkcl.isFeasible());
|
||||||
assertTrue(dijkat.isFeasible());
|
assertTrue(dijkat.isFeasible());
|
||||||
assertTrue(dijkct.isFeasible());
|
assertTrue(dijkct.isFeasible());
|
||||||
//assertTrue(dijkpt.isFeasible());
|
assertTrue(dijkpt.isFeasible());
|
||||||
assertTrue(onenodijk.isFeasible());
|
assertTrue(onenodijk.isFeasible());
|
||||||
assertFalse(emptydijk.isFeasible());
|
assertFalse(emptydijk.isFeasible());
|
||||||
//assertFalse(invalidijk.isFeasible());
|
assertFalse(invalidijk.isFeasible());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -191,29 +198,29 @@ public class DijkstraAlgorithm_et_AStarTest{
|
||||||
assertTrue(ascl.isFeasible());
|
assertTrue(ascl.isFeasible());
|
||||||
assertTrue(asat.isFeasible());
|
assertTrue(asat.isFeasible());
|
||||||
assertTrue(asct.isFeasible());
|
assertTrue(asct.isFeasible());
|
||||||
//assertTrue(aspt.isFeasible());
|
assertTrue(aspt.isFeasible());
|
||||||
assertTrue(asonenod.isFeasible());
|
assertTrue(asonenod.isFeasible());
|
||||||
assertFalse(asempty.isFeasible());
|
assertFalse(asempty.isFeasible());
|
||||||
//assertFalse(asinvalid.isFeasible());
|
assertFalse(asinvalid.isFeasible());
|
||||||
}
|
}
|
||||||
|
|
||||||
//résultat identique à Bellman-Ford (sur les petits scénarios)
|
//résultat identique à Bellman-Ford (sur les petits scénarios)
|
||||||
@Test
|
@Test
|
||||||
public void DsameasBF() {
|
public void DsameasBF() {
|
||||||
assertTrue(Float.compare(dijkal.getPath().getLength(),bfaal.getPath().getLength())==0);
|
assertTrue(Float.compare(dijkal.getPath().getLength(),bfaal.getPath().getLength())==0);
|
||||||
//assertTrue(Float.compare(dijkcl.getPath().getLength(),bfacl.getPath().getLength())==0);
|
assertTrue(Float.compare(dijkcl.getPath().getLength(),bfacl.getPath().getLength())==0);
|
||||||
//assertTrue(Double.compare(dijkat.getPath().getMinimumTravelTime(),bfaat.getPath().getMinimumTravelTime())==0);
|
assertTrue(Double.compare(dijkat.getPath().getMinimumTravelTime(),bfaat.getPath().getMinimumTravelTime())==0);
|
||||||
//assertTrue(Double.compare(dijkct.getPath().getMinimumTravelTime(),bfact.getPath().getMinimumTravelTime())==0);
|
assertTrue(Double.compare(dijkct.getPath().getMinimumTravelTime(),bfact.getPath().getMinimumTravelTime())==0);
|
||||||
//assertTrue(Double.compare(dijkpt.getPath().getMinimumTravelTime(),bfapt.getPath().getMinimumTravelTime())==0);
|
assertTrue(Double.compare(dijkpt.getPath().getMinimumTravelTime(),bfapt.getPath().getMinimumTravelTime())==0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void AsameasBF() {
|
public void AsameasBF() {
|
||||||
assertTrue(Float.compare(asal.getPath().getLength(),bfaal.getPath().getLength())==0);
|
assertTrue(Float.compare(asal.getPath().getLength(),bfaal.getPath().getLength())==0);
|
||||||
//assertTrue(Float.compare(ascl.getPath().getLength(),bfacl.getPath().getLength())==0);
|
assertTrue(Float.compare(ascl.getPath().getLength(),bfacl.getPath().getLength())==0);
|
||||||
//assertTrue(Double.compare(asat.getPath().getMinimumTravelTime(),bfaat.getPath().getMinimumTravelTime())==0);
|
assertTrue(Double.compare(asat.getPath().getMinimumTravelTime(),bfaat.getPath().getMinimumTravelTime())==0);
|
||||||
//assertTrue(Double.compare(asct.getPath().getMinimumTravelTime(),bfact.getPath().getMinimumTravelTime())==0);
|
assertTrue(Double.compare(asct.getPath().getMinimumTravelTime(),bfact.getPath().getMinimumTravelTime())==0);
|
||||||
//assertTrue(Double.compare(aspt.getPath().getMinimumTravelTime(),bfapt.getPath().getMinimumTravelTime())==0);
|
assertTrue(Double.compare(aspt.getPath().getMinimumTravelTime(),bfapt.getPath().getMinimumTravelTime())==0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//grand scénario avec oracle:
|
//grand scénario avec oracle:
|
||||||
|
@ -227,18 +234,33 @@ public class DijkstraAlgorithm_et_AStarTest{
|
||||||
PathReader pathread = new BinaryPathReader(new DataInputStream(new BufferedInputStream(new FileInputStream(pathaddr))));
|
PathReader pathread = new BinaryPathReader(new DataInputStream(new BufferedInputStream(new FileInputStream(pathaddr))));
|
||||||
|
|
||||||
Graph graphmap = graphread.read();
|
Graph graphmap = graphread.read();
|
||||||
Path pathmap = pathread.readPath(graphmap);//erreur ici mais pas mapmismatch, donc pourquoi? Path impossible? (hem) TODO: correct this
|
Path pathmap = pathread.readPath(graphmap);
|
||||||
//quel inspector prendre? Le path est en longueur mais voitures seulement ou tout autorisé?
|
|
||||||
|
|
||||||
DijkstraAlgorithm dijkmap = new DijkstraAlgorithm(new ShortestPathData(graphmap, pathmap.getOrigin(), pathmap.getDestination(), alllen));
|
|
||||||
AStarAlgorithm asmap = new AStarAlgorithm(new ShortestPathData(graphmap, pathmap.getOrigin(), pathmap.getDestination(), alllen));
|
|
||||||
|
|
||||||
|
//après test, il faut prendre carlen et non alllen en ArcInspector (sinon A* et Dijkstra sont plus courts)
|
||||||
|
DijkstraAlgorithm dijkmap = new DijkstraAlgorithm(new ShortestPathData(graphmap, pathmap.getOrigin(), pathmap.getDestination(), carlen));
|
||||||
|
AStarAlgorithm asmap = new AStarAlgorithm(new ShortestPathData(graphmap, pathmap.getOrigin(), pathmap.getDestination(), carlen));
|
||||||
assertTrue(dijkmap.run().getPath().getLength()==pathmap.getLength());
|
assertTrue(dijkmap.run().getPath().getLength()==pathmap.getLength());
|
||||||
assertTrue(asmap.run().getPath().getLength()==pathmap.getLength());
|
assertTrue(asmap.run().getPath().getLength()==pathmap.getLength());
|
||||||
//comparaison de la longueur
|
//comparaison de la longueur
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: sans oracle
|
//TODO: sans oracle
|
||||||
//idem mais au lieu du path trouver les ids de deux nodes valides?
|
@Test
|
||||||
|
public void testMapNoOracle() throws FileNotFoundException, IOException{//A FAIRE
|
||||||
|
|
||||||
|
/*String mapaddr = "/home/favary/Bureau/commetud/3eme Annee MIC/Graphes-et-Algorithmes/Maps/bretagne.mapgr";
|
||||||
|
|
||||||
|
GraphReader graphread = new BinaryGraphReader(new DataInputStream(new BufferedInputStream(new FileInputStream(mapaddr))));
|
||||||
|
|
||||||
|
Graph graphmap = graphread.read();
|
||||||
|
Node Origine = null;
|
||||||
|
Node Destination = null;//ces trois lignes à faire!
|
||||||
|
Path pathmap = Path.createShortestPathFromNodes(graphmap, null);
|
||||||
|
|
||||||
|
DijkstraAlgorithm dijkmap = new DijkstraAlgorithm(new ShortestPathData(graphmap, Origine, Destination, carlen));
|
||||||
|
AStarAlgorithm asmap = new AStarAlgorithm(new ShortestPathData(graphmap, Origine, Destination, carlen));
|
||||||
|
assertTrue(dijkmap.run().getPath().getLength()<=pathmap.getLength());
|
||||||
|
assertTrue(asmap.run().getPath().getLength()<=pathmap.getLength());
|
||||||
|
//comparaison de la longueur */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue