fusion entre tests dijkstra et version  a star
This commit is contained in:
bezza 2025-05-19 17:28:14 +02:00
commit d59974e56c
3 changed files with 57 additions and 8 deletions

View file

@ -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 ?
*/

View file

@ -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;
}
}*/

View file

@ -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()));
}
}
*/
}*/