Eclipse SUMO - Simulation of Urban MObility
MSTriggeredRerouter.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
21 // Reroutes vehicles passing an edge
22 /****************************************************************************/
23 #pragma once
24 #include <config.h>
25 
26 #include <string>
27 #include <vector>
28 #include <utils/common/Command.h>
29 #include <utils/common/Named.h>
33 
34 
35 // ===========================================================================
36 // class declarations
37 // ===========================================================================
38 class MSNet;
39 class MSLane;
40 class MSRoute;
41 class SUMOVehicle;
42 class MSParkingArea;
43 
44 
45 // ===========================================================================
46 // class definitions
47 // ===========================================================================
60  public Named, public MSMoveReminder,
61  public SUMOSAXHandler {
62 
63  friend class GUIEdge; // dynamic instantiation
64 
65 public:
72  MSTriggeredRerouter(const std::string& id, const MSEdgeVector& edges,
73  double prob, bool off, bool optional, SUMOTime timeThreshold,
74  const std::string& vTypes, const Position& pos);
75 
76 
78  virtual ~MSTriggeredRerouter();
79 
80  typedef std::pair<MSParkingArea*, bool> ParkingAreaVisible;
81 
86  struct RerouteInterval {
88  long long int id;
96  std::vector<MSLane*> closedLanes;
108  bool isVia = false;
109  };
110 
125  bool notifyEnter(SUMOTrafficObject& veh, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
126 
129 
138  bool notifyMove(SUMOTrafficObject& veh, double oldPos, double newPos, double newSpeed);
139 
148  bool notifyLeave(SUMOTrafficObject& veh, double lastPos, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
149 
151 
154 
156  SUMOTime setPermissions(const SUMOTime currentTime);
157 
159  const RerouteInterval* getCurrentReroute(SUMOTime time) const;
160 
162  void setUserMode(bool val);
163 
165  void setUserUsageProbability(double prob);
166 
168  bool inUserMode() const;
169 
171  double getProbability() const;
172 
174  double getUserProbability() const;
175 
176  // @brief return whether this moveReminder triggers parking reroute
177  bool isParkingRerouter() const {
178  return myHaveParkProbs;
179  }
180 
182  return myPosition;
183  }
184 
185  static double getWeight(SUMOVehicle& veh, const std::string param, const double defaultWeight);
186 
188  SUMOVehicle& veh, bool& newDestination, ConstMSEdgeVector& newRoute);
189 
191  static const std::map<std::string, MSTriggeredRerouter*>& getInstances() {
192  return myInstances;
193  }
194 
196  static void checkParkingRerouteConsistency();
197 
198 protected:
200 
201 
209  virtual void myStartElement(int element,
210  const SUMOSAXAttributes& attrs);
211 
212 
219  virtual void myEndElement(int element);
221 
227  bool applies(const SUMOTrafficObject& obj) const;
228 
229  static bool affected(const std::set<SUMOTrafficObject::NumericalID>& edgeIndices, const MSEdgeVector& closed);
230 
231  typedef std::map<std::string, double> ParkingParamMap_t;
232  typedef std::map<MSParkingArea*, ParkingParamMap_t, ComparatorIdLess> MSParkingAreaMap_t;
233 
235  static bool addParkValues(SUMOVehicle& veh, double brakeGap, bool newDestination,
236  MSParkingArea* pa, double paOccupancy, double prob,
238  MSParkingAreaMap_t& parkAreas,
239  std::map<MSParkingArea*, ConstMSEdgeVector>& newRoutes,
240  std::map<MSParkingArea*, ConstMSEdgeVector>& parkApproaches,
241  ParkingParamMap_t& maxValues);
242 
243 protected:
246 
248  std::vector<RerouteInterval> myIntervals;
249 
252 
255 
258 
261 
262  // @brief waiting time threshold for activation
264 
266  std::set<std::string> myVehicleTypes;
267 
270 
273 
277 
278  static std::map<std::string, MSTriggeredRerouter*> myInstances;
279 
280 private:
283 
286 
287 
288 };
long long int SUMOTime
Definition: GUI.h:35
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:74
std::vector< MSEdge * > MSEdgeVector
Definition: MSEdge.h:73
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
A road/street connecting two junctions (gui-version)
Definition: GUIEdge.h:51
A road/street connecting two junctions.
Definition: MSEdge.h:77
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
Something on a lane to be noticed about vehicle movement.
Notification
Definition of a vehicle state.
The simulated network and simulation perfomer.
Definition: MSNet.h:89
A lane area vehicles can halt at.
Definition: MSParkingArea.h:60
Reroutes traffic objects passing an edge.
bool isParkingRerouter() const
SUMOTime setPermissions(const SUMOTime currentTime)
Sets the edge permission if there are any defined in the closingEdge.
bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Tries to reroute the vehicle.
bool notifyMove(SUMOTrafficObject &veh, double oldPos, double newPos, double newSpeed)
Triggers rerouting (once) for vehicles that are already on the edge when the rerouter activates.
bool notifyLeave(SUMOTrafficObject &veh, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Removes the reminder.
const Position & getPosition()
double getUserProbability() const
Returns the rerouting probability given by the user.
static MSParkingArea * rerouteParkingArea(const MSTriggeredRerouter::RerouteInterval *rerouteDef, SUMOVehicle &veh, bool &newDestination, ConstMSEdgeVector &newRoute)
bool myHaveParkProbs
whether this rerouter has loaded parkingReroute definitions
virtual void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
bool myAmOptional
Information whether the rerouting will only take place on request.
MSTriggeredRerouter & operator=(const MSTriggeredRerouter &)
Invalidated assignment operator.
static const std::map< std::string, MSTriggeredRerouter * > & getInstances()
return all rerouter instances
static bool affected(const std::set< SUMOTrafficObject::NumericalID > &edgeIndices, const MSEdgeVector &closed)
void setUserUsageProbability(double prob)
Sets the probability with which a vehicle is rerouted given by the user.
Position myPosition
Where are we located in the network.
static bool addParkValues(SUMOVehicle &veh, double brakeGap, bool newDestination, MSParkingArea *pa, double paOccupancy, double prob, SUMOAbstractRouter< MSEdge, SUMOVehicle > &router, MSParkingAreaMap_t &parkAreas, std::map< MSParkingArea *, ConstMSEdgeVector > &newRoutes, std::map< MSParkingArea *, ConstMSEdgeVector > &parkApproaches, ParkingParamMap_t &maxValues)
determine attributes of candiate parking area for scoring
static MSEdge mySpecialDest_terminateRoute
virtual void myEndElement(int element)
Called when a closing tag occurs.
MSTriggeredRerouter(const std::string &id, const MSEdgeVector &edges, double prob, bool off, bool optional, SUMOTime timeThreshold, const std::string &vTypes, const Position &pos)
Constructor.
bool triggerRouting(SUMOTrafficObject &veh, MSMoveReminder::Notification reason)
std::pair< MSParkingArea *, bool > ParkingAreaVisible
double myProbability
The probability and the user-given probability.
virtual ~MSTriggeredRerouter()
Destructor.
MSTriggeredRerouter(const MSTriggeredRerouter &)
Invalidated copy constructor.
bool inUserMode() const
Returns whether the user is setting the rerouting probability.
std::map< std::string, double > ParkingParamMap_t
std::set< std::string > myVehicleTypes
The vehicle types to look for (empty means all)
const RerouteInterval * getCurrentReroute(SUMOTime time, SUMOTrafficObject &obj) const
Returns the rerouting definition valid for the given time and object, nullptr if none.
static void checkParkingRerouteConsistency()
issues warning for incomplete parkingReroute relationships
static std::map< std::string, MSTriggeredRerouter * > myInstances
bool applies(const SUMOTrafficObject &obj) const
Checks whether the detector measures objects of the given type.
bool myAmInUserMode
Information whether the current rerouting probability is the user-given.
const MSEdgeVector myEdges
edges where vehicles are notified
static MSEdge mySpecialDest_keepDestination
special destination values
RerouteInterval myParsedRerouteInterval
used during loading
double getProbability() const
Returns the rerouting probability.
std::map< MSParkingArea *, ParkingParamMap_t, ComparatorIdLess > MSParkingAreaMap_t
std::vector< RerouteInterval > myIntervals
List of rerouting definition intervals.
void setUserMode(bool val)
Sets whether the process is currently steered by the user.
static double getWeight(SUMOVehicle &veh, const std::string param, const double defaultWeight)
Base class for objects which have an id.
Definition: Named.h:54
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
Encapsulated SAX-Attributes.
SAX-handler base for SUMO-files.
Representation of a vehicle, person, or container.
Representation of a vehicle.
Definition: SUMOVehicle.h:60
SUMOTime begin
The begin time these definitions are valid.
long long int id
unique ID for this interval
RandomDistributor< ConstMSRoutePtr > routeProbs
The distributions of new routes to use.
SUMOTime end
The end time these definitions are valid.
RandomDistributor< MSEdge * > edgeProbs
The distributions of new destinations or vias to use.
bool isVia
The edge probs are vias and not destinations.
MSEdgeVector closedLanesAffected
The list of edges that are affect by closed lanes.
RandomDistributor< ParkingAreaVisible > parkProbs
The distributions of new parking areas to use as destinations.
SVCPermissions permissions
The permissions to use.
MSEdgeVector closed
The list of closed edges.
std::vector< MSLane * > closedLanes
The list of closed lanes.