Skip to content
Snippets Groups Projects
Commit 2a1aa8c2 authored by Romain BERNARD's avatar Romain BERNARD
Browse files

stop using base requests vector to save subrequests generated by the algorithm

(it used to create multiple side effects wrt request pointers and how we access base/sub requests)
parent 57eed9e3
No related branches found
No related tags found
1 merge request!1Multimodal Insertion Heuristic prototype
......@@ -150,28 +150,17 @@ void SimpleModularHeuristic::setRoute(SAEVRoute *route) {
}
void SimpleModularHeuristic::updateSubRequest(size_t requestId, const Request &request, bool isEntry) {
size_t subRequestIndex = getSubrequestIndex(requestId, isEntry);
if((_requestsVect->size() - 1) < subRequestIndex) {
_requestsVect->emplace_back(request);
assertm((_requestsVect->size() - 1) == subRequestIndex,"A request seems to have been missed or doesn't have any subrequest defined");
} else {
(*_requestsVect)[subRequestIndex] = request;
}
std::vector<Request>& requestVectRef = *_requestsVect;
_route->getEntrySubRequestOrigin(requestId).setRequest(&requestVectRef[subRequestIndex]);
_route->getEntrySubRequestDestination(requestId).setRequest(&requestVectRef[subRequestIndex]);
}
size_t SimpleModularHeuristic::getSubrequestIndex(size_t requestId, bool isEntry) const {
if(isEntry)
return _nbBaseRquests + requestId;
_entrySubRequests[requestId] = request;
else
return _nbBaseRquests*2 + requestId;
_exitSubRequests[requestId] = request;
_route->getEntrySubRequestOrigin(requestId).setRequest(&getSubrequest(requestId, isEntry));
_route->getEntrySubRequestDestination(requestId).setRequest(&getSubrequest(requestId, isEntry));
}
const Request& SimpleModularHeuristic::getSubrequest(size_t requestId, bool isEntry) {
return (*_requestsVect)[getSubrequestIndex(requestId, isEntry)];
return isEntry ? _entrySubRequests[requestId] : _exitSubRequests[requestId];
}
double SimpleModularHeuristic::getTransitExitScore(const Request &baseRequest, const TransitAccess &exitData) const {
......@@ -263,3 +252,11 @@ const std::vector<bool> &SimpleModularHeuristic::getUnfulfilledTransitEntry() co
bool SimpleModularHeuristic::isEntryFulfilled(size_t baseRequestId) {
return !_unfulfilledTransitEntry[baseRequestId];
}
const std::vector<Request> &SimpleModularHeuristic::getEntrySubRequests() const {
return _entrySubRequests;
}
const std::vector<Request> &SimpleModularHeuristic::getExitSubRequests() const {
return _exitSubRequests;
}
......@@ -24,10 +24,14 @@
class SimpleModularHeuristic {
private:
//Exterior members
const Graph* _graph{nullptr};
SAEVRoute* _route{nullptr};
std::vector<Request>* _requestsVect{nullptr};
size_t _nbBaseRquests;
const std::vector<Request>* _requestsVect{nullptr};
SAEVRoute* _route{nullptr}; //_route is a pointer here to decorrelate the route from the algorithm and facilitate using multiple modules on the same route
std::vector<Request> _entrySubRequests;
std::vector<Request> _exitSubRequests;
std::vector<bool> _unfulfilledTransitEntry;
std::vector<bool> _unfulfilledTransitExit;
......@@ -37,18 +41,21 @@ private:
//Public interface to interact with the modular heuristic
public:
SimpleModularHeuristic(const Graph *graph, SAEVRoute *route, std::vector<Request>* requestsVect) : _graph(graph), _route(route),
_requestsVect(requestsVect), _nbBaseRquests(requestsVect->size()), _unfulfilledTransitEntry(_nbBaseRquests), _unfulfilledTransitExit(_nbBaseRquests) {}
SimpleModularHeuristic(const Graph *graph, SAEVRoute *route, std::vector<Request> const* requestsVect) : _graph(graph), _requestsVect(requestsVect),
_route(route), _entrySubRequests(requestsVect->size()), _exitSubRequests(requestsVect->size()),
_unfulfilledTransitEntry(requestsVect->size()), _unfulfilledTransitExit(requestsVect->size()) {}
void multimodalRequestsInsertion(const std::vector<Request>& requestsToInsert);
[[nodiscard]] size_t getNbBaseRquests() const {
return _nbBaseRquests;
return _requestsVect->size();
}
const std::vector<bool> &getUnfulfilledTransitExit() const;
[[nodiscard]] const std::vector<Request> &getEntrySubRequests() const;
[[nodiscard]] const std::vector<Request> &getExitSubRequests() const;
const std::vector<bool> &getUnfulfilledTransitEntry() const;
[[nodiscard]] const std::vector<bool> &getUnfulfilledTransitEntry() const;
[[nodiscard]] const std::vector<bool> &getUnfulfilledTransitExit() const;
//Define useful struct to order transit access objects
struct ScoredTransitAccess : public TransitAccess {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment