Skip to content

Commit 6d062fe

Browse files
authored
Refactor street evolution loop (#262)
* Change street evolution algorithm * Fix stalingrado example * aaaaaaaa * Fix stalingrado script * Refactor examples
1 parent 13d1a68 commit 6d062fe

File tree

7 files changed

+41
-33
lines changed

7 files changed

+41
-33
lines changed

examples/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ find_package(TBB REQUIRED CONFIG)
1111

1212
# Set the C++ flags
1313
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
14-
string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O0 -g")
14+
string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra -O0 -g -fsanitize=address")
1515
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
16-
string(APPEND CMAKE_CXX_FLAGS "-O3")
16+
string(APPEND CMAKE_CXX_FLAGS "-O3 -fsanitize=address")
1717
endif()
1818

1919
# Set the folder for the executable

examples/slow_charge_rb.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ int main(int argc, char** argv) {
120120

121121
std::cout << "Creating dynamics...\n";
122122

123-
Dynamics dynamics{graph, true, SEED, 0.95};
123+
Dynamics dynamics{graph, true, SEED, 0.6};
124124
Unit n{0};
125125
{
126126
std::vector<Unit> destinationNodes;

examples/slow_charge_tl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ int main(int argc, char** argv) {
211211

212212
std::cout << "Creating dynamics...\n";
213213

214-
Dynamics dynamics{graph, true, SEED, 0.95};
214+
Dynamics dynamics{graph, true, SEED, 0.6};
215215
Unit n{0};
216216
{
217217
std::vector<Unit> destinationNodes;

examples/stalingrado.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,26 +55,22 @@ int main() {
5555

5656
// Street(StreetId, Capacity, Length, vMax, (from, to))
5757
dsm::Road::setMeanVehicleLength(8.);
58-
Street s01{1, std::make_pair(0, 1), 2281.};
59-
Street s12{7, std::make_pair(1, 2), 118.};
60-
Street s23{13, std::make_pair(2, 3), 222.};
58+
Street s01{1, std::make_pair(0, 1), 2281., 13.9, 2};
59+
Street s12{7, std::make_pair(1, 2), 118., 13.9, 2};
60+
Street s23{13, std::make_pair(2, 3), 222., 13.9, 2};
6161
Street s34{19, std::make_pair(3, 4), 651., 13.9, 2};
6262
// Viale Aldo Moro
6363
auto& tl1 = graph.addNode<TrafficLight>(1, 132);
6464
tl1.setCycle(s01.id(), dsm::Direction::ANY, {62, 0});
65-
tl1.setCapacity(1);
6665
// Via Donato Creti
6766
auto& tl2 = graph.addNode<TrafficLight>(2, 141);
6867
tl2.setCycle(s12.id(), dsm::Direction::ANY, {72, 0});
69-
tl2.setCapacity(1);
7068
// Via del Lavoro
7169
auto& tl3 = graph.addNode<TrafficLight>(3, 138);
7270
tl3.setCycle(s23.id(), dsm::Direction::ANY, {88, 0});
73-
tl3.setCapacity(1);
7471
// Viali
7572
auto& tl4 = graph.addNode<TrafficLight>(4, 131);
7673
tl4.setCycle(s34.id(), dsm::Direction::ANY, {81, 0});
77-
tl4.setCapacity(1);
7874

7975
graph.addStreets(s01, s12, s23, s34);
8076
graph.buildAdj();
@@ -86,7 +82,7 @@ int main() {
8682
dsm::Logger::info(std::format("Streets: {}", graph.nEdges()));
8783

8884
// Create the dynamics
89-
Dynamics dynamics{graph, false, 69, 0.95};
85+
Dynamics dynamics{graph, false, 69, 0.6};
9086
dynamics.setSpeedFluctuationSTD(0.2);
9187
Itinerary itinerary{4, 4};
9288
dynamics.addItinerary(itinerary);
@@ -112,7 +108,7 @@ int main() {
112108
if (progress % 300 == 0) {
113109
ofs << progress << ';' << spire.outputCounts(true) << std::endl;
114110
}
115-
dynamics.addAgents(*it / 2, 4, 0);
111+
dynamics.addAgents(*it, 4, 0);
116112
}
117113
dynamics.evolve(false);
118114
++progress;

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 = 3;
9-
static constexpr uint8_t DSM_VERSION_PATCH = 25;
9+
static constexpr uint8_t DSM_VERSION_PATCH = 26;
1010

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

src/dsm/headers/RoadDynamics.hpp

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ namespace dsm {
289289
continue;
290290
}
291291
pAgent->setSpeed(0.);
292-
const auto& destinationNode{this->m_graph.nodeSet()[pStreet->nodePair().second]};
292+
const auto& destinationNode{this->m_graph.node(pStreet->target())};
293293
if (destinationNode->isFull()) {
294294
continue;
295295
}
@@ -687,14 +687,27 @@ namespace dsm {
687687
// move the first agent of each street queue, if possible, putting it in the next node
688688
bool const bUpdateData =
689689
m_dataUpdatePeriod.has_value() && this->m_time % m_dataUpdatePeriod.value() == 0;
690-
for (const auto& [streetId, pStreet] : this->m_graph.streetSet()) {
691-
if (bUpdateData) {
692-
m_streetTails[streetId] += pStreet->nExitingAgents();
693-
}
694-
for (auto i = 0; i < pStreet->transportCapacity(); ++i) {
695-
this->m_evolveStreet(pStreet, reinsert_agents);
690+
for (auto const& [nodeId, _] : this->m_graph.nodeSet()) {
691+
for (auto const& [streetId, _] : this->m_graph.adjMatrix().getCol(nodeId, true)) {
692+
auto const& pStreet{this->m_graph.street(streetId)};
693+
// Logger::info(std::format("Evolving street {}", streetId));
694+
if (bUpdateData) {
695+
m_streetTails[streetId] += pStreet->nExitingAgents();
696+
}
697+
for (auto i = 0; i < pStreet->transportCapacity(); ++i) {
698+
this->m_evolveStreet(pStreet, reinsert_agents);
699+
}
696700
}
697701
}
702+
// for (const auto& [streetId, pStreet] : this->m_graph.streetSet()) {
703+
// if (bUpdateData) {
704+
// m_streetTails[streetId] += pStreet->nExitingAgents();
705+
// }
706+
// Logger::info(std::format("Evolving street {}", streetId));
707+
// for (auto i = 0; i < pStreet->transportCapacity(); ++i) {
708+
// this->m_evolveStreet(pStreet, reinsert_agents);
709+
// }
710+
// }
698711
// Move transport capacity agents from each node
699712
for (const auto& [nodeId, pNode] : this->m_graph.nodeSet()) {
700713
for (auto i = 0; i < pNode->transportCapacity(); ++i) {

test/Test_dynamics.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -784,41 +784,40 @@ TEST_CASE("Dynamics") {
784784
"itineraries "
785785
"and a roundabout") {
786786
Road::setMeanVehicleLength(10.);
787-
Street s1{0, std::make_pair(0, 1), 10., 10.};
788-
Street s2{1, std::make_pair(2, 1), 10., 10.};
789-
Street s3{2, std::make_pair(1, 0), 10., 10.};
790-
Street s4{3, std::make_pair(1, 2), 10., 10.};
787+
Street s1{1, std::make_pair(0, 1), 10., 10.};
788+
Street s2{7, std::make_pair(2, 1), 10., 10.};
789+
Street s3{3, std::make_pair(1, 0), 10., 10.};
790+
Street s4{5, std::make_pair(1, 2), 10., 10.};
791791
Graph graph2;
792792
graph2.addStreets(s1, s2, s3, s4);
793793
graph2.buildAdj();
794794
auto& rb = graph2.makeRoundabout(1);
795795
graph2.adjustNodeCapacities();
796796
Dynamics dynamics{graph2, false, 69};
797-
Itinerary itinerary{0, 2};
798-
Itinerary itinerary2{1, 0};
797+
Itinerary itinerary{2, 2};
798+
Itinerary itinerary2{0, 0};
799799
dynamics.addItinerary(itinerary);
800800
dynamics.addItinerary(itinerary2);
801801
dynamics.updatePaths();
802-
dynamics.addAgent(0, 0, 0);
803-
dynamics.addAgent(1, 1, 2);
802+
dynamics.addAgent(0, 2, 0);
803+
dynamics.addAgent(1, 0, 2);
804804
WHEN(
805805
"We evolve the dynamics adding an agent on the path of the agent "
806806
"with "
807807
"priority") {
808808
dynamics.evolve(false);
809-
dynamics.addAgent(2, 0, 1);
809+
dynamics.addAgent(2, 2, 1);
810810
dynamics.evolve(false);
811811
dynamics.evolve(false);
812812
THEN("The agents are trapped into the roundabout") {
813813
CHECK_EQ(dynamics.agents().at(0)->streetId().value(), 1);
814-
CHECK_EQ(dynamics.agents().at(1)->streetId().value(), 7);
814+
CHECK_EQ(dynamics.agents().at(1)->streetId().value(), 3);
815815
CHECK_EQ(dynamics.agents().at(2)->streetId().value(), 5);
816-
CHECK_EQ(rb.agents().size(), 1);
816+
CHECK(rb.agents().empty());
817817
}
818818
dynamics.evolve(false);
819819
THEN("The agent with priority leaves the roundabout") {
820820
CHECK_EQ(dynamics.agents().at(0)->streetId().value(), 5);
821-
CHECK_EQ(dynamics.agents().at(1)->streetId().value(), 3);
822821
CHECK(rb.agents().empty());
823822
}
824823
}

0 commit comments

Comments
 (0)