# Major Updates 1. Read and output node and link geometries (v0.6.0) 2. Set up individual agents from aggregated OD demand only when it is needed (v0.6.0) 3. Provide a setting file in yaml to let users control key parameters (v0.6.0) 4. Support for multi-demand-period and multi-agent-type (v0.6.0) 5. Load columns/paths from existing runs and continue path-base UE (v0.7.0a1) 6. Download the predefined GMNS test data sets to users' local machines when needed (v0.7.0a1) 7. Add allowed use in terms of agent type (i.e., transportation mode) for links (v0.7.0a1) 8. Calculate and show up multimodal accessibility (v0.7.0a1) 9. Apply lightweight and faster implementation on accessibility evaluation using virtual centroids and connectors (v0.7.0) 10. Get accessible nodes and links given mode and time budget (v0.7.0) 11. Retrieve shortest paths under multimodal allowed uses (v0.7.2) 12. Time-dependent accessibility evaluation (v0.7.3) 13. Fix crucial bug in accessibility evaluation (v0.7.5) 14. Deprecate node_sum as hash index in column generation (v0.8.0) 15. Optimize class ColumnVec, setup_agents() in class Network, and column generation module (i.e., colgen.py) (v0.8.1) 16. Deep code optimization in column generation module with significant performance improvement (v0.8.2) 17. Let users choose which speed to use in accessibility evaluation (either the free speed of an agent specified in settings.yml or the link free flow speed defined in link.csv) (v0.8.3) 18. Transportation equity evaluation (v0.8.3) 19. Introduce special events with affected links and capacity reductions (v0.8.4) 20. Synthesize zones and demands (v0.8.5) 21. Add support for Apple Silicon (v0.8.5) 22. More robust parsing functions (v0.8.6) 23. Fix crucial bug in column generation module which will lead to wrong results if a zone has multiple nodes (v0.8.6) 24. Fix crucial bug in setting up the capacity of each VDFPeriod instance if the input is missing from link.csv (v0.8.6) 25. Add backwards compatibility on deprecated default agent type of p or passenger (v0.8.7a1) 26. Fix potential issue in setup_spnetwork() which requires zone id's are in ascending order (v0.8.7a1) 27. Fix potential issue that bin_index might not start from zero along with potential zero division issue when all zones have the same number of nodes in _synthesize_bin_index() (v0.8.7a1) 28. Enhance the tutorial with elaboration on the legacy way of loading demand and zone information and some caveats. (v0.8.7a1) 29. Calculate and print out relative gap of UE as convergency measure (v0.8.7) 30. Support the most common length and speed units. See [tutorial](https://github.com/jdlph/Path4GMNS/tree/dev/tests/tutorial.ipynb) for details (v0.8.7) 31. Introduce the simulation module along with a simple traffic simulator using the point queue model and shortest paths (v0.9.0) 32. Fully optimize the C++ routing engine (v0.9.1) 33. Use the UE result as routing decisions for simulation (v0.9.1) 34. Optimize the column generation module with faster and better UE convergency (v0.9.2) 35. Fix the bug on updating the total system travel time (v0.9.2) 36. Resolve the potential issue on traversing the last through node in path engine (v0.9.2) 37. Fix the bug on loading columns where link path and node paths are not in the proper order (v0.9.2) 38. Fix the bug on handling link capacity reduction in traffic assignment (v0.9.3) 39. Remove dependency on demand.csv for loading columns (v0.9.3) 40. Deprecate find_path_for_agents() (v0.9.3) 41. Remove beg_iteration and end_iteration from setting up a special event (v0.9.4) 42. Enhance DemandPeriod setup on time_period (v0.9.4) 43. Fix multiple bugs related to simulation including calculation of agent arrival time and agent waiting time, link traverse time, and link outflow cap (v0.9.4) 44. Remove memory_blocks and its implementations (which were intended for multiprocessing) (v0.9.4) 45. Bring back the postprocessing after UE in case users do not do column updating (i.e., column_upd_num = 0) (v0.9.4) 46. Drop the requirement that node id must be integer (v0.9.5) 47. Drop the requirement that zone id must be integer (v0.9.5) 48. Eliminate ultra-low-volume columns from assignment (v0.9.6) 49. Calculate and print out the final UE convergency after the postprocessing (v0.9.6) 50. Embed and support the latest [DTALite](https://github.com/asu-trans-ai-lab/DTALite) in addition to the existing [classic version](https://github.com/jdlph/DTALite) (v0.9.6) 51. Complete update 47 introduced in v0.9.5 (v0.9.7) 52. Introduce unit testing (v0.9.8) 53. Support recurring calls of run_DTALite() in terminal and fix issues regarding accessibility output (v0.9.8) 54. Introduce ODME (v0.9.9) 55. Fix bugs in loading synthetic zones and synthesizing demand (v0.9.9) 56. Separate demand loading from read_network() (v0.9.9) 57. Introduce a new public API read_demand() to unify demand and zone synthesis, and demand (and synthetic zone) loading (v0.9.9) 58. Deprecate confusing perform_column_generation() and replace it with find_ue() (v0.9.9) 59. Add CMakeFiles.txt to better manage local builds and installs (v0.9.9) 60. Reestablish cross-validation of zone id in node.csv and demand.csv (which was dropped in v0.9.9) (v0.9.9.post1) 61. Fix potential inconsistency in essential arrays (between the underlying physical network and the shortest path network (i.e., SPNetwork)) for shortest path calculation, which would lead to [OSError](https://github.com/jdlph/Path4GMNS/issues/51) (v0.9.9.post1) 62. Reinstate warning for missing pyyaml (v0.9.10) 63. Optimize the UE module by precluding zones with no valid demand and moving the check on each centroid into SPNetwork setup (v0.9.10) 64. Optimize the UE module on computing the relative gap in the postprocessing (v0.9.10) 65. Include rel_gap_tolerance as an additional argument to find_ue() and return the final relative gap (v0.9.10) 66. Fix bug on path cost unit for find_shortest_path() reported in Issue #58 (v0.9.10) 67. Find the shortest path in either travel distance or travel time (v0.9.10) 68. Adaptively display the path distance per the length unit passed to read_network() (v0.9.10) 69. Introduce get_shortest_path_tree() to return the shortest path tree from a given source node (v0.9.10) 70. Remove deprecated APIs including perform_column_generation(), perform_network_assignment(), perform_network_assignment(), and perform_network_assignment_DTALite() (v0.9.10) 71. Introduce generic downloading functions to replace download_sample_data_sets() (v0.10.0) 72. Introduce DTALiteClassic() and DTALiteMultimodal() to replace perform_network_assignment_DTALite() and run_DTALite(), respectively (v0.10.0) 73. Add multiprocessing exception handling to DTALiteClassic() (v0.10.0) 74. Fix segmentation fault on DTALiteMultimodal() with Python 3.8 on Linux (v0.10.0) 75. Introduce link-based UE with find_ue_fw() (v0.10.0) 76. Optimize IO by precluding path geometry as default when outputting route_assignment.csv (v0.10.0) Detailed update information can be found in [Releases](https://github.com/jdlph/Path4GMNS/releases).