From bfc0dbbd598b22148a0396490e4f438cbf878134 Mon Sep 17 00:00:00 2001
From: Romain BERNARD <romain.bernard@uca.fr>
Date: Thu, 19 Sep 2024 17:16:56 +0200
Subject: [PATCH] account for the case where both departure and arrival TWs are
 given

---
 src/instance/requests/Request.cpp | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/instance/requests/Request.cpp b/src/instance/requests/Request.cpp
index 20effe1..57ca2cc 100644
--- a/src/instance/requests/Request.cpp
+++ b/src/instance/requests/Request.cpp
@@ -60,15 +60,20 @@ Request::Request(const DATRow& currentRow, const Graph& graph) {
         std::from_chars(currentRow[5].data(), currentRow[5].data() + currentRow[5].size(), _weight);
     }
 
-
-    if(!setDepartureTW) {
+    //If set arrival but not departure, deduce it from delta
+    if(!setDepartureTW && setArrivalTW) {
         _departureTW.min = _arrivalTW.min - _deltaTime;
         _departureTW.max = _arrivalTW.max - graph.getShortestSAEVPath(_originNodeIndex, _destinationNodeIndex);
-    }
-    if(!setArrivalTW) {
+    //If set departure but not arrival, deduce it from delta
+    } else if(setDepartureTW && !setArrivalTW) {
         _arrivalTW.min = _departureTW.min + graph.getShortestSAEVPath(_originNodeIndex, _destinationNodeIndex);
         _arrivalTW.max = _departureTW.max + _deltaTime;
+    //If both TWs are set, override delta which might not be set
+    } else if(setDepartureTW && setArrivalTW) {
+        _deltaTime = _arrivalTW.max - _departureTW.max;
     }
+
+    //Check TWs at the end
     if(_departureTW.min > _departureTW.max || _arrivalTW.min > _arrivalTW.max)
         throw TimeWindow::invalid_time_window_exception();
 }
@@ -82,7 +87,7 @@ std::vector<Request> Request::getRequestsFromFile(const std::string& datFilePath
 
     std::ifstream infile(datFilePath);
     assertm(!infile.fail(), "Failed to open the given file");
-    DATRow currentRow = DATRow(',');
+    DATRow currentRow(',');
 
     //-- Read params
     infile >> currentRow;
-- 
GitLab