Comments (3)
Agh this gets really messy. Consider these two examples, both of which suggest a solution that won't work with the other.
- You can ride to stop B now or wait five minutes and ride to stop B. If you wait, you miss your transfer to destination 1 but not destination 2. Thus if you're going to destination 2 you should wait, if you're going to destination 1 you shouldn't. The obvious solution is to just keep moving forward in time, using the RaptorState from the next minute, until you find one that doesn't arrive at the same time.
- However, that breaks when you have frequency-based routes, which will have different random offsets in each iteration.
from r5.
I'd rather avoid any hacks even remotely resembling "reverse optimization". I think the only really defensible thing to do is to reverse all the paths found one by one, by actually doing a backward search. Considering how tight the constraints are (derived from the forward results), it might be acceptably fast. We'll need this capability for point to point trip planning searches anyway, and I'm wary of the code complexity that comes from trying to optimize this procedure before we've even implemented it in the obvious, simple way. Our calculations are already quite rapid, and this whole system is made to scale with workers added to the cluster.
We'd get all the minimum travel time bounds from the basic range-raptor search, then kick off a highly constrained range-raptor search backward from each reached stop. This makes for a lot of extra work, but would only be done on big batch jobs or if someone requested/needed route names for each path. Whatever implementation we use, I think this should be pulled out into a separate step that follows completion of the main forward search. I say this mainly for reasons of process clarity and structure, and maintainability: it's going to get very ugly if we factor increasing amounts of functionality directly into the RAPTOR search procedure. If we can express the process as many calls to the same method in opposing directions it will be clearer.
We will at some point need to consider/include suboptimal options for Modeify too.
from r5.
We also don't need this for schedule-based networks, see #42.
from r5.
Related Issues (20)
- r5 analysis problem HOT 1
- Make TransferAllowance an interface
- Readme in docs/README.r5.md still relevant?
- Send IDs for origin and destination pointsets in HTTP API
- Improve error messages on small/large GIS features
- Support uploading Shapefiles as a single .zip HOT 1
- Extra minute of wait time?
- Unsupported Operation on single point with decay function HOT 2
- Routes added by modifications are not recognizable in paths output HOT 1
- Return warning when decay function is above 0 at maximum cutoff
- Selected-link analysis for assignment HOT 1
- Incorrect display of regional results referencing deleted destination grids
- Some fields of CSV writers are not initialized while headers are written
- User chooses to take a long boomerang transfer at a far away station rather than walk across the street
- Reduce errors sent to broker HOT 2
- A feed_id for regional analysis path results HOT 6
- Check number of opportunities in destination layers used for regional analysis
- Human-readable names for destination layers in CSV output HOT 1
- Transit layer loaded but numerous "ERROR c.c.r.s.StreetLayer" errors (r5r)
- Snapped distance not being calculated as crow flies "walking" distance (r5r) HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from r5.