Eclipse SUMO - Simulation of Urban MObility
MSInsertionControl.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // Inserts vehicles into the network when their departure time is reached
19 /****************************************************************************/
20 #ifndef MSInsertionControl_h
21 #define MSInsertionControl_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #include <config.h>
28 
29 #include <vector>
30 #include <map>
31 #include <string>
32 #include "MSNet.h"
33 #include "MSVehicleContainer.h"
34 
35 
36 // ===========================================================================
37 // class declarations
38 // ===========================================================================
39 class MSVehicle;
40 class MSVehicleControl;
42 
43 
44 // ===========================================================================
45 // class definitions
46 // ===========================================================================
63 public:
71  MSInsertionControl(MSVehicleControl& vc, SUMOTime maxDepartDelay, bool checkEdgesOnce, int maxVehicleNumber, SUMOTime randomDepartOffset);
72 
73 
76 
77 
94  int emitVehicles(SUMOTime time);
95 
96 
103  void add(SUMOVehicle* veh);
104 
105 
112  bool addFlow(SUMOVehicleParameter* const pars, int index = -1);
113 
114 
122  int getWaitingVehicleNo() const;
123 
124 
129  int getPendingFlowCount() const;
130 
132  void alreadyDeparted(SUMOVehicle* veh);
133 
135  void descheduleDeparture(const SUMOVehicle* veh);
136 
137 
139  void clearPendingVehicles(const std::string& route);
140 
141 
146  void determineCandidates(SUMOTime time);
147 
149  int getPendingEmits(const MSLane* lane);
150 
152 
155 
158  void saveState(OutputDevice& out);
159 
161  std::mt19937* getFlowRNG() {
162  return &myFlowRNG;
163  }
164 
165 private:
180  int tryInsert(SUMOTime time, SUMOVehicle* veh,
181  MSVehicleContainer::VehicleVector& refusedEmits);
182 
183 
189  void checkCandidates(SUMOTime time, const bool preCheck);
190 
191 
192 
193 private:
196 
199 
202 
204  std::set<SUMOVehicle*> myEmitCandidates;
205 
207  std::set<const SUMOVehicle*> myAbortedEmits;
208 
212  struct Flow {
216  int index;
217  };
218 
220  std::vector<Flow> myFlows;
221 
223  std::set<std::string> myFlowIDs;
224 
227 
230 
233 
236 
238  std::map<const MSLane*, int> myPendingEmitsForLane;
239 
242 
243 private:
246 
249 
251  std::mt19937 myFlowRNG;
252 
253 };
254 
255 
256 #endif
257 
258 /****************************************************************************/
259 
std::map< const MSLane *, int > myPendingEmitsForLane
the number of pending emits for each edge in the current time step
void adaptIntermodalRouter(MSNet::MSIntermodalRouter &router) const
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:80
long long int SUMOTime
Definition: SUMOTime.h:35
void clearPendingVehicles(const std::string &route)
clears out all pending vehicles from a route, "" for all routes
void checkCandidates(SUMOTime time, const bool preCheck)
Adds all vehicles that should have been emitted earlier to the refuse container.
Definition of vehicle flow with the current index for vehicle numbering.
MSVehicleContainer myAllVeh
All loaded vehicles sorted by their departure time.
~MSInsertionControl()
Destructor.
std::vector< SUMOVehicle * > VehicleVector
definition of a list of vehicles which have the same departure time
bool addFlow(SUMOVehicleParameter *const pars, int index=-1)
Adds parameter for a vehicle flow for departure.
Representation of a vehicle.
Definition: SUMOVehicle.h:61
int emitVehicles(SUMOTime time)
Emits vehicles that want to depart at the given time.
MSVehicleContainer::VehicleVector myPendingEmits
Buffers for vehicles that could not be inserted.
SUMOTime myMaxRandomDepartOffset
The maximum random offset to be added to vehicles departure times (non-negative)
int tryInsert(SUMOTime time, SUMOVehicle *veh, MSVehicleContainer::VehicleVector &refusedEmits)
Tries to emit the vehicle.
bool myEagerInsertionCheck
Whether an edge on which a vehicle could not depart should be ignored in the same step...
SUMOTime myMaxDepartDelay
The maximum waiting time; vehicles waiting longer are deleted (-1: no deletion)
std::set< SUMOVehicle * > myEmitCandidates
Buffer for vehicles that may be inserted in the current step.
SUMOTime myPendingEmitsUpdateTime
Last time at which pending emits for each edge where counted.
Inserts vehicles into the network when their departure time is reached.
std::vector< Flow > myFlows
Container for periodical vehicle parameters.
void alreadyDeparted(SUMOVehicle *veh)
stops trying to emit the given vehicle (because it already departed)
std::mt19937 myFlowRNG
A random number generator for probabilistic flows.
int myMaxVehicleNumber
Storage for maximum vehicle number.
Structure representing possible vehicle parameter.
int getWaitingVehicleNo() const
Returns the number of waiting vehicles.
int getPendingFlowCount() const
Returns the number of flows that are still active.
MSVehicleControl & myVehicleControl
The assigned vehicle control (needed for vehicle re-insertion and deletion)
MSInsertionControl(MSVehicleControl &vc, SUMOTime maxDepartDelay, bool checkEdgesOnce, int maxVehicleNumber, SUMOTime randomDepartOffset)
Constructor.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:64
The class responsible for building and deletion of vehicles.
int index
the running index
SUMOVehicleParameter * pars
The parameters.
SUMOTime computeRandomDepartOffset() const
compute (optional) random offset to the departure time
void saveState(OutputDevice &out)
Saves the current state into the given stream.
MSInsertionControl & operator=(const MSInsertionControl &)
Invalidated assignment operator.
std::mt19937 * getFlowRNG()
retrieve internal RNG
void add(SUMOVehicle *veh)
Adds a single vehicle for departure.
Representation of a lane in the micro simulation.
Definition: MSLane.h:83
std::set< const SUMOVehicle * > myAbortedEmits
Set of vehicles which shall not be inserted anymore.
std::set< std::string > myFlowIDs
Cache for periodical vehicle ids for quicker checking.
void descheduleDeparture(const SUMOVehicle *veh)
stops trying to emit the given vehicle (and delete it)
int getPendingEmits(const MSLane *lane)
return the number of pending emits for the given lane
void determineCandidates(SUMOTime time)
Checks for all vehicles whether they can be emitted.