Releases: jdlph/Path4GMNS
v0.8.3
v0.8.3 adds transportation equity evaluation besides enhancement in evaluating accessibility.
- evaluate equity given a time budget and a segmentation of zones.
- add use_link_ffs for each agent in settings.yml, which enables the following choice in computing accessibility.
- choose either the free speed of an agent specified in settings.yml or the link free flow speed defined in link.csv in accessibility evaluation (and equity evaluation as well).
v0.8.2
v0.8.2 deeply optimizes the column generation module with significant performance boost.
A 20% reduction in running time is observed for the Chicago Sketch Network with 20 iterations of column generation and 20 iterations of column update. Detailed optimization information can be found under commits 18c8c7d and b5a204b.
v0.8.1
v0.8.1 mainly optimizes class ColumnVec, setup_agents() in class Network, and column generation module (i.e., colgen.py) to boost the performance in setup_agents() and path-base UE.
- replace the data container in ColumnVec to store columns from dict to list and change implementations involving loops through stored columns in colgen.py and utils.py;
- loop through column pool directly in class Network setup_agents();
- remove check on cv.get_od_volume() <= 0 which is useless as a ColumnVec instance would not be created if its volume is zero;
- remove col.set_toll() which is wrong and useless.
Other updates include,
- make link generalized cost consistent in get_generalized_cost() in class Link and _update_generalized_link_cost(), and apply get_generalized_cost() in _update_generalized_link_cost();
- use inheritance for some interfaces in classes;
- add #define GUARD_PATH_ENGINE_H to path_engine.h;
- remove implementations related to DLSim but keep read_zones() and read_demand_matrix();
- introduce badges to README to better show the status.
v0.8.0
v0.8.0 deprecates node sum as the unique key (or hash index) to differentiate columns in the column generation module as different columns may share the same node sum. The new implementation features a side-by-side comparison on column itself with a slight improvement in both running time and convergency gap. Details can be found at here.
- Deprecate node sum in _backtrace_shortest_path_tree() and _update_column_gradient_cost_and_flow() in colgen.py;
- Deprecate node sum in load_columns() in utils.py and adopt the same implementation from the updated _backtrace_shortest_path_tree();
- Rename _assignment() to _generate_column_pool() and _assignment_core() to _generate() to be consistent with their true functionalities;
- Optimize read_links() and output_agent_paths() in utils.py;
- Cosmetic changes in path_engine.cpp and DTALite source files with the critical change to include fstream in utils.h;
- Add a section How to Cite;
- Fix typos over multiple files.
v0.7.5
v0.7.5 fixes one crucial bug in accessibility evaluation along with some other updates.
- The time interval calculation in _get_interval_id() was wrong, which should have follown (MIN_TIME_BUDGET + (i-1) * BUDGET_TIME_INTVL, MIN_TIME_BUDGET + i * BUDGET_TIME_INTVL], where, i is integer and i >= 1;
- Set up argtypes for shortest_path_n() rather than shortest_path(). The latter is kept for legacy support only;
- Fix the wrong printout message in perform_network_assignment_DTALite() in terms of the file name.
v0.7.4
v0.7.4 comes with bug and issue fixes.
- fix bug on zero divisor in update_generalized_link_cost();
- fix wrong exception message in read_links();
- remove the legacy utf-8 encoding requirement on instances of open(), which was inherited from DTALite in Python (i.e., the code base leading to Path4GMNS).
Other updates include,
- add a concise guideline on how to contribute to Path4GMNS in README;
- provide references in README on the Path-based UE;
- use single quotes consistently across the project.
v0.7.3
v0.7.3 enhances the previous release with time-dependent accessibility evaluation, potential issue resolution on inconsecutive zone id's, and bug fix regarding connectors in DTALite.
Time-dependent Accessibility Evaluation
- Evaluate any periodic accessibility using its corresponding VDF_fftt in link.csv;
- Obtain periodic accessible nodes and links using using its corresponding VDF_fftt in link.csv;
- Output shortest path distance info in addition path travel time (i.e., accessibility) in accessibility.csv;
- Include zone coordinates in accessibility.csv and accessibility_aggregated.csv.
Potential Issue Resolution on Inconsecutive Zone ID's
As zone_id's are not necessarily consecutive numbers starting from zero, the previous implementation using list (with assumed consecutive zone id as index) would not go through if the assumption is violated.
Bug Fix on Connectors in DTALite
For an outgoing connector, its zone_seq_no_for_outgoing_connector should be the corresponding zone seq no of zone_org_id associated with the from node. See commit 5c65ff in DTALite for details.
Other Changes
- Replace hard-coded 0.001, 0.0001 and similar with a constant SMALL_DIVISOR;
- Replace the initial value of least_gradient_cost with MAX_LABEL_COST;
- Change MAX_LABEL_COST to 999999;
- Update path_engine so that MAX_LABEL_COST can be passed as a parameter to it at run-time.
v0.7.2
v0.7.2 features new functionalities, bug fixes and new interface.
New Functionalities
- Find shortest path between two (different) nodes under a specific mode;
- Find paths for all agents under a specific mode.
Bug Fixes
- Fix bug in the C++ path engine that all modes (which is defined by "all" and specifying that some links are open to all nodes) were not functioning right. See commit 5c65ff2 for details.
- Fix bug that ats (agent types) were not correctly set up according to argument multimodal in evaluate_accessibility(), which leaded to all zeros for non-target mode in aggregated_accessibility.csv;
New Interface
Introduce perform_column_generation() to replace perform_network_assignment(). Some users were reported to use perform_network_assignment() to perform other types of traffic assignments besides the path-based UE (as somehow implied by the function name and its argument list). Deprecate perform_network_assignment() from now on but keep it as legacy support.
v0.7.1
v0.7.1 comes with potential issue fixes as below.
- Adopt PEP8 on comparisons to None in utils.py. The previous implementation would discard attributes with value 0;
- Add connectivity check for each OD pair. Raise exception if there are no valid OD volumes/demands;
- For DTALite, if the link type of a link in link.csv is not defined settings.csv, set its value as 2 (i.e., Major arterial). Otherwise, execution of DTALite would be terminated due to undefined link types. Recompile DTALite with this change for Windows, Linux, and macOS. The details can be found under commit 8f3ced5 in https://github.com/jdlph/DTALite/;
- Add special output to find_shortest_path() if no path exists between two different nodes;
- Print out directory information for the following output functions, i.e., output_columns(), output_link_performance(), output_agent_paths(), _output_accessibility(), and _output_accessibility_aggregated().
v0.7.0
v0.7.0 fixes known bugs and potential issues in v0.7.0a1, replaces the accessibility evaluation implementation, and introduces new functionalities.
Known Bugs and Potential Issues Fix
- Fix bug on duplicate link when printing out path sequence in function output_path_sequence();
- Fix column incompatibility between Path4GMNS and DTALite, which results into failure of loading columns from DTALite;
- Fix potential memory issue when evaluating accessibility for large-scale networks (see the following for details);
- Fix several typos on accessibility and assignment.
New Lightweight and Faster Implementation for Accessibility Evaluation
The new implementation uses virtual centroids and connectors to facilitate the shortest path calculation between zones rather than set up virtual demands between any two different zones and maintain a column pool. It resolves the potential memory issue and leads to a much faster evaluation process. Its running speed is 9X faster than v0.7.0a1.
New Functionalities
- Get accessible nodes and links given a time budget and a transportation mode;
- Print out path distance in find_shortest_path() and get_agent_node_path();
- Output unique agent paths to a csv file through output_agent_paths();
- Let users decide whether to include geometry information in the output file for output_agent_paths() and output_columns().
Others
- Optimize output_columns() by looping through column_pool directly which was adopted for optimizing the column generation module in v0.7.0a1;
- Use f-strings in all printouts.