Hello,
I am new to OTP and I have several questions on how it works at many levels.
My current knowledge is based on the wiki (which I know is outdated) and the fairly recent posts on this group (since 2017). It is highly possible that some of my assumptions are wrong, or no more correct for the current version of OTP, please let me know if that’s the case.
I have quite a few questions so I will try to structure them clearly.
1) Graph building
1.1 Is this page (https://github.com/opentripplanner/OpenTripPlanner/wiki/GraphStructure) still up to date? (If not the following question may not be relevant.)
1.2 From the above page, “the weight of TransitBoardAlight, PatternDwell, and PatternHop edges depends on the time at which they are traversed”. I understand how it is true for the board edges, but I fail to see how it is true for the others.
1.3 I have a hard time figuring out how the time dependance of the graph is actually represented. At first I thought that all the departure times for a given trip where linked to the corresponding board edge for that trip (resulting in a static time-dependant graph). From (https://groups.google.com/forum/#!topic/opentripplanner-users/OFhov2RQKao) I understood that only departure times in a given time window are considered when running a search. So this would aim towards a "dynamic" time-dependant graph. Is that correct?
1.4 How is bike sharing implemented ? My intuitive solution would have been to preprocess the N*(N-1) shortest path between all bike stations pairs, and add these new edges to the graph. However, it wouldn’t support user preferences considered in the “Bike triangle”. So without creating new edges departing from and arriving at bike stations, how does OTP routing ensure that a shared bike is left at a stop before arriving at destination ?
1.5 When connecting the transit graph with the OSM graph, does the linker consider the whole OSM graph or only the edges where walking is authorised ?
2) Routing
2.1 I’ve seen here (https://groups.google.com/forum/#!topic/opentripplanner-users/L8XnN6iyZBE ) and here (https://groups.google.com/forum/#!topic/opentripplanner-users/FK3MKI0PU9Y) that OTP routing doesn’t support hard limits on variables (such as max transits) because it’s based solely on the optimisation of the “generalised cost” variable. Yet I see that it is possible to choose a max walk distance in the trip options. How can this be performed ?
2.2 From (https://opentripplanner.readthedocs.io/en/latest/Bibliography/), I see that routing (for mode combinations using transit) uses the Tung-Chew heuristic. I have two questions about this. First, this is referenced in the bibliography as a technique for multi-objective Pareto optimality. Does it still bring benefit in the current one-variable optimisation ? Second, I’m not sure to understand the part “(i.e. a graph grown backward from the destination providing a lower bound on aggregate weight) for queue ordering”. If the graph is grown from the destination, how can we calculate dynamically the weight of the PatternBoard edges, which to my understanding were calculated from knowing the time at which they are traversed and finding the next departure time.
2.3 Is that correct that contraction hierarchies is no longer used?
2.4 From (https://groups.google.com/forum/#!topic/opentripplanner-users/anzHLDnlJx4), there was 2 strategies to compute multiple itineraries, and “trip banning” was the one used at this time. Is it still the case ?
2.5 Some modes of transport brings constraints : e.g. using a bike can only be allowed at the beginning of the trip, be as soon as there is a switch to another mean of transport, you can’t go back to the bike. The same goes for the car. How is the routing performed in order to respect these constraints ?
3) Miscellaneous
3.1 I didn’t come across information about support for car sharing. Are there plans to support it ?
3.2 What does the “Weight” cursor represent in the web client (between “preferred routes” and “banned routes”) ?
3.3 What is the difference between “bicycle and transit” and “bike and ride” options ?
Thank you in advance for any response,
Kind regards,
Victor G
I have come up with hypothesis for some of my questions, but I would like to know if they are correct.
1.4 How is bike sharing implemented ? My intuitive solution would have been to preprocess the N*(N-1) shortest path between all bike stations pairs, and add these new edges to the graph. However, it wouldn’t support user preferences considered in the “Bike triangle”. So without creating new edges departing from and arriving at bike stations, how does OTP routing ensure that a shared bike is left at a stop before arriving at destination ?
The layer representing the bike network would only be connected to the walk network at the bike stations, this would allow to run a classical Dijkstra/A* to find the best path.
2.1 I’ve seen here (https://groups.google.com/forum/#!topic/opentripplanner-users/L8XnN6iyZBE ) and here (https://groups.google.com/forum/#!topic/opentripplanner-users/FK3MKI0PU9Y) that OTP routing doesn’t support hard limits on variables (such as max transits) because it’s based solely on the optimisation of the “generalised cost” variable. Yet I see that it is possible to choose a max walk distance in the trip options. How can this be performed ?
Maybe it is not taken into account during the search, but it is only applied as a filter on the results.
2.5 Some modes of transport brings constraints : e.g. using a bike can only be allowed at the beginning of the trip, be as soon as there is a switch to another mean of transport, you can’t go back to the bike. The same goes for the car. How is the routing performed in order to respect these constraints ?
The bike network and car network would only be connected to the walk network with unidirectional "alight edges" :
- for BikeAndRide/ParkAndRide : alight edges only at bike/car parkings
- for KissAndRide : alight edges everywhere
On 26 Nov 2018, at 1:09 PM, Victor G <victor1...@gmail.com> wrote:1) Graph building1.1 Is this page (https://github.com/opentripplanner/OpenTripPlanner/wiki/GraphStructure) still up to date? (If not the following question may not be relevant.)
1.2 From the above page, “the weight of TransitBoardAlight, PatternDwell, and PatternHop edges depends on the time at which they are traversed”. I understand how it is true for the board edges, but I fail to see how it is true for the others.
1.3 I have a hard time figuring out how the time dependance of the graph is actually represented. At first I thought that all the departure times for a given trip where linked to the corresponding board edge for that trip (resulting in a static time-dependant graph).
From (https://groups.google.com/forum/#!topic/opentripplanner-users/OFhov2RQKao) I understood that only departure times in a given time window are considered when running a search. So this would aim towards a "dynamic" time-dependant graph. Is that correct?
1.4 How is bike sharing implemented ? My intuitive solution would have been to preprocess the N*(N-1) shortest path between all bike stations pairs, and add these new edges to the graph. However, it wouldn’t support user preferences considered in the “Bike triangle”. So without creating new edges departing from and arriving at bike stations, how does OTP routing ensure that a shared bike is left at a stop before arriving at destination ?
1.5 When connecting the transit graph with the OSM graph, does the linker consider the whole OSM graph or only the edges where walking is authorised ?
2) Routing2.1 I’ve seen here (https://groups.google.com/forum/#!topic/opentripplanner-users/L8XnN6iyZBE ) and here (https://groups.google.com/forum/#!topic/opentripplanner-users/FK3MKI0PU9Y) that OTP routing doesn’t support hard limits on variables (such as max transits) because it’s based solely on the optimisation of the “generalised cost” variable. Yet I see that it is possible to choose a max walk distance in the trip options. How can this be performed ?
2.2 From (https://opentripplanner.readthedocs.io/en/latest/Bibliography/), I see that routing (for mode combinations using transit) uses the Tung-Chew heuristic.
I have two questions about this. First, this is referenced in the bibliography as a technique for multi-objective Pareto optimality. Does it still bring benefit in the current one-variable optimisation ?
Second, I’m not sure to understand the part “(i.e. a graph grown backward from the destination providing a lower bound on aggregate weight) for queue ordering”. If the graph is grown from the destination, how can we calculate dynamically the weight of the PatternBoard edges, which to my understanding were calculated from knowing the time at which they are traversed and finding the next departure time.
2.3 Is that correct that contraction hierarchies is no longer used?
2.4 From (https://groups.google.com/forum/#!topic/opentripplanner-users/anzHLDnlJx4), there was 2 strategies to compute multiple itineraries, and “trip banning” was the one used at this time. Is it still the case ?
2.5 Some modes of transport brings constraints : e.g. using a bike can only be allowed at the beginning of the trip, be as soon as there is a switch to another mean of transport, you can’t go back to the bike. The same goes for the car. How is the routing performed in order to respect these constraints ?
3) Miscellaneous3.1 I didn’t come across information about support for car sharing. Are there plans to support it ?
3.2 What does the “Weight” cursor represent in the web client (between “preferred routes” and “banned routes”) ?
3.3 What is the difference between “bicycle and transit” and “bike and ride” options ?
On 6 Dec 2018, at 8:40 PM, Victor G <victor1...@gmail.com> wrote:The layer representing the bike network would only be connected to the walk network at the bike stations, this would allow to run a classical Dijkstra/A* to find the best path.
The bike network and car network would only be connected to the walk network with unidirectional "alight edges" :
- for BikeAndRide/ParkAndRide : alight edges only at bike/car parkings