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%)
|
||||
|
|
@ -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
|
||||
|
||||
//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
|
||||
c'est donc l'option la plus rapide pour le temps
|
||||
=> va falloir prévilégier l'autoroute ? Ce sera fait implicitement :
|
||||
|
||||
.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 <'...
|
||||
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.Node;
|
||||
|
|
@ -9,7 +9,7 @@ public class LabelStar extends Label {
|
|||
private Node destination;
|
||||
public LabelStar(Node sommetCourant, Boolean marque, double coutRealise, Arc pere,Node destination) {
|
||||
super(sommetCourant, marque, coutRealise, pere);
|
||||
this.destination=destination;
|
||||
this.destination=destination; //ou alors on le met juste en paramètre
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -17,5 +17,5 @@ public class LabelStar extends Label {
|
|||
return (getCoutRealise()+distance(getSommetCourant().getPoint(),this.destination.getPoint()));
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
}*/
|
||||
|
||||
Loading…
Reference in a new issue