BayAreaMetro / tm2py

Travel Model Two - python edition
https://bayareametro.github.io/tm2py/
Apache License 2.0
2 stars 8 forks source link

🚀 Feature: Simplify Roadway Network and Remove very Short Links #139

Open DavidOry opened 7 months ago

DavidOry commented 7 months ago

User Story

The existing TM2 roadway network is highly detailed, including every street, bicycle path, and sidewalk. When the roadway network is extracted from this network, it contains numerous nodes that are unnecessary for roadway assignment. Ideally, the Emme software would suppress these nodes, conducted the assignment, and then return the loaded, full network. But Emme does not yet have this feature. Emme does have a feature to remove the excess nodes, but not in a way that is reversible (i.e., it does not record which links have been simplified). Because it's not reversible, this breaks the connection between the roadway network and the other networks (non-motorized and transit).

These excess nodes in the roadway network have two negative outcomes. First, the runtime of the assignment is increased. Second, the Akcelik volume delay functions are sensitive to link distance and for very short links, the estimated congested travel time becomes unreasonably long. See the this spreadsheet as an illustration of this effect. akcelik example.xlsx

Progress:

Priority

Medium

Level of Effort

Medium

Resolution Ideas

Create two methods in either tm2py or Lasso to first simplify and then expand the roadway network. The simplification would remove the excess nodes and create a dictionary tracking which links have been removed (and log their shapes). The expansion step would then recreate the complete network, placing the assignment outcomes on links that are added back in during the expansion.

Project

Task Order 5

Who should be involved?

Users: @gregerhardt, @FlaviaTsang, @lmz Reviewers: @i-am-sijia, @DavidOry

Risk

We need to test that the simplified network is completely connected and routable. We need to make sure the expansion results in the same network as the starting network and the volumes are recorded directly.

Tests

i-am-sijia commented 4 months ago

RE: remove the excessive nodes. Would it make sense to do so for transit network as well? So that the model networks in EMME for roadway and transit are consistent and do not have excessive nodes. I'm guessing it would also help transit assignment run time? @DavidOry

Update: One challenge to do so for transit is that there are probably transit stops at those "excessive" nodes.

i-am-sijia commented 4 months ago

More on removing the excessive nodes. Are we imaging users to perform network coding in EMME with the simplified network? I think we shall still create and apply project cards based on the complete network. That means when we create project cards, we need to translate the edits on simplified network to complete network, i.e., in EMME .ems user edit: link A-C, project card should be created for link A-B and link B-C.

i-am-sijia commented 4 months ago

I think the approaches differ in when we create and how long we keep the simplified network.

Option Pros Cons
Option 1: Temporarily created and exist in roadway assignment Changes tm2py roadway modules, no need to change Lasso or the EMME network generation part. The EMME network is consistent with the standard network. The EMME networks still have excessive nodes. Bi-County (Cube) cannot benefit from this work.
Option 2: Model (EMME) networks are created in simplified version Changes in Lasso. No need to change tm2py assignment modules. The EMME networks do not have excessive nodes. Bi-County can benefit from this work (because they use Lasso). More overhead to maintain the consistency between EMME network and standard network. More overhead to generate project cards. (see my previous two comments ⬆️ )
DavidOry commented 4 months ago

My mistake on the previous comment. I thought you were commenting on the other issue. We are going to hold off on this until we get the new version of EMME to see if this is necessary with the improved assignment algorithms.

I think for the points you mention, it would be good to do this in a way that the user doesn't notice, so Option 1. I think we could write the code such that:

  1. One method converts an EMME network to the Network Wrangler Standard.
  2. One method does the simplification.

This way, for bi-county and other Cube networks, we would just need to add Method 1. to cube_wrangler and we could then use the same Method 2.