Dustin Carlino
544dda9c5c
When looking for turn conflicts, treat reserved turns (created before
...
starting an uber-turn) the same as accepted turns, updating the
blocked-by graph and allowing a movement to start if a cycle is
detected.
No effect in montlake or lakeslice, and very slight progress at the
Krakow roundabout for #382 -- increasing a tiny 26 trips by 7:20 am.
2020-12-03 10:56:42 -08:00
Dustin Carlino
5dba8f5896
Make the blocked-by graph used for debugging and the API detect problems
...
from somebody about to start an uber-turn.
2020-12-03 10:21:43 -08:00
Dustin Carlino
69b14e444f
Simpler abstutil APIs: return string errors immediately, don't make callers transform. We don't need to distinguish different error types anywhere.
2020-12-02 08:44:07 -08:00
Michael Kirk
ddfaf73eae
Improve lane changing vis-a-vis uber turns.
...
1. Allow lane changing in an uber turn. Because of the way uber turns
work, we lock in and commit to all the lane changes just before
entering the uber turn.
2. Avoid overzealous lane changing by combining number-of-lanes-crossed
and numer-of-vehicles-in-lane into a single cost, rather than always
preferring the least number-of-vehicles-in-lane.
3. Don't lane-change unless the candidate lane's cost is strictly better
than the current lane cost.
2020-12-01 19:20:53 -08:00
Dustin Carlino
30ce82bd3c
Collapse get_pathfinding_request from TripSpec into start_trip. Avoids double-calculating paths (for driving trips, because of capping) and consolidates logic a bit more. #258
2020-12-01 16:42:36 -08:00
Dustin Carlino
14fd697282
Collapse/consolidate some logic involving DrivingGoal and TripEndpoint. #258
2020-12-01 16:04:48 -08:00
Dustin Carlino
d0b25d3530
Slightly refactor spawning cars during trip transitions #258
2020-12-01 15:30:17 -08:00
Dustin Carlino
4f764d6b87
Plumb options for delaying capped trips, instead of cancelling. Don't actually handle it yet. #325
2020-12-01 14:37:55 -08:00
Dustin Carlino
57963126fa
Fold number of housing units into Building; ditch the extra file approach.
2020-12-01 12:43:19 -08:00
Dustin Carlino
2ebaf99e0d
A fresh attempt at finding the root causes of gridlock map-wide
2020-12-01 10:50:05 -08:00
Dustin Carlino
b5ea263fc1
Expose the blocked-by graph through the API, and add root-cause analysis
...
to the UI debugger. #392
2020-11-30 17:01:15 -08:00
Dustin Carlino
8501ec70f9
Make the blocked-by graph more exploreable. Remove older debug code that
...
did something similar. #392
2020-11-30 15:15:13 -08:00
Dustin Carlino
6dd14c8bed
Don't crash when jumping to nonexistent trip or when clicking
...
follow/unfollow for a trip without an agent.
2020-11-30 14:20:37 -08:00
Dustin Carlino
3eda17627b
Handle binary or JSON scenarios
2020-11-30 14:00:19 -08:00
Dustin Carlino
72e54c68d8
Fix a bug with TripManager's spawn_ped -- it wasn't actually cancelling trips when pedestrians don't have a path for the second leg of their trip. #258
2020-11-25 10:34:53 -08:00
Dustin Carlino
903eab1bc4
Remove some old savestating optimizations from the simulation. The
...
optimizations avoided serializing Analytics and paths of to-be-created
agents, to reduce the file size. The logic to manage all of this isn't
worth the complexity anymore, because:
1) We don't queue up a bunch of spawn commands anymore; we defer
pathfinding until the last minute anyway.
2) We're not using savestates except for occasional manual debugging.
Previously, there was an idea to quickly preview prebaked traffic
mid-day. That idea was never fleshed out.
2020-11-24 15:38:20 -08:00
Dustin Carlino
ab88010ed0
Refactor PathRequest creators that go between two buildings. #176 ( #404 )
2020-11-24 13:21:44 -08:00
Dustin Carlino
0dd246c83f
Remove the old --num_agents flag, used for debugging spawning agents
2020-11-22 18:27:25 -08:00
Dustin Carlino
47d09d61f0
Plumb the intended TripMode for cancelled trips; instead make the trip duration optional. Breaking change for anyone using the API. Makes way more sense. [rebuild] [release]
2020-11-22 11:21:44 -08:00
Dustin Carlino
9b018e42a1
Make the blocked-by graph also understand target queue being full. Still
...
not handling all cases yet. #392
2020-11-20 14:48:56 -08:00
Dustin Carlino
e43f551af6
New query and debug viewer to get the full graph of agents waiting on others. #392
2020-11-20 14:19:19 -08:00
Dustin Carlino
4690ea36cd
Reduce visibility of some sim crate stuff. #258
2020-11-19 14:53:27 -08:00
Dustin Carlino
3905131fe4
Track and expose total trip distance in the API. #392
2020-11-19 10:40:00 -08:00
Dustin Carlino
cb4b84873b
Refactor code into person_finished_trip for all trip transitions. #258
2020-11-18 19:05:44 -08:00
Dustin Carlino
37ae02352e
Just reorganize TripManager code a bit. #258
2020-11-18 18:30:03 -08:00
Dustin Carlino
e6e7ec42ff
Collapse two methods in TripSpawner. While we validate a TripSpec, also produce the TripLegs. Also get rid of the stateful TripSpawner entirely. #258
2020-11-18 15:08:06 -08:00
Dustin Carlino
915e12ff7e
Remove PersonID from Scenario; the simulation will assign IDs sequentially. They're redundant. #258
...
Slightly reduces scenario file size, and simpler code to construct
scenarios.
2020-11-18 14:13:25 -08:00
Dustin Carlino
4ab98b1477
Compact the schedule in Scenario by just storing each TripEndpoint. #258
...
The schedule validation changes slightly. No-op trips between the same
origin/destination are now an error and get filtered out.
huge_seattle scenario goes from 129MB to 110MB with the redundant
endpoints removed.
2020-11-18 11:13:09 -08:00
Dustin Carlino
739e33ec3e
We do need to fill out trip legs for TripSpec::SpawningFailure; smoke tests in other maps hit it. #258
2020-11-17 18:02:48 -08:00
Dustin Carlino
82c7cd1e8f
At last, collapse the OD -> SpawnTrip -> TripSpec function into one thing. #258
2020-11-17 17:55:29 -08:00
Dustin Carlino
7741ea79b5
Refactor starting trips -- caller passes in TripInfo. Stop inferring
...
TripEndpoints from TripLegs. #258
NOW regenerate scenarios. I'm confident this sweeping refactor didn't
break behavior, because prebaked data didn't budge. huge_seattle
scenario went from 147MB to 129MB. Not bad!
2020-11-17 16:59:37 -08:00
Dustin Carlino
8d80668a56
The big cutover: a Scenario's trips are now just start/endpoints and mode, not the old SpawnTrip structure with a bunch of different cases and details picked out. #258
...
Not regenerating scenarios yet...
2020-11-17 16:28:52 -08:00
Dustin Carlino
8d28274736
Simplify the old ScenarioGenerator, mostly by removing OriginDestination
...
in favor of Option<TripEndpoint>. The bike/car contention tutorial stage
has to be tweaked manually, since there's no longer a nice way to spawn
vehicles at a non-border intersection and force them to use a certain
DirectedRoad. #258
2020-11-17 15:51:30 -08:00
Dustin Carlino
0599d4b47b
Whittle down places constructing SpawnTrip manually. #258
2020-11-17 14:10:47 -08:00
Dustin Carlino
7bb1d5b59c
Switch the UI's spawn_agents_around intersection to go through Scenarios instead of reaching into internal sim spawning gunk. Lock down visibility of some sim spawning things. #258
2020-11-17 11:13:42 -08:00
Dustin Carlino
2abeebc55e
Add a third TripEndpoint case to appear at an exact Position (lane + distance). This is a necessary step before simplifying Scenario's IndividTrip to use TripEndpoints and mode instead of SpawnTrip. #258
2020-11-17 10:50:42 -08:00
Dustin Carlino
5ea3c2ba6f
Remove support for remote trips, and stop plumbing off-map locations. A
...
remote trip goes between two locations off-map, specified just by a GPS
coordinate. The trips aren't simulated at all. They were originally
added to support Orestis's pandemic model, to handle transmission
off-map in shared buildings. This work has died off, there are no other
anticipated use cases for remote trips, and they complicate bigger
refactorings. #258
This also has the nice side effect of substantially reducing scenario
size -- huge_seattle from 177MB to 147MB. That unused metadata was
expensive!
2020-11-17 10:14:23 -08:00
Dustin Carlino
32dea68f5d
Measure how many simulation events actually result in something
...
changing. #368
2020-11-16 11:51:24 -08:00
Dustin Carlino
3433fd99e0
Smarter traffic recorder. Capture the exit point when the vehicle crosses the entry point. Otherwise, in the Krakow scenario of interest, the vehicles piling up and making poor LCing decisions actually get blocked by other gridlock and never make it to the exit. #382
2020-11-16 09:59:43 -08:00
Dustin Carlino
754749a578
Parallelize part of scenario spawning. One of the code paths calls
...
biking_connection, which does a slow graph floodfill.
Prolet robot in Krakow: from 22.6s to 10.1s
Because Krakow now uses separate sidewalks and they're not properly
connected to the road graph yet, biking_connection has to search very
far. The speedup isn't noticeable in other cases.
2020-11-16 09:36:48 -08:00
Dustin Carlino
b9ff94f275
Fix crash in krakow with a biking trip that should get converted to a walking trip, but isn't
2020-11-15 19:59:31 -08:00
Dustin Carlino
24e1a48d75
Generalize TripSpec::NoRoomToSpawn to handle trips that're impossible to instantiate. Hitting this with 'random traffic' in krakow. #258
2020-11-15 17:52:54 -08:00
Dustin Carlino
d3aa81d2d2
new tool to record a scenario consisting of all traffic around some intersections, to help with producing a better test case for #382
2020-11-15 16:57:33 -08:00
Dustin Carlino
22cef74aec
Always allow blocking a degenerate intersection. Visually inspected on
...
the lane-changing test map. #382
Also abandon sim.run_until_done; the only caller was the LC test, and it
uses 30s steps inappropriately anyway.
2020-11-12 11:34:17 -08:00
Dustin Carlino
62135ffc26
Allow blocking the intersection at another Green lake case, and trigger a [rebuild]
2020-11-12 10:37:21 -08:00
Dustin Carlino
3583d068a6
Fix a bug introduced in e3b9c42506
on the proposal saver, and allow blocking-the-box on another Ballard intersection
2020-11-11 13:20:56 -08:00
Dustin Carlino
e5ff76e00c
Working on gridlock in the Ballard map. Allow blocking-the-box near the
...
famous Green Lake intersection, and add a little debug tool to see
current queue reservation length.
2020-11-11 12:43:28 -08:00
Dustin Carlino
07ac288e72
Refactor: rename Pt2D::from_gps to just gps.to_pt(bounds)
2020-11-10 12:00:43 -08:00
Dustin Carlino
e15efa9002
Organize raw maps by city. With this, data/input/ is totally namespaced by city! Nothing prevents us from having a map named "downtown" in multiple cities now. #326
2020-11-05 14:58:28 -08:00
Dustin Carlino
cda586dfc9
Cleanup by moving some methods to belong to MapName. #326
2020-11-05 14:18:13 -08:00