Fixed issue in consolidate_graph() which used to modify columns (from and to in-place). Users in older versions are advised to input a data.table::copy() of the graph to retain it.
Fixes issue with multithreading for newer versions of mirai (or R). Thanks @kent37 (#69).
angle.max constraint in run_assignment() is now two-sided (angle measured from origin and destination node against the straight line between them), rather than just one-sided (from origin). Also, the implementation is slightly more efficient.Release blog post at: https://sebkrantz.github.io/Rblog/2026/02/09/introducing-flownet-efficient-transport-modeling-in-r/
Fixed bug in run_assignment with return.extra = "edges" where edge indices were incorrectly returned. Due to zero indexing in C vs. 1-indexing in R they where offset by one, thus, in flownet versions <= 0.1.2, the correct edge indices can be retained by subtracting 1 from them.
Improved Step 7 (elimination of path with duplicate edges) in the route enumeration algorithm to properly handle directed paths, i.e., candidate paths where an intermediate node is approached via an edge and departed from via the same edge but in a different direction, are now also removed.
Added option return.extra = "PSF" which adds "path_size_factors" to the results object. This should be useful to calibrate the PSL model.
Added option return.extra = "eweights" which adds "egde_weights" to the results object. Edge weights are the sum of the path probabilities across all paths using that edge. These weights are computed efficiently at C-level, with minimal overhead, if requested.
Added verbosity to simplify_network() (default verbose = TRUE).
Reordered elements in results object (class 'flownet') in a natural way: providing first the final flows, followed by path and edge-level additional results if requested through return.extra.
Added more unit tests covering return.extra options.
Added variable labels to included africa_* datasets - try collapse::namlab() on them.
Small improvements to recursive logic in consolidate_graph().
Bumped kit dependency to 0.0.21 (for fpmin() and fpmax()).
In consolidate_graph(): argument consolidate was renamed to contract for improved clarity, while ensuring backwards compatibility.
Minor improvements to documentation and vignette.
run_assignment() @details section using \subsection{} for better organization:return.extra parameter documentation as a clear table showing which options are available for each methodpaths returns edge indices, not node indicesnthreads parameterrun_assignment() (AoN and PSL methods)normalize_graph(), nodes_from_graph(), distances_from_graph()linestrings_to_graph(), linestrings_from_graph(), create_undirected_graph()consolidate_graph(), simplify_network()melt_od_matrix()simplify_network() shortest-paths methodrun_assignment(): Core function for traffic assignment using the path-sized logit (PSL) modelmirai. linestrings_to_graph(): Convert LINESTRING geometries (sf objects) to graph data framesAutomatic computation of edge lengths
create_undirected_graph(): Convert directed graphs to undirected graphs
collapse::collap() with customizable functionsPreserves spatial coordinates and line identifiers
consolidate_graph(): Simplify network topology by removing intermediate nodes
Preserves coordinate information when present
simplify_network(): Simplify networks using shortest-paths or spatial clustering methods
leaderCluster algorithm and contracts the graphnormalize_graph(): Normalize node IDs to consecutive integers starting from 1Preserves graph structure while remapping identifiers
nodes_from_graph(): Extract unique nodes with coordinates from graph
Useful for mapping zones to network nodes
linestrings_from_graph(): Convert graph data frames back to LINESTRING geometries
linestrings_to_graph()Preserves all graph attributes in output sf object
distances_from_graph(): Compute distance matrices for all node pairs
melt_od_matrix(): Convert origin-destination matrices to long formatafrica_network: A road transport network with 2,825 LINESTRING features representing existing roads (2,344 edges) and proposed new links (481 edges). Each edge includes attributes such as distance, travel duration, border crossing costs, terrain ruggedness, and road upgrade costs.
africa_cities_ports: 453 African cities with population > 100,000 and international ports. Includes population data, capital status, and port cargo outflows.
africa_segments: 14,358 raw network segments representing intersected road routes. Useful for demonstrating network consolidation and simplification functions.
africa_trade: Bilateral trade flows between 47 African countries aggregated by HS section (21 product categories). Values represent annual averages over 2012-2022.
The africa_network, africa_cities_ports, and africa_segments datasets are from Krantz, S. (2024). Optimal Investments in Africa's Road Network. Policy Research Working Paper 10893. World Bank. Replication materials are available at github.com/SebKrantz/OptimalAfricanRoads.
collapse package for fast data transformationsigraph for graph operations and shortest path algorithmsgeodist for fast geodesic distance computationsleaderCluster for efficient spatial clustering?flownet-packageGPL-3
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.