Merge branch 'main' of https://git.etud.insa-toulouse.fr/bezza/BE-Graphe
fusion entre tests dijkstra et version a star
This commit is contained in:
commit
d59974e56c
3 changed files with 57 additions and 8 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
// ce fichier n'est qu'en pseudo code
|
|
||||||
|
|
||||||
|
|
||||||
/* je considère que les 200km d'autonomie atteint (200km avec le 22 kWh - Q90 Renault ZOE chargé à 90%)
|
/* je considère que les 200km d'autonomie atteint (200km avec le 22 kWh - Q90 Renault ZOE chargé à 90%)
|
||||||
|
|
@ -64,12 +64,45 @@ Autres types de voies
|
||||||
et nous n'avons pas besoin d'associer une vitesse à chaque roadtype, juste une perte d'autonomie
|
et nous n'avons pas besoin d'associer une vitesse à chaque roadtype, juste une perte d'autonomie
|
||||||
|
|
||||||
//Rappel les bornes de recharges ne sont que sur les autoroutes !
|
//Rappel les bornes de recharges ne sont que sur les autoroutes !
|
||||||
=> va falloir prévilégier l'autoroute ? on va plus vite et on recharge seulement en 2mn
|
=> va falloir prévilégier l'autoroute ? Ce sera fait implicitement :
|
||||||
c'est donc l'option la plus rapide pour le temps
|
|
||||||
|
.Pour le temps : Comme on suppose rouler à la vitesse maximale autorisée, et que les autoroutes ont les vitesses les plus élevées, getMinimumTravelTime()
|
||||||
|
sera naturellement plus bas pour les arcs d'autoroute, les favorisant si l'objectif est le temps.
|
||||||
|
|
||||||
|
.Pour la recharge : Le fait que les recharges ne soient possibles que sur les autoroutes rendra leur utilisation nécessaire pour les longs trajets.
|
||||||
|
L'algorithme, en explorant les états (y compris ceux après recharge), déterminera si un détour par une autoroute pour recharger et ensuite continuer
|
||||||
|
(potentiellement plus vite) est la meilleure solution globale.
|
||||||
|
|
||||||
|
|
||||||
concrètement dans le Dijkstra il va falloir rajouter une composante. Après le if 'newCost <'...
|
concrètement dans le Dijkstra il va falloir rajouter une composante. Après le if 'newCost <'...
|
||||||
il faut vérifier que l'autonomie est correcte
|
il faut vérifier que l'autonomie est correcte
|
||||||
|
La condition de mise à jour d'un label prend en compte le coût ET l'autonomie restante (à coût égal, plus d'autonomie c'est mieux)
|
||||||
|
|
||||||
|
Aux nœuds d'autoroute, on offre la possibilité de "recharger", ce qui crée une nouvelle option (un nouveau label avec batterie pleine et coût de recharge
|
||||||
|
ajouté) pour ce même nœud, à insérer dans le tas.
|
||||||
|
|
||||||
|
labels[data.getOrigin().getId()] = new LabelBattery(data.getOrigin(), false, 0, null, MAX_AUTONOMY); pour l'initialisation
|
||||||
|
|
||||||
|
|
||||||
|
//permet de savoir si un node est un noeud d'autoroute
|
||||||
|
private boolean isHighwayNode(Node node) {
|
||||||
|
// Un nœud est sur une autoroute si au moins un de ses arcs entrants ou sortants est une autoroute.
|
||||||
|
// RoadType est accessible via arc.getRoadInfo().getType()
|
||||||
|
for (Arc arc : node.getSuccessors()) {
|
||||||
|
if (arc.getRoadInfo().getType().equals(RoadType.MOTORWAY)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
normalement juste faut faire le verif de newcost avec l'autonomie
|
||||||
|
|
||||||
|
avoir une option chemin impossible (trop éloigné des stations de recharges)
|
||||||
|
|
||||||
|
|
||||||
*/
|
gérer le problème de la recharge, quand la faire ?
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*public class LabelProblemeOuvert extends Label {
|
||||||
|
private double autonomieRestante;
|
||||||
|
|
||||||
|
public LabelProblemeOuvert(Node sommet, boolean marque, double cout, Arc pere, double autonomieRestante) {
|
||||||
|
super(sommet, marque, cout, pere);
|
||||||
|
this.autonomieRestante = autonomieRestante;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getAutonomieRestante() {
|
||||||
|
return autonomieRestante;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutonomieRestante(double autonomieRestante) {
|
||||||
|
this.autonomieRestante = autonomieRestante;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* package org.insa.graphs.algorithm.shortestpath;
|
/*package org.insa.graphs.algorithm.shortestpath;
|
||||||
|
|
||||||
import org.insa.graphs.model.Arc;
|
import org.insa.graphs.model.Arc;
|
||||||
import org.insa.graphs.model.Node;
|
import org.insa.graphs.model.Node;
|
||||||
|
|
@ -9,7 +9,7 @@ public class LabelStar extends Label {
|
||||||
private Node destination;
|
private Node destination;
|
||||||
public LabelStar(Node sommetCourant, Boolean marque, double coutRealise, Arc pere,Node destination) {
|
public LabelStar(Node sommetCourant, Boolean marque, double coutRealise, Arc pere,Node destination) {
|
||||||
super(sommetCourant, marque, coutRealise, pere);
|
super(sommetCourant, marque, coutRealise, pere);
|
||||||
this.destination=destination;
|
this.destination=destination; //ou alors on le met juste en paramètre
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -17,5 +17,5 @@ public class LabelStar extends Label {
|
||||||
return (getCoutRealise()+distance(getSommetCourant().getPoint(),this.destination.getPoint()));
|
return (getCoutRealise()+distance(getSommetCourant().getPoint(),this.destination.getPoint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}*/
|
||||||
*/
|
|
||||||
Loading…
Reference in a new issue