LBNL-UCB-STI / beam

The Framework for Modeling Behavior, Energy, Autonomy, and Mobility in Transportation Systems
https://transportation.lbl.gov/beam
Other
145 stars 57 forks source link

Are parking walk egress times not showing up in mode choice calculations? #2870

Closed zneedell closed 4 years ago

zneedell commented 4 years ago

General problem is that we're not seeing expected changes in mode choice when we limit parking capacity. My hypothesis is that the parking choice process is returning stalls that are cheap but have long walk access legs, and that the walk access leg is not being used in the mode choice process

Example is from here https://github.com/LBNL-UCB-STI/beam/blob/f7e48f22c796639dd886e345aa0c6f0056392ab4/src/main/scala/beam/agentsim/agents/modalbehaviors/ChoosesMode.scala#L917-L921 in mode choice process, where the parking search returned an emergency stall really far away, but the duration of the end walk leg in the car mode itinerary is still 0:

Screen Shot 2020-07-29 at 9 37 18 AM
zneedell commented 4 years ago

It does look like we are successfully generating updated routes to the parking stall (in the car) and from the parking stall to destination (as a walk trip): https://github.com/LBNL-UCB-STI/beam/blob/6e01d75b0655ead678f84a3527cc95f7c10aa117/src/main/scala/beam/agentsim/agents/parking/ChoosesParking.scala#L168-L183

So it seems like the problem is just in mode choice. Three ideas to fix it:

  1. In mode choice, just calculate euclidean distance between parking stall and destination location, multiply by some factor and use it to estimate duration of dummy walk trip (would this lead to any problems if we're not actually generating a walk route?)
  2. Once we get a parking inquiry response in ChoosesMode we send another walk routing request from parking stall to destination (or include this route in ParkingInquiryResponse??)
  3. Remove parking inquiries from ChoosesMode entirely and rely on skimmer instead. We could use TAZ Skimmer to record hourly price and walk egress duration for every time/location bin and look it up in the next iteration