somewhat related to #21 and #22. Currently once a block is completed, that bus is no longer considered for use. Currently we assume a block should occupy a bus for an entire day. However, in my cursory analysis of Minneapolis blocks, some of these appear to be rather short, and these buses would be idle.
Furthermore, in my analysis of both the processed GTFS feed dataframes fed into the sim, and the results, it appears that, according to our current calculations, Minneapolis should require ~1554 buses to simply meet all the blocks. But according to Metro Transit they only have 909 buses in their fleet. This further suggests that blocks do not cover a full day. I'll do further analysis of this later.
My initial impressions on how to deal with this would be to be to add some logic in Model.run() of sim and run_block() to release a bus to a queue that can be used by later call of run_block(), otherwise create a new bus.
I think the parallelism could in Model.run() could cause some extraneous bus creation. We may sort the blocks by total block duration, instead of earliest start time, but I don't think this covers it entirely still. This parallelism edge case may not be worth considering, given our rough overall accuracy anyhow.
somewhat related to #21 and #22. Currently once a block is completed, that bus is no longer considered for use. Currently we assume a block should occupy a bus for an entire day. However, in my cursory analysis of Minneapolis blocks, some of these appear to be rather short, and these buses would be idle.
Furthermore, in my analysis of both the processed GTFS feed dataframes fed into the sim, and the results, it appears that, according to our current calculations, Minneapolis should require ~1554 buses to simply meet all the blocks. But according to Metro Transit they only have 909 buses in their fleet. This further suggests that blocks do not cover a full day. I'll do further analysis of this later.
My initial impressions on how to deal with this would be to be to add some logic in
Model.run()
ofsim
andrun_block()
to release a bus to a queue that can be used by later call ofrun_block()
, otherwise create a new bus.I think the parallelism could in
Model.run()
could cause some extraneous bus creation. We may sort the blocks by total block duration, instead of earliest start time, but I don't think this covers it entirely still. This parallelism edge case may not be worth considering, given our rough overall accuracy anyhow.