From 3d7164f997e793287360bc530ec01243613e4c27 Mon Sep 17 00:00:00 2001 From: Romain BERNARD <romain.bernard@uca.fr> Date: Tue, 17 Sep 2024 18:42:02 +0200 Subject: [PATCH] if request was unfulfilled, emplace its ID for future reference to insert it via SAEV-only best insertion in the last step of algorithm --- .../Heuristics/MultimodalModularHeuristic.cpp | 10 +++++++++- .../Multimodal/Heuristics/MultimodalModularHeuristic.h | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp b/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp index c250981..463d697 100644 --- a/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp +++ b/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.cpp @@ -122,7 +122,11 @@ MultimodalModularHeuristic::insertBestTransitAccessInRoute(const std::vector<Req if(accessSubRequestsList.empty()) { //If no valid subrequest was given, still create a fake subrequest and mention failure in the appropriate vector DEBUG_MSG("UNFULFILLED SUBREQUEST"); updateSubRequest(baseRequestId, (*_requestsVect)[baseRequestId], isEntry); - updateUnfulfilledSubrequest(baseRequestId, isEntry, true); + updateUnfulfilledSubrequest(baseRequestId, isEntry, true); //mark failures for debug/statistics + if(!isEntry) { //Exit subrequest : remove entry subrequest and add baseRequest to the "unfulfilled list" + _route->removeRequestWithPropagation(baseRequestId, true); + } + emplaceDARPRequest(baseRequestId); } else { //If no active vehicle insertion worked, do best insertion on a new vehicle with the first subrequest (supposedly it's the most advantageous) DEBUG_MSG("CREATE VEHICLE"); @@ -260,3 +264,7 @@ const std::vector<Request> &MultimodalModularHeuristic::getEntrySubRequests() co const std::vector<Request> &MultimodalModularHeuristic::getExitSubRequests() const { return _exitSubRequests; } + +void MultimodalModularHeuristic::emplaceDARPRequest(size_t baseRequestId) { + _darpRequestList.emplace_back(baseRequestId); +} diff --git a/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.h b/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.h index 7dfbe95..0437dcd 100644 --- a/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.h +++ b/src/algorithm/Multimodal/Heuristics/MultimodalModularHeuristic.h @@ -53,6 +53,13 @@ private: */ std::vector<bool> _unfulfilledTransitExit; + /** + * Vector containing every base request (referenced via its _requestsVect index) that needs to be fulfilled in SAEV-only DARP \n + * \n + * This includes non-multimodal requests and requests that couldn't be fulfilled in the entry/exit step of the multimodal procedure + */ + std::vector<size_t> _darpRequestList; + //Add friend test classes to test inner workings without making the whole API public FRIEND_TEST(MultimodalInsertionHeuristicDebug, DebugBaseInstance); FRIEND_TEST(MultimodalInsertionHeuristicDebug, DebugInstanceAlain); @@ -203,6 +210,8 @@ protected: void updateUnfulfilledSubrequest(size_t baseRequestId, bool isEntry, bool value); bool isEntryFulfilled(size_t baseRequestId); + + void emplaceDARPRequest(size_t baseRequestId); }; -- GitLab