diff --git a/src/instance/requests/Request.cpp b/src/instance/requests/Request.cpp index 20effe172c4a99c843510948c1ca35ea3d415537..57ca2cc86465383c7e0393970b548bd22e263ce6 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;