Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
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-2023 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>
29#include <utils/common/Named.h>
33
34
35// ===========================================================================
36// class declarations
37// ===========================================================================
38class MSNet;
39class MSLane;
40class MSRoute;
41class SUMOVehicle;
42class MSParkingArea;
43
44
45// ===========================================================================
46// class definitions
47// ===========================================================================
60 public Named, public MSMoveReminder,
61 public SUMOSAXHandler {
62
63 friend class GUIEdge; // dynamic instantiation
64
65public:
72 MSTriggeredRerouter(const std::string& id, const MSEdgeVector& edges,
73 double prob, bool off, SUMOTime timeThreshold,
74 const std::string& vTypes);
75
76
78 virtual ~MSTriggeredRerouter();
79
80 typedef std::pair<MSParkingArea*, bool> ParkingAreaVisible;
81
108
123 bool notifyEnter(SUMOTrafficObject& veh, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
124
127
136 bool notifyMove(SUMOTrafficObject& veh, double oldPos, double newPos, double newSpeed);
137
146 bool notifyLeave(SUMOTrafficObject& veh, double lastPos, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
147
149 const RerouteInterval* getCurrentReroute(SUMOTime time, SUMOVehicle& veh) const;
150
152 SUMOTime setPermissions(const SUMOTime currentTime);
153
155 const RerouteInterval* getCurrentReroute(SUMOTime time) const;
156
158 void setUserMode(bool val);
159
161 void setUserUsageProbability(double prob);
162
164 bool inUserMode() const;
165
167 double getProbability() const;
168
170 double getUserProbability() const;
171
172 // @brief return whether this moveReminder triggers parking reroute
173 bool isParkingRerouter() const {
174 return myHaveParkProbs;
175 }
176
177 static double getWeight(SUMOVehicle& veh, const std::string param, const double defaultWeight);
178
180 SUMOVehicle& veh, bool& newDestination, ConstMSEdgeVector& newRoute);
181
183 static const std::map<std::string, MSTriggeredRerouter*>& getInstances() {
184 return myInstances;
185 }
186
188 static void checkParkingRerouteConsistency();
189
190protected:
192
193
201 virtual void myStartElement(int element,
202 const SUMOSAXAttributes& attrs);
203
204
211 virtual void myEndElement(int element);
213
219 bool vehicleApplies(const SUMOVehicle& veh) const;
220
221 typedef std::map<std::string, double> ParkingParamMap_t;
222 typedef std::map<MSParkingArea*, ParkingParamMap_t, ComparatorIdLess> MSParkingAreaMap_t;
223
225 static bool addParkValues(SUMOVehicle& veh, double brakeGap, bool newDestination,
226 MSParkingArea* pa, double paOccupancy, double prob,
228 MSParkingAreaMap_t& parkAreas,
229 std::map<MSParkingArea*, ConstMSEdgeVector>& newRoutes,
230 std::map<MSParkingArea*, ConstMSEdgeVector>& parkApproaches,
231 ParkingParamMap_t& maxValues);
232
233protected:
236
238 std::vector<RerouteInterval> myIntervals;
239
242
245
246 // @brief waiting time threshold for activation
248
250 std::set<std::string> myVehicleTypes;
251
253
254
260 std::vector<MSLane*> myCurrentClosedLanes;
270
273
277
278 static std::map<std::string, MSTriggeredRerouter*> myInstances;
279
280private:
283
286
287
288};
long long int SUMOTime
Definition GUI.h:36
std::vector< const MSEdge * > ConstMSEdgeVector
Definition MSEdge.h:74
std::vector< MSEdge * > MSEdgeVector
Definition MSEdge.h:73
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:88
A lane area vehicles can halt at.
Reroutes vehicles passing an edge.
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.
RandomDistributor< ParkingAreaVisible > myCurrentParkProb
new destinations with probabilities
RandomDistributor< ConstMSRoutePtr > myCurrentRouteProb
new routes with probabilities
double getUserProbability() const
Returns the rerouting probability given by the user.
static MSParkingArea * rerouteParkingArea(const MSTriggeredRerouter::RerouteInterval *rerouteDef, SUMOVehicle &veh, bool &newDestination, ConstMSEdgeVector &newRoute)
std::vector< MSLane * > myCurrentClosedLanes
List of closed lanes.
bool myHaveParkProbs
whether this rerouter has loaded parkingReroute definitions
virtual void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
void setUserUsageProbability(double prob)
Sets the probability with which a vehicle is rerouted given by the user.
SVCPermissions myCurrentPermissions
List of permissions for closed edges.
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.
const RerouteInterval * getCurrentReroute(SUMOTime time, SUMOVehicle &veh) const
Returns the rerouting definition valid for the given time and vehicle, 0 if none.
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)
MSEdgeVector myCurrentClosed
List of closed edges.
static void checkParkingRerouteConsistency()
issues warning for incomplete parkingReroute relationships
RandomDistributor< MSEdge * > myCurrentEdgeProb
new destinations with probabilities
static std::map< std::string, MSTriggeredRerouter * > myInstances
bool vehicleApplies(const SUMOVehicle &veh) const
Checks whether the detector measures vehicles of the given type.
SUMOTime myCurrentIntervalBegin
The first and the last time steps of the interval.
static const std::map< std::string, MSTriggeredRerouter * > & getInstances()
return all rerouter instances
bool myAmInUserMode
Information whether the current rerouting probability is the user-given.
const MSEdgeVector myEdges
edges where vehicles are notified
MSTriggeredRerouter & operator=(const MSTriggeredRerouter &)
Invalidated assignment operator.
static MSEdge mySpecialDest_keepDestination
special destination values
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
Represents a generic random distribution.
Encapsulated SAX-Attributes.
SAX-handler base for SUMO-files.
Representation of a vehicle, person, or container.
Representation of a vehicle.
Definition SUMOVehicle.h:62
SUMOTime begin
The begin time these definitions are valid.
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 to use.
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.
long long id
unique ID for this interval
SVCPermissions permissions
The permissions to use.
MSEdgeVector closed
The list of closed edges.
std::vector< MSLane * > closedLanes
The list of closed lanes.