From d6bd57d709b8dbbd2117e7da2ab0cdbb4bbab6b0 Mon Sep 17 00:00:00 2001 From: Matteo Date: Wed, 28 May 2025 13:42:17 +0200 Subject: [PATCH] =?UTF-8?q?impl=C3=A9mentation=20correcte=20de=20la=20solu?= =?UTF-8?q?tion=20na=C3=AFve=20(mis=20en=20commentaire=20de=20la=20solutio?= =?UTF-8?q?n=20pr=C3=A9c=C3=A9dente=20qui=20ne=20marchait=20pas)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shortestpath/ProblemeOuvert.java | 45 +++++++++++++++++-- .../src/test/java/TestDijkstra.java | 4 +- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/ProblemeOuvert.java b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/ProblemeOuvert.java index 71d0851..d074d5a 100644 --- a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/ProblemeOuvert.java +++ b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/shortestpath/ProblemeOuvert.java @@ -105,12 +105,51 @@ public class ProblemeOuvert extends DijkstraAlgorithm { double batteryLeft = ((LabelProblemeOuvert) LabelActuel).getAutonomieRestante(); double newCost = LabelActuel.getCoutRealise() + arcCost; + + if (newCost < succLabel.getCoutRealise()) { + if (succLabel.getCoutRealise() != Double.POSITIVE_INFINITY) { + heap.remove(succLabel); + //System.out.println(succLabel.getTotalCost());// print de confirmation , pour verif si tous les couts qui sortent du tas sont croissant. getTotalcost pas croissant!! + } + succLabel.setCoutRealise(newCost); + succLabel.setPere(arc); + succLabel.setAutonomieRestante(batteryLeft); + predecessorArcs[succ.getId()] = arc; + // Insertion dans le tas car on est sûr qu'il n'est pas + + heap.insert(succLabel); + + notifyNodeReached(succ); + } + + // 2. On fait aussi le test avec une autonmie pleine pour voir si la solution est meilleure (il faudra rajouter 2mn au temps de trajet) + //si on recharge effectivement et détecter cette recharge + if (arc.getRoadInformation().getType() == RoadType.MOTORWAY) { + //if (newCost+120 < succLabel.getCoutRealise()) { + if (succLabel.getCoutRealise() != Double.POSITIVE_INFINITY) { + heap.remove(succLabel); + + } + succLabel.setCoutRealise(newCost+120); + succLabel.setPere(arc); + succLabel.setAutonomieRestante(MAX_BATTERY); + predecessorArcs[succ.getId()] = arc; + + // Insertion dans le tas car on est sûr qu'il n'est pas + + heap.insert(succLabel); + + notifyNodeReached(succ); + //} + } + + /* if (batteryLeft < arcCost) { //si nous n'avons pas assez de batterie pour l'arc // Recharge possible uniquement sur autoroute if (arc.getRoadInformation().getType() == RoadType.MOTORWAY) { double rechargeCost = newCost + 120; // 2 minutes de recharge - if (rechargeCost < succLabel.getCoutRealise()) { + //if (rechargeCost < succLabel.getCoutRealise()) { if (succLabel.getCoutRealise() != Double.POSITIVE_INFINITY) { heap.remove(succLabel); } @@ -120,7 +159,7 @@ public class ProblemeOuvert extends DijkstraAlgorithm { predecessorArcs[succ.getId()] = arc; heap.insert(succLabel); notifyNodeReached(succ); - } + //} } } else { // Assez de batterie @@ -136,7 +175,7 @@ public class ProblemeOuvert extends DijkstraAlgorithm { heap.insert(succLabel); notifyNodeReached(succ); } - } + }*/ diff --git a/be-graphes-gui/src/test/java/TestDijkstra.java b/be-graphes-gui/src/test/java/TestDijkstra.java index 99d3938..086ff40 100644 --- a/be-graphes-gui/src/test/java/TestDijkstra.java +++ b/be-graphes-gui/src/test/java/TestDijkstra.java @@ -201,7 +201,7 @@ public class TestDijkstra { System.out.println("== Test Probleme Ouvert =="); testScenario("bretagne.mapgr",165317,74644 , Mode.TIME, false,2,false); - System.out.println("== Test Probleme Ouvert =="); - testScenario("bretagne.mapgr",165317,74644 , Mode.TIME, false,2,false); + //System.out.println("== Test Probleme Ouvert =="); + //testScenario("bretagne.mapgr",165317,74644 , Mode.TIME, false,2,false); } }