From ae98a28e4632c19bfa58ee94306c25a4a9cc9460 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 1 Nov 2023 15:03:38 +0100 Subject: [PATCH] Subtract generalized cost that was previously added --- .../org/opentripplanner/model/plan/Itinerary.java | 14 +++++++++++++- ...onTransitItinerariesBasedOnGeneralizedCost.java | 4 ++-- .../transit/RemoveTransitIfStreetOnlyIsBetter.java | 4 ++-- .../transit/RemoveTransitIfWalkingIsBetter.java | 2 +- .../mapping/RaptorPathToItineraryMapper.java | 2 +- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/plan/Itinerary.java b/src/main/java/org/opentripplanner/model/plan/Itinerary.java index 903e04c8b0c..8c8981b833d 100644 --- a/src/main/java/org/opentripplanner/model/plan/Itinerary.java +++ b/src/main/java/org/opentripplanner/model/plan/Itinerary.java @@ -489,7 +489,7 @@ public void setElevationGained(Double elevationGained) { /** * If a generalized cost is used in the routing algorithm, this should be the total cost computed - * by the algorithm. This is relevant for anyone who want to debug an search and tuning the + * by the algorithm. This is relevant for anyone who want to debug a search and tuning the * system. The unit should be equivalent to the cost of "one second of transit". *

* -1 indicate that the cost is not set/computed. @@ -498,6 +498,10 @@ public int getGeneralizedCost() { return generalizedCost; } + public int getGeneralizedCostIncludingPenalty() { + return generalizedCost - penaltyCost(accessPenalty) - penaltyCost(egressPenalty); + } + public void setGeneralizedCost(int generalizedCost) { this.generalizedCost = generalizedCost; } @@ -663,4 +667,12 @@ public void setEmissionsPerPerson(Emissions emissionsPerPerson) { public Emissions getEmissionsPerPerson() { return this.emissionsPerPerson; } + + private static int penaltyCost(TimeAndCost penalty) { + if (penalty == null) { + return 0; + } else { + return penalty.cost().toSeconds(); + } + } } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java index 427084a55f6..1980838bec0 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java @@ -43,7 +43,7 @@ public List flagForRemoval(List itineraries) { // ALL itineraries are considered here. Both transit and non-transit OptionalInt minGeneralizedCost = itineraries .stream() - .mapToInt(Itinerary::getGeneralizedCost) + .mapToInt(Itinerary::getGeneralizedCostIncludingPenalty) .min(); if (minGeneralizedCost.isEmpty()) { @@ -58,7 +58,7 @@ public List flagForRemoval(List itineraries) { return itineraries .stream() - .filter(it -> !it.hasTransit() && it.getGeneralizedCost() > maxLimit) + .filter(it -> !it.hasTransit() && it.getGeneralizedCostIncludingPenalty() > maxLimit) .collect(Collectors.toList()); } } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfStreetOnlyIsBetter.java b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfStreetOnlyIsBetter.java index bddf5238f23..0e60836ae1c 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfStreetOnlyIsBetter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfStreetOnlyIsBetter.java @@ -38,7 +38,7 @@ public List flagForRemoval(List itineraries) { OptionalInt minStreetCost = itineraries .stream() .filter(Itinerary::isOnStreetAllTheWay) - .mapToInt(Itinerary::getGeneralizedCost) + .mapToInt(Itinerary::getGeneralizedCostIncludingPenalty) .min(); if (minStreetCost.isEmpty()) { @@ -52,7 +52,7 @@ public List flagForRemoval(List itineraries) { // Filter away itineraries that have higher cost than limit cost computed above return itineraries .stream() - .filter(it -> !it.isOnStreetAllTheWay() && it.getGeneralizedCost() >= limit) + .filter(it -> !it.isOnStreetAllTheWay() && it.getGeneralizedCostIncludingPenalty() >= limit) .collect(Collectors.toList()); } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfWalkingIsBetter.java b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfWalkingIsBetter.java index cf4d102c11a..f37743af0eb 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfWalkingIsBetter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/RemoveTransitIfWalkingIsBetter.java @@ -38,7 +38,7 @@ public List flagForRemoval(List itineraries) { return itineraries .stream() - .filter(it -> !it.isOnStreetAllTheWay() && it.getGeneralizedCost() >= limit) + .filter(it -> !it.isOnStreetAllTheWay() && it.getGeneralizedCostIncludingPenalty() >= limit) .collect(Collectors.toList()); } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java index fe20592576e..a399047271c 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java @@ -151,7 +151,7 @@ else if (pathLeg.isTransferLeg()) { } if (egressPathLeg.egress() instanceof DefaultAccessEgress ae) { - itinerary.setAccessPenalty(ae.penalty()); + itinerary.setEgressPenalty(ae.penalty()); } if (path.isC2Set()) { itinerary.setGeneralizedCost2(path.c2());