|
Dynamical system model
|
The RoadNetwork class represents a graph in the network. More...
#include <RoadNetwork.hpp>
Public Member Functions | |
| RoadNetwork (const RoadNetwork &)=delete | |
| RoadNetwork & | operator= (const RoadNetwork &)=delete |
| RoadNetwork (RoadNetwork &&)=default | |
| RoadNetwork & | operator= (RoadNetwork &&)=default |
| std::size_t | nCoils () const |
| Get the graph's number of coil streets. | |
| std::size_t | nIntersections () const |
| Get the graph's number of intersections. | |
| std::size_t | nRoundabouts () const |
| Get the graph's number of roundabouts. | |
| std::size_t | nTrafficLights () const |
| Get the graph's number of traffic lights. | |
| void | adjustNodeCapacities () |
| Adjust the nodes' transport capacity. | |
| void | autoInitTrafficLights (double const mainRoadPercentage=0.6) |
| Initialize the traffic lights with random parameters. | |
| void | autoMapStreetLanes () |
| Automatically re-maps street lanes basing on network's topology. | |
| void | autoAssignRoadPriorities () |
| Automatically assigns road priorities at intersections, basing on road types. | |
| void | setEdgeWeight (std::string_view const strv_weight, std::optional< double > const threshold=std::nullopt) final |
| Set the edge weight function based on a string identifier. | |
| void | describe (std::ostream &os=std::cout) const |
| Describe the RoadNetwork. | |
| template<typename... TArgs> | |
| void | importEdges (const std::string &fileName, TArgs &&... args) |
| Import the graph's streets from a file. | |
| template<typename... TArgs> | |
| void | importNodeProperties (const std::string &fileName, TArgs &&... args) |
| Import the graph's nodes properties from a file. | |
| void | importTrafficLights (const std::string &fileName) |
| Import the graph's traffic lights from a file. | |
| template<typename T1, typename... Tn> | |
| void | addNodes (T1 &&node, Tn &&... nodes) |
| TrafficLight & | makeTrafficLight (Id const nodeId, Delay const cycleTime, Delay const counter=0) |
| Convert an existing node to a traffic light. | |
| Roundabout & | makeRoundabout (Id nodeId) |
| Convert an existing node into a roundabout. | |
| void | addCoil (Id streetId, std::string const &name=std::string()) |
| Add a coil (dsf::Counter sensor) on the street with streetId. | |
| Station & | makeStation (Id nodeId, const unsigned int managementTime) |
| Convert an existing node into a station. | |
| void | addStreet (Street &&street) |
| Add a street to the graph. | |
| template<typename T1> | |
| void | addStreets (T1 &&street) |
| template<typename T1, typename... Tn> | |
| void | addStreets (T1 &&street, Tn &&... streets) |
| void | setStreetStatusById (Id const streetId, RoadStatus const status) |
| Set the street's status by its id. | |
| void | setStreetStatusByName (std::string const &name, RoadStatus const status) |
| Set the street's status of all streets with the given name. | |
| void | changeStreetNLanesById (Id const streetId, int const nLanes, std::optional< double > const speedFactor=std::nullopt) |
| Change the street's number of lanes by its id. | |
| void | changeStreetNLanesByName (std::string const &name, int const nLanes, std::optional< double > const speedFactor=std::nullopt) |
| Change the street's number of lanes of all streets with the given name. | |
| void | changeStreetCapacityById (Id const streetId, double const factor) |
| Change the street's capacity by its id. | |
| void | changeStreetCapacityByName (std::string const &name, double const factor) |
| Change the street's capacity of all streets with the given name. | |
| Street const * | street (Id source, Id destination) const |
| Get a street from the graph. | |
| auto | capacity () const noexcept |
| Get the maximum agent capacity. | |
| void | exportCSV (std::string_view const folder) const |
| Export the graph's edges and nodes to two CSV files in the specified folder. | |
| Public Member Functions inherited from dsf::Network< RoadJunction, Street > | |
| Network ()=default | |
| Construct a new empty Network object. | |
| auto const & | nodes () const noexcept |
| Get the nodes as an unordered map. | |
| auto const & | edges () const noexcept |
| Get the edges as an unordered map. | |
| auto | nNodes () const noexcept |
| Get the number of nodes. | |
| auto | nEdges () const noexcept |
| Get the number of edges. | |
| void | addNode (TArgs &&... args) |
| void | addNDefaultNodes (std::size_t const n) |
| void | addEdge (TArgs &&... args) |
| const auto & | node (Id const nodeId) const |
| Get a node by id. | |
| const auto & | edge (Id const edgeId) const |
| Get an edge by id. | |
| PathCollection | allPathsTo (Id const targetId) const |
| Perform a global Dijkstra search to a target node from all other nodes in the graph. | |
| PathCollection | shortestPath (Id const sourceId, Id const targetId) const |
| Find the shortest path between two nodes using Dijkstra's algorithm. | |
| void | computeBetweennessCentralities () |
| Compute node weighted betweenness centralities using Brandes' algorithm. | |
| void | computeEdgeBetweennessCentralities () |
| Compute edge weighted betweenness centralities using Brandes' algorithm. | |
Additional Inherited Members | |
| Protected Member Functions inherited from dsf::Network< RoadJunction, Street > | |
| constexpr auto | m_cantorHash (Id u, Id v) const |
| Protected Attributes inherited from dsf::Network< RoadJunction, Street > | |
| std::unordered_map< Id, std::unique_ptr< RoadJunction > > | m_nodes |
| std::unordered_map< Id, std::unique_ptr< Street > > | m_edges |
| std::function< double(Street const &)> | m_weightFunction |
| std::optional< double > | m_weightThreshold |
The RoadNetwork class represents a graph in the network.
| void dsf::mobility::RoadNetwork::addCoil | ( | Id | streetId, |
| std::string const & | name = std::string() ) |
Add a coil (dsf::Counter sensor) on the street with streetId.
| streetId | The id of the street to add the coil to |
| name | The coil name |
| std::invalid_argument | if the street does not exist |
| void dsf::mobility::RoadNetwork::addStreet | ( | Street && | street | ) |
Add a street to the graph.
| street | A reference to the street to add |
| void dsf::mobility::RoadNetwork::adjustNodeCapacities | ( | ) |
Adjust the nodes' transport capacity.
The nodes' capacity is adjusted using the graph's streets transport capacity, which may vary basing on the number of lanes. The node capacity will be set to the sum of the incoming streets' transport capacity.
| void dsf::mobility::RoadNetwork::autoInitTrafficLights | ( | double const | mainRoadPercentage = 0.6 | ) |
Initialize the traffic lights with random parameters.
| mainRoadPercentage | The percentage of main roads for the traffic lights cycles (default is 0.6) |
Traffic Lights with no parameters set are initialized with random parameters. Street priorities are assigned considering the number of lanes and the speed limit. Traffic Lights with an input degree lower than 3 are converted to standard intersections.
| void dsf::mobility::RoadNetwork::autoMapStreetLanes | ( | ) |
Automatically re-maps street lanes basing on network's topology.
For example, if one street has the right turn forbidden, then the right lane becomes a straight one
|
inlinenoexcept |
Get the maximum agent capacity.
| void dsf::mobility::RoadNetwork::changeStreetCapacityById | ( | Id const | streetId, |
| double const | factor ) |
Change the street's capacity by its id.
| streetId | The id of the street |
| factor | The factor to multiply the capacity by |
| void dsf::mobility::RoadNetwork::changeStreetCapacityByName | ( | std::string const & | name, |
| double const | factor ) |
Change the street's capacity of all streets with the given name.
| name | The name to match |
| factor | The factor to multiply the capacity by |
| void dsf::mobility::RoadNetwork::changeStreetNLanesById | ( | Id const | streetId, |
| int const | nLanes, | ||
| std::optional< double > const | speedFactor = std::nullopt ) |
Change the street's number of lanes by its id.
| streetId | The id of the street |
| nLanes | The new number of lanes |
| speedFactor | Optional, The factor to multiply the max speed of the street |
| void dsf::mobility::RoadNetwork::changeStreetNLanesByName | ( | std::string const & | name, |
| int const | nLanes, | ||
| std::optional< double > const | speedFactor = std::nullopt ) |
Change the street's number of lanes of all streets with the given name.
| name | The name to match |
| nLanes | The new number of lanes |
| speedFactor | Optional, The factor to multiply the max speed of the street |
| void dsf::mobility::RoadNetwork::describe | ( | std::ostream & | os = std::cout | ) | const |
Describe the RoadNetwork.
| os | The output stream to write the description to (default is std::cout) |
| void dsf::mobility::RoadNetwork::exportCSV | ( | std::string_view const | folder | ) | const |
Export the graph's edges and nodes to two CSV files in the specified folder.
| folder | The folder to export the files to |
| void dsf::mobility::RoadNetwork::importEdges | ( | const std::string & | fileName, |
| TArgs &&... | args ) |
Import the graph's streets from a file.
| fileName | The name of the file to import the streets from. |
Supports csv, json and geojson file formats. The file format is deduced from the file extension. Supported fields:
geometry: The geometry of the street, as a LINESTRING
Next columns are optional (meaning that their absence will not -hopefully- cause any pain):
| args | Additional arguments |
| void dsf::mobility::RoadNetwork::importNodeProperties | ( | const std::string & | fileName, |
| TArgs &&... | args ) |
Import the graph's nodes properties from a file.
| fileName | The name of the file to import the nodes properties from. |
| args | Additional arguments |
Supports csv file format. Please specify the separator as second parameter. Supported fields:
| void dsf::mobility::RoadNetwork::importTrafficLights | ( | const std::string & | fileName | ) |
Import the graph's traffic lights from a file.
| fileName | The name of the file to import the traffic lights from. |
The file format is csv-like with the ';' separator. Supported columns (in order):
| std::invalid_argument | if the file is not found, invalid or the format is not supported |
| Roundabout & dsf::mobility::RoadNetwork::makeRoundabout | ( | Id | nodeId | ) |
Convert an existing node into a roundabout.
| nodeId | The id of the node to convert to a roundabout |
| std::invalid_argument | if the node does not exist |
| Station & dsf::mobility::RoadNetwork::makeStation | ( | Id | nodeId, |
| const unsigned int | managementTime ) |
Convert an existing node into a station.
| nodeId | The id of the node to convert to a station |
| managementTime | The station's management time |
| std::invalid_argument | if the node does not exist |
| TrafficLight & dsf::mobility::RoadNetwork::makeTrafficLight | ( | Id const | nodeId, |
| Delay const | cycleTime, | ||
| Delay const | counter = 0 ) |
Convert an existing node to a traffic light.
| nodeId | The id of the node to convert to a traffic light |
| cycleTime | The traffic light's cycle time |
| counter | The traffic light's counter initial value. Default is 0 |
| std::invalid_argument | if the node does not exist |
| std::size_t dsf::mobility::RoadNetwork::nCoils | ( | ) | const |
Get the graph's number of coil streets.
| std::size_t dsf::mobility::RoadNetwork::nIntersections | ( | ) | const |
Get the graph's number of intersections.
| std::size_t dsf::mobility::RoadNetwork::nRoundabouts | ( | ) | const |
Get the graph's number of roundabouts.
| std::size_t dsf::mobility::RoadNetwork::nTrafficLights | ( | ) | const |
Get the graph's number of traffic lights.
|
finalvirtual |
Set the edge weight function based on a string identifier.
| strv_weight | The string identifier of the weight function. Supported values are "travelTime", "length" and any custom attribute name. |
| threshold | An optional threshold to apply to the weight function. The effective weight will be weight * (1 + threshold). This can be used to increase the weight of certain paths and thus make them less likely to be chosen by agents when using a weight-based path update strategy. |
Implements dsf::Network< RoadJunction, Street >.
| void dsf::mobility::RoadNetwork::setStreetStatusById | ( | Id const | streetId, |
| RoadStatus const | status ) |
Set the street's status by its id.
| streetId | The id of the street |
| status | The status to set |
| void dsf::mobility::RoadNetwork::setStreetStatusByName | ( | std::string const & | name, |
| RoadStatus const | status ) |
Set the street's status of all streets with the given name.
| name | The name to match |
| status | The status to set |
| Street const * dsf::mobility::RoadNetwork::street | ( | Id | source, |
| Id | destination ) const |
Get a street from the graph.
| source | The source node |
| destination | The destination node |