Skip to content

Commit 1fcce77

Browse files
committed
Put also weight threshold in Dynamics constructor
1 parent fba8eef commit 1fcce77

File tree

6 files changed

+48
-37
lines changed

6 files changed

+48
-37
lines changed

src/dsm/dsm.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
static constexpr uint8_t DSM_VERSION_MAJOR = 2;
88
static constexpr uint8_t DSM_VERSION_MINOR = 5;
9-
static constexpr uint8_t DSM_VERSION_PATCH = 1;
9+
static constexpr uint8_t DSM_VERSION_PATCH = 2;
1010

1111
static auto const DSM_VERSION =
1212
std::format("{}.{}.{}", DSM_VERSION_MAJOR, DSM_VERSION_MINOR, DSM_VERSION_PATCH);

src/dsm/headers/Dynamics.hpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,15 @@ namespace dsm {
191191
/// @param graph The graph representing the network
192192
/// @param useCache If true, the paths are cached (default is false)
193193
/// @param seed The seed for the random number generator (default is std::nullopt)
194+
/// @param weightFunction The weight function for the Dijkstra's algorithm (default is
195+
/// weight_functions::streetLength)
196+
/// @param weightTreshold The weight treshold for updating the paths (default is 1.)
194197
Dynamics(RoadNetwork& graph,
195198
bool useCache = false,
196199
std::optional<unsigned int> seed = std::nullopt,
197200
std::function<double(const RoadNetwork*, Id, Id)> weightFunction =
198-
weight_functions::streetLength);
201+
weight_functions::streetLength,
202+
double weightTreshold = 1.);
199203

200204
virtual void setAgentSpeed(Size agentId) = 0;
201205
virtual void evolve(bool reinsert_agents = false) = 0;
@@ -362,9 +366,10 @@ namespace dsm {
362366
RoadNetwork& graph,
363367
bool useCache,
364368
std::optional<unsigned int> seed,
365-
std::function<double(const RoadNetwork*, Id, Id)> weightFunction)
369+
std::function<double(const RoadNetwork*, Id, Id)> weightFunction,
370+
double weightTreshold)
366371
: m_weightFunction{weightFunction},
367-
m_weightTreshold{1.},
372+
m_weightTreshold{weightTreshold},
368373
m_bCacheEnabled{useCache},
369374
m_graph{std::move(graph)},
370375
m_time{0},

src/dsm/headers/FirstOrderDynamics.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ namespace dsm {
1818
std::optional<unsigned int> seed = std::nullopt,
1919
double alpha = 0.,
2020
std::function<double(const RoadNetwork*, Id, Id)>
21-
weightFunction = weight_functions::streetTime);
21+
weightFunction = weight_functions::streetTime,
22+
double weightTreshold = 60.);
2223
/// @brief Set the speed of an agent
2324
/// @param agentId The id of the agent
2425
/// @throw std::invalid_argument, If the agent is not found

src/dsm/headers/RoadDynamics.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,14 @@ namespace dsm {
8989
/// @param graph The graph representing the network
9090
/// @param useCache If true, the cache is used (default is false)
9191
/// @param seed The seed for the random number generator (default is std::nullopt)
92+
/// @param weightFunction The weight function for the Dijkstra's algorithm (default is weight_functions::streetTime)
93+
/// @param weightTreshold The weight treshold for updating the paths (default is 60.)
9294
RoadDynamics(RoadNetwork& graph,
9395
bool useCache = false,
9496
std::optional<unsigned int> seed = std::nullopt,
9597
std::function<double(const RoadNetwork*, Id, Id)> weightFunction =
96-
weight_functions::streetTime);
98+
weight_functions::streetTime,
99+
double weightTreshold = 60.); // 60 seconds thresholds for paths
97100

98101
/// @brief Set the error probability
99102
/// @param errorProbability The error probability
@@ -190,8 +193,9 @@ namespace dsm {
190193
RoadNetwork& graph,
191194
bool useCache,
192195
std::optional<unsigned int> seed,
193-
std::function<double(const RoadNetwork*, Id, Id)> weightFunction)
194-
: Dynamics<Agent<delay_t>>(graph, useCache, seed, weightFunction),
196+
std::function<double(const RoadNetwork*, Id, Id)> weightFunction,
197+
double weightTreshold)
198+
: Dynamics<Agent<delay_t>>(graph, useCache, seed, weightFunction, weightTreshold),
195199
m_previousOptimizationTime{0},
196200
m_errorProbability{std::nullopt},
197201
m_passageProbability{std::nullopt},

src/dsm/sources/FirstOrderDynamics.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ namespace dsm {
66
bool useCache,
77
std::optional<unsigned int> seed,
88
double alpha,
9-
std::function<double(const RoadNetwork*, Id, Id)> weightFunction)
10-
: RoadDynamics<Delay>(graph, useCache, seed, weightFunction),
9+
std::function<double(const RoadNetwork*, Id, Id)> weightFunction,
10+
double weightTreshold)
11+
: RoadDynamics<Delay>(graph, useCache, seed, weightFunction, weightTreshold),
1112
m_alpha{alpha},
1213
m_speedFluctuationSTD{0.} {
1314
if (alpha < 0. || alpha > 1.) {

test/Test_dynamics.cpp

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ TEST_CASE("Dynamics") {
5555
graph.importMatrix("./data/matrix.dsm");
5656
graph.buildAdj();
5757
WHEN("A dynamics object is created") {
58-
Dynamics dynamics{graph, false, 69};
58+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
5959
THEN("The node and the street sets are the same") {
6060
CHECK_EQ(dynamics.graph().nNodes(), 3);
6161
CHECK_EQ(dynamics.graph().nEdges(), 4);
@@ -97,7 +97,7 @@ TEST_CASE("Dynamics") {
9797
GIVEN("A dynamics object and a destination node") {
9898
auto graph = RoadNetwork{};
9999
graph.importMatrix("./data/matrix.dat");
100-
Dynamics dynamics{graph, false, 69};
100+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
101101
WHEN("We add a span of destination nodes") {
102102
std::array<uint32_t, 3> nodes{0, 1, 2};
103103
dynamics.setDestinationNodes(nodes);
@@ -115,7 +115,7 @@ TEST_CASE("Dynamics") {
115115
GIVEN("A dynamics object, a source node and a destination node") {
116116
auto graph = RoadNetwork{};
117117
graph.importMatrix("./data/matrix.dsm");
118-
Dynamics dynamics{graph, false, 69};
118+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
119119
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(2, 2)));
120120
WHEN("We add the agent") {
121121
dynamics.addAgent(0, 2, 0);
@@ -133,7 +133,7 @@ TEST_CASE("Dynamics") {
133133
GIVEN("A dynamics object and an itinerary") {
134134
auto graph = RoadNetwork{};
135135
graph.importMatrix("./data/matrix.dsm");
136-
Dynamics dynamics{graph, false, 69};
136+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
137137
WHEN("We add a random agent") {
138138
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 2)));
139139
dynamics.addAgentsUniformly(1);
@@ -151,7 +151,7 @@ TEST_CASE("Dynamics") {
151151
GIVEN("A dynamics object and many itineraries") {
152152
auto graph = RoadNetwork{};
153153
graph.importMatrix("./data/matrix.dsm");
154-
Dynamics dynamics{graph, false, 69};
154+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
155155
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 2)));
156156
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(1, 1)));
157157
WHEN("We add many agents") {
@@ -205,7 +205,7 @@ TEST_CASE("Dynamics") {
205205
GIVEN("A graph object") {
206206
auto graph = RoadNetwork{};
207207
graph.importMatrix("./data/matrix.dat");
208-
Dynamics dynamics{graph, false, 69};
208+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
209209
WHEN("We add one agent for existing itinerary") {
210210
std::unordered_map<uint32_t, double> src{{0, 1.}};
211211
std::unordered_map<uint32_t, double> dst{{2, 1.}};
@@ -254,7 +254,7 @@ TEST_CASE("Dynamics") {
254254
auto graph = RoadNetwork{};
255255
graph.importMatrix("./data/matrix.dat", false);
256256
graph.buildAdj();
257-
Dynamics dynamics{graph, false, 69};
257+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
258258
dynamics.setPassageProbability(p);
259259
WHEN("We add some agent") {
260260
dynamics.addAgents(n);
@@ -272,7 +272,7 @@ TEST_CASE("Dynamics") {
272272
GIVEN("A dynamics object and one itinerary") {
273273
auto graph = RoadNetwork{};
274274
graph.importMatrix("./data/matrix.dsm");
275-
Dynamics dynamics{graph, false, 69};
275+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
276276
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 2)));
277277
WHEN("We add an agent with itinerary 0") {
278278
dynamics.addAgent(0, 0);
@@ -298,7 +298,7 @@ TEST_CASE("Dynamics") {
298298
RoadNetwork graph2;
299299
graph2.addStreets(s);
300300
graph2.buildAdj();
301-
Dynamics dynamics{graph2, false, 69};
301+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
302302
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 1)));
303303
dynamics.updatePaths();
304304
dynamics.addAgentsUniformly(1);
@@ -320,7 +320,7 @@ TEST_CASE("Dynamics") {
320320
RoadNetwork graph2;
321321
graph2.addStreets(s1, s2, s3);
322322
graph2.buildAdj();
323-
Dynamics dynamics{graph2, false, 69, 0.0, dsm::weight_functions::streetLength};
323+
Dynamics dynamics{graph2, false, 69, 0.0, dsm::weight_functions::streetLength, 1.};
324324
WHEN("We add an itinerary and update the paths") {
325325
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 2)));
326326
dynamics.updatePaths();
@@ -350,7 +350,7 @@ TEST_CASE("Dynamics") {
350350
"destination") {
351351
RoadNetwork graph2{};
352352
graph2.importMatrix("./data/matrix.dat");
353-
Dynamics dynamics{graph2, false, 69};
353+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
354354
dynamics.addItinerary(0, 118);
355355
dynamics.addItinerary(1, 118);
356356
dynamics.addItinerary(2, 118);
@@ -375,7 +375,7 @@ TEST_CASE("Dynamics") {
375375
RoadNetwork graph;
376376
graph.addStreets(s1, s2, s3, s4);
377377
graph.buildAdj();
378-
Dynamics dynamics{graph, false, 69};
378+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
379379
dynamics.addItinerary(0, 2);
380380
WHEN("We update the paths") {
381381
dynamics.updatePaths();
@@ -410,7 +410,7 @@ TEST_CASE("Dynamics") {
410410
RoadNetwork graph;
411411
graph.addStreets(s1, s2, s3, s4);
412412
graph.buildAdj();
413-
Dynamics dynamics{graph, false, 69};
413+
Dynamics dynamics{graph, false, 69, 0., dsm::weight_functions::streetLength, 1.};
414414
dynamics.setWeightFunction(dsm::weight_functions::streetTime);
415415
dynamics.addItinerary(0, 2);
416416
WHEN("We update the paths") {
@@ -445,7 +445,7 @@ TEST_CASE("Dynamics") {
445445
RoadNetwork graph;
446446
graph.addStreets(s1, s2, s3);
447447
graph.buildAdj();
448-
Dynamics dynamics{graph, false, 69, 0.0, dsm::weight_functions::streetLength};
448+
Dynamics dynamics{graph, false, 69, 0.0, dsm::weight_functions::streetLength, 1.};
449449
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 2)));
450450
dynamics.updatePaths();
451451
WHEN("We add an agent randomly and evolve the dynamics") {
@@ -476,7 +476,7 @@ TEST_CASE("Dynamics") {
476476
RoadNetwork graph2;
477477
graph2.addStreets(s1, s2);
478478
graph2.buildAdj();
479-
Dynamics dynamics{graph2, false, 69};
479+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
480480
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 1)));
481481
dynamics.updatePaths();
482482
dynamics.addAgent(0, 0, 0);
@@ -500,7 +500,7 @@ TEST_CASE("Dynamics") {
500500
RoadNetwork graph2;
501501
graph2.addStreets(s1, s2);
502502
graph2.buildAdj();
503-
Dynamics dynamics{graph2, false, 69};
503+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
504504
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(0, 1)));
505505
dynamics.updatePaths();
506506
dynamics.addAgent(0, 0, 0);
@@ -532,7 +532,7 @@ TEST_CASE("Dynamics") {
532532
RoadNetwork graph2;
533533
graph2.addStreets(s0_1, s1_0, s1_2, s2_1);
534534
graph2.buildAdj();
535-
Dynamics dynamics{graph2, false, 69};
535+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
536536
dynamics.setDestinationNodes({1, 2});
537537
std::vector<dsm::Id> trip{2, 1};
538538
dynamics.addAgent(0, trip, 0);
@@ -575,7 +575,7 @@ TEST_CASE("Dynamics") {
575575
tl.setCycle(7, dsm::Direction::RIGHT, {2, 0});
576576
tl.setCycle(16, dsm::Direction::RIGHT, {2, 2});
577577
tl.setCycle(9, dsm::Direction::RIGHT, {2, 2});
578-
Dynamics dynamics{graph2, false, 69};
578+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
579579
dynamics.addItinerary(2, 2);
580580
dynamics.updatePaths();
581581
dynamics.addAgent(0, 2, 0);
@@ -634,7 +634,7 @@ TEST_CASE("Dynamics") {
634634
graph2.buildAdj();
635635
graph2.adjustNodeCapacities();
636636

637-
Dynamics dynamics{graph2, false, 69};
637+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
638638
dynamics.setDestinationNodes({0, 2, 3, 4});
639639

640640
WHEN("We add agents and make the system evolve") {
@@ -698,7 +698,7 @@ TEST_CASE("Dynamics") {
698698
graph2.buildAdj();
699699
graph2.adjustNodeCapacities();
700700

701-
Dynamics dynamics{graph2, false, 69};
701+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
702702
dynamics.setDestinationNodes({0, 2, 3, 4});
703703

704704
WHEN("We add agents and make the system evolve") {
@@ -752,7 +752,7 @@ TEST_CASE("Dynamics") {
752752
tl.setCycle(11, dsm::Direction::ANY, {4, 0});
753753
tl.setComplementaryCycle(16, 11);
754754
tl.setComplementaryCycle(21, 11);
755-
Dynamics dynamics{graph2, false, 69};
755+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
756756
dynamics.setDestinationNodes({0, 2, 3, 4});
757757
WHEN("We evolve the dynamics and optimize traffic lights") {
758758
dynamics.addAgents(7, 0, 2);
@@ -801,7 +801,7 @@ TEST_CASE("Dynamics") {
801801
graph2.buildAdj();
802802
auto& rb = graph2.makeRoundabout(1);
803803
graph2.adjustNodeCapacities();
804-
Dynamics dynamics{graph2, false, 69};
804+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
805805
dynamics.addItinerary(0, 0);
806806
dynamics.addItinerary(2, 2);
807807
dynamics.updatePaths();
@@ -837,7 +837,7 @@ TEST_CASE("Dynamics") {
837837
RoadNetwork graph2;
838838
graph2.addStreets(s1, s2);
839839
graph2.buildAdj();
840-
Dynamics dynamics{graph2, false, 69};
840+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
841841
dynamics.addItinerary(2, 2);
842842
dynamics.updatePaths();
843843
dynamics.addAgent(0, 2, 0);
@@ -862,7 +862,7 @@ TEST_CASE("Dynamics") {
862862
graph2.addStreets(s1, s2);
863863
graph2.buildAdj();
864864
graph2.makeStochasticStreet(1, 0.3);
865-
Dynamics dynamics{graph2, false, 69};
865+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
866866
dynamics.addItinerary(2, 2);
867867
dynamics.updatePaths();
868868
dynamics.addAgent(0, 2, 0);
@@ -962,7 +962,7 @@ TEST_CASE("Dynamics") {
962962
graph2.addEdge<Street>(6, std::make_pair(3, 0), 10., 10.);
963963
graph2.addEdge<Street>(7, std::make_pair(4, 0), 10., 10.);
964964
graph2.buildAdj();
965-
Dynamics dynamics{graph2, false, 69};
965+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
966966
dynamics.graph().node(0)->setCapacity(3);
967967
dynamics.addItinerary(1, 1);
968968
dynamics.addItinerary(2, 2);
@@ -1020,7 +1020,7 @@ TEST_CASE("Dynamics") {
10201020
graph2.addEdge<SpireStreet>(0, std::make_pair(0, 1), 10., 5.);
10211021
graph2.addEdge<Street>(1, std::make_pair(1, 2), 10., 10.);
10221022
graph2.buildAdj();
1023-
Dynamics dynamics{graph2, false, 69};
1023+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
10241024
dynamics.addItinerary(std::unique_ptr<Itinerary>(new Itinerary(2, 2)));
10251025
dynamics.updatePaths();
10261026
dynamics.addAgent(0, 2, 0);
@@ -1048,7 +1048,7 @@ TEST_CASE("Dynamics") {
10481048
graph2.addEdge<SpireStreet>(0, std::make_pair(0, 1), 10., 5.);
10491049
graph2.addEdge(1, std::make_pair(1, 2), 10., 10.);
10501050
graph2.buildAdj();
1051-
Dynamics dynamics{graph2, false, 69};
1051+
Dynamics dynamics{graph2, false, 69, 0., dsm::weight_functions::streetLength, 1.};
10521052
dynamics.addItinerary(2, 2);
10531053
dynamics.updatePaths();
10541054
dynamics.addAgent(0, 2, 0);

0 commit comments

Comments
 (0)