Eclipse SUMO - Simulation of Urban MObility
MSVehicleControl.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 /****************************************************************************/
20 // The class responsible for building and deletion of vehicles
21 /****************************************************************************/
22 #pragma once
23 #include <config.h>
24 
25 #include <cmath>
26 #include <string>
27 #include <map>
28 #include <set>
29 #ifdef HAVE_FOX
32 #endif
34 #include <utils/common/SUMOTime.h>
36 #include <microsim/MSRouterDefs.h>
37 
38 
39 // ===========================================================================
40 // class declarations
41 // ===========================================================================
42 class SUMOVehicle;
44 class MSBaseVehicle;
45 class MSVehicle;
46 class MSRoute;
47 class MSVehicleType;
48 class OutputDevice;
49 class MSEdge;
50 
51 
52 // ===========================================================================
53 // class definitions
54 // ===========================================================================
71 public:
73  typedef std::map<std::string, SUMOVehicle*>::const_iterator constVehIt;
74 
75 public:
78 
79 
81  virtual ~MSVehicleControl();
82 
85 
99  MSVehicleType* type,
100  const bool ignoreStopErrors, const bool fromRouteFile = true,
101  bool addRouteStops = true);
103 
104 
105 
108 
122  virtual bool addVehicle(const std::string& id, SUMOVehicle* v);
123 
124 
133  SUMOVehicle* getVehicle(const std::string& id) const;
134 
135 
142  virtual void deleteVehicle(SUMOVehicle* v, bool discard = false);
143 
145  myLoadedVehNo++;
146  myEndedVehNo++;
147  myDiscarded++;
148  }
149 
161  void scheduleVehicleRemoval(SUMOVehicle* veh, bool checkDuplicate = false);
162 
163 
175  void removePending();
176 
177 
182  return myVehicleDict.begin();
183  }
184 
185 
190  return myVehicleDict.end();
191  }
193 
194 
196  void handleTriggeredDepart(SUMOVehicle* v, bool add);
197 
200 
208  void vehicleDeparted(const SUMOVehicle& v);
210 
211 
212 
215 
219  int getLoadedVehicleNo() const {
220  return myLoadedVehNo;
221  }
222 
223 
227  virtual int getHaltingVehicleNo() const;
228 
230  virtual std::pair<double, double> getVehicleMeanSpeeds() const;
231  double getVehicleMeanSpeed() const {
232  return getVehicleMeanSpeeds().first;
233  }
235  return getVehicleMeanSpeeds().second;
236  }
237 
241  int getEndedVehicleNo() const {
242  return myEndedVehNo;
243  }
244 
248  int getArrivedVehicleNo() const {
249  return myEndedVehNo - myDiscarded;
250  }
251 
255  int getDiscardedVehicleNo() const {
256  return myDiscarded;
257  }
258 
259 
263  int getRunningVehicleNo() const {
264  return myRunningVehNo;
265  }
266 
267 
271  int getDepartedVehicleNo() const {
273  }
274 
275 
283  int getQuota(double frac = -1, int loaded = -1) const;
284 
285 
290  int getActiveVehicleCount() const {
292  }
293 
297  }
298 
299 
301  int getCollisionCount() const {
302  return myCollisions;
303  }
304 
307  return myTeleportsCollision;
308  }
309 
311  int getTeleportsJam() const {
312  return myTeleportsJam;
313  }
314 
316  int getTeleportsYield() const {
317  return myTeleportsYield;
318  }
319 
321  int getTeleportsWrongLane() const {
322  return myTeleportsWrongLane;
323  }
324 
326  int getTeleportCount() const;
327 
329  int getEmergencyStops() const {
330  return myEmergencyStops;
331  }
332 
336  }
337 
340  return myStoppedVehicles;
341  }
342 
346  double getTotalDepartureDelay() const {
347  return myTotalDepartureDelay;
348  }
349 
350 
354  double getTotalTravelTime() const {
355  return myTotalTravelTime;
356  }
358 
359 
360 
363 
376  bool addVType(MSVehicleType* vehType);
377 
378  /*
379  * @param[in] vehType The vehicle type to remove
380  * @return Whether the vehicle type could be removed
381  */
382  void removeVType(const MSVehicleType* vehType);
383 
384 
398  bool addVTypeDistribution(const std::string& id, RandomDistributor<MSVehicleType*>* vehTypeDistribution);
399 
400 
408  bool hasVType(const std::string& id) const;
409 
410 
418  bool hasVTypeDistribution(const std::string& id) const;
419 
420 
425  MSVehicleType* getVType(const std::string& id = DEFAULT_VTYPE_ID, SumoRNG* rng = nullptr, bool readOnly = false);
426 
427 
431  void insertVTypeIDs(std::vector<std::string>& into) const;
432 
433 
437  const std::set<std::string> getVTypeDistributionMembership(const std::string& id) const;
438 
440  const RandomDistributor<MSVehicleType*>* getVTypeDistribution(const std::string& typeDistID) const;
441 
443  const std::vector<MSVehicleType*> getPedestrianTypes(void) const;
444 
446 
451  }
452 
457  }
458 
460  void registerCollision(bool teleport) {
461  myCollisions++;
462  if (teleport) {
464  }
465  }
466 
469  myTeleportsJam++;
470  }
471 
475  }
476 
480  }
481 
485  }
486 
490  }
491 
495  }
496 
500  }
501 
504 
507  void setState(int runningVehNo, int loadedVehNo, int endedVehNo, double totalDepartureDelay, double totalTravelTime);
508 
511  void saveState(OutputDevice& out);
512 
514  void clearState(const bool reinit);
516 
518  void discountStateRemoved(int n) {
519  myRunningVehNo -= n;
520  myDiscarded += n;
521  myEndedVehNo += n;
522  }
523 
524 
527  void abortWaiting();
528 
530  double getMaxSpeedFactor() const {
531  return myMaxSpeedFactor;
532  }
533 
535  double getMinDeceleration() const {
536  return myMinDeceleration;
537  }
538 
540  double getMinDecelerationRail() const {
541  return myMinDecelerationRail;
542  }
543 
544  void adaptIntermodalRouter(MSTransportableRouter& router) const;
545 
547  void setScale(double scale) {
548  myScale = scale;
549  }
550 
552  double getScale() const {
553  return myScale;
554  }
555 
556 private:
558  void initDefaultTypes();
559 
566  bool checkVType(const std::string& id);
567 
569  bool isPendingRemoval(SUMOVehicle* veh);
570 
571 protected:
572  void initVehicle(MSBaseVehicle* built, const bool ignoreStopErrors, bool addRouteStops);
573 
574 private:
577 
580 
583 
586 
589 
592 
595 
598 
601 
604 
607 
610 
614 
615 
618 
621 
625 
626 
627 protected:
630 
632  typedef std::map< std::string, SUMOVehicle* > VehicleDictType;
636 
637 
638 private:
641 
643  typedef std::map< std::string, MSVehicleType* > VTypeDictType;
646 
648  typedef std::map< std::string, RandomDistributor<MSVehicleType*>* > VTypeDistDictType;
651 
653  std::map<std::string, std::set<std::string>> myVTypeToDist;
654 
656  std::set<std::string> myReplaceableDefaultVTypes;
657 
660 
662  double myScale;
663 
666 
671 
673  std::vector<SUMOVehicle*> myPTVehicles;
674 
676 #ifdef HAVE_FOX
678 #else
679  std::vector<SUMOVehicle*> myPendingRemovals;
680 #endif
681 
682 private:
684  MSVehicleControl(const MSVehicleControl& s) = delete;
685 
688 
689 
690 };
std::shared_ptr< const MSRoute > ConstMSRoutePtr
Definition: Route.h:31
const std::string DEFAULT_VTYPE_ID
The base class for microscopic and mesoscopic vehicles.
Definition: MSBaseVehicle.h:55
A road/street connecting two junctions.
Definition: MSEdge.h:77
The class responsible for building and deletion of vehicles.
void adaptIntermodalRouter(MSTransportableRouter &router) const
virtual SUMOVehicle * buildVehicle(SUMOVehicleParameter *defs, ConstMSRoutePtr route, MSVehicleType *type, const bool ignoreStopErrors, const bool fromRouteFile=true, bool addRouteStops=true)
Builds a vehicle, increases the number of built vehicles.
int myTeleportsCollision
The number of teleports due to collision.
double myScale
The scaling factor (especially for inc-dua)
bool hasVType(const std::string &id) const
Asks for existence of a vehicle type.
std::map< std::string, SUMOVehicle * >::const_iterator constVehIt
Definition of the internal vehicles map iterator.
const std::vector< MSVehicleType * > getPedestrianTypes(void) const
Return all pedestrian vehicle types.
std::map< std::string, SUMOVehicle * > VehicleDictType
Vehicle dictionary type.
bool addVType(MSVehicleType *vehType)
Adds a vehicle type.
void initVehicle(MSBaseVehicle *built, const bool ignoreStopErrors, bool addRouteStops)
void setState(int runningVehNo, int loadedVehNo, int endedVehNo, double totalDepartureDelay, double totalTravelTime)
Sets the current state variables as loaded from the stream.
int getRunningVehicleNo() const
Returns the number of build and inserted, but not yet deleted vehicles.
double getScale() const
sets the demand scaling factor
void registerEmergencyStop()
register emergency stop
void removePending()
Removes a vehicle after it has ended.
std::set< std::string > myReplaceableDefaultVTypes
the default vehicle types which may still be replaced
double getTotalTravelTime() const
Returns the total travel time.
void setScale(double scale)
sets the demand scaling factor
std::vector< SUMOVehicle * > myPendingRemovals
List of vehicles which are going to be removed.
int getTriggeredVehicleCount() const
return the number of vehicles that are waiting for a transportable or a join
int myLoadedVehNo
The number of build vehicles.
MSVehicleControl & operator=(const MSVehicleControl &s)=delete
invalidated assignment operator
void registerTeleportYield()
register one non-collision-related teleport
void discountStateRemoved(int n)
discount vehicles that were removed during state loading
bool hasVTypeDistribution(const std::string &id) const
Asks for a vehicle type distribution.
void vehicleDeparted(const SUMOVehicle &v)
Informs this control about a vehicle's departure.
int getLoadedVehicleNo() const
Returns the number of build vehicles.
double getMinDeceleration() const
return the minimum deceleration capability for all road vehicles that ever entered the network
virtual void deleteVehicle(SUMOVehicle *v, bool discard=false)
Deletes the vehicle.
virtual bool addVehicle(const std::string &id, SUMOVehicle *v)
Tries to insert the vehicle into the internal vehicle container.
void initDefaultTypes()
create default types
int getCollisionCount() const
return the number of collisions
int getTeleportsWrongLane() const
return the number of teleports due to vehicles stuck on the wrong lane
int myTeleportsYield
The number of teleports due to vehicles stuck on a minor road.
int myTeleportsWrongLane
The number of teleports due to vehicles stuck on the wrong lane.
int getStoppedVehiclesCount() const
return the number of vehicles that are currently stopped
double getVehicleMeanSpeed() const
SUMOVehicle * getVehicle(const std::string &id) const
Returns the vehicle with the given id.
int getTeleportsYield() const
return the number of teleports due to vehicles stuck on a minor road
void clearState(const bool reinit)
Remove all vehicles before quick-loading state.
int getEmergencyBrakingCount() const
return the number of emergency stops
std::map< std::string, std::set< std::string > > myVTypeToDist
Inverse lookup from vehicle type to distributions it is a member of.
int getEmergencyStops() const
return the number of emergency stops
double myMinDeceleration
The minimum deceleration capability for all road vehicles in the network.
void registerTeleportJam()
register one non-collision-related teleport
void registerStopEnded()
register emergency stop
double getTotalDepartureDelay() const
Returns the total departure delay.
void registerEmergencyBraking()
register emergency stop
bool isPendingRemoval(SUMOVehicle *veh)
whether the given vehicle is scheduled for removal
double myMinDecelerationRail
The minimum deceleration capability for all rail vehicles in the network.
virtual ~MSVehicleControl()
Destructor.
void removeVType(const MSVehicleType *vehType)
int myEmergencyBrakingCount
The number of emergency stops.
int myStoppedVehicles
The number of stopped vehicles.
void registerOneWaiting()
increases the count of vehicles waiting for a transport to allow recognition of person / container re...
void unregisterOneWaiting()
decreases the count of vehicles waiting for a transport to allow recognition of person / container re...
int myWaitingForTransportable
the number of vehicles waiting for persons or containers contained in myWaiting which can only contin...
std::map< std::string, MSVehicleType * > VTypeDictType
Vehicle type dictionary type.
virtual std::pair< double, double > getVehicleMeanSpeeds() const
get current absolute and relative mean vehicle speed in the network
bool checkVType(const std::string &id)
Checks whether the vehicle type (distribution) may be added.
int myCollisions
The number of collisions.
int myEmergencyStops
The number of emergency stops.
int getQuota(double frac=-1, int loaded=-1) const
Returns the number of instances of the current vehicle that shall be emitted considering that "frac" ...
MSVehicleControl()
Constructor.
double myMaxSpeedFactor
The maximum speed factor for all vehicles in the network.
int myDiscarded
The number of vehicles which were discarded while loading.
int getDepartedVehicleNo() const
Returns the number of inserted vehicles.
int getArrivedVehicleNo() const
Returns the number of arrived vehicles.
int myEndedVehNo
The number of removed vehicles.
MSVehicleType * getVType(const std::string &id=DEFAULT_VTYPE_ID, SumoRNG *rng=nullptr, bool readOnly=false)
Returns the named vehicle type or a sample from the named distribution.
MSVehicleControl(const MSVehicleControl &s)=delete
invalidated copy constructor
bool addVTypeDistribution(const std::string &id, RandomDistributor< MSVehicleType * > *vehTypeDistribution)
Adds a vehicle type distribution.
int myTeleportsJam
The number of teleports due to jam.
int getActiveVehicleCount() const
Returns the number of build vehicles that have not been removed or need to wait for a passenger or a ...
void insertVTypeIDs(std::vector< std::string > &into) const
Inserts ids of all known vehicle types and vehicle type distributions to the given vector.
int getTeleportsJam() const
return the number of teleports due to jamming
double myTotalDepartureDelay
The aggregated time vehicles had to wait for departure (in seconds)
int getEndedVehicleNo() const
Returns the number of removed vehicles.
VTypeDictType myVTypeDict
Dictionary of vehicle types.
double getMaxSpeedFactor() const
return the maximum speed factor for all vehicles that ever entered the network
double getMinDecelerationRail() const
return the minimum deceleration capability for all ral vehicles that ever entered the network
const RandomDistributor< MSVehicleType * > * getVTypeDistribution(const std::string &typeDistID) const
return the vehicle type distribution with the given id
virtual int getHaltingVehicleNo() const
Returns the number of halting vehicles.
int getTeleportsCollisions() const
return the number of collisions
void scheduleVehicleRemoval(SUMOVehicle *veh, bool checkDuplicate=false)
Removes a vehicle after it has ended.
constVehIt loadedVehBegin() const
Returns the begin of the internal vehicle map.
double myTotalTravelTime
The aggregated time vehicles needed to aacomplish their route (in seconds)
std::vector< SUMOVehicle * > myPTVehicles
List of vehicles which belong to public transport.
int getTeleportCount() const
return the number of teleports (including collisions)
VTypeDistDictType myVTypeDistDict
A distribution of vehicle types (probability->vehicle type)
std::map< std::string, RandomDistributor< MSVehicleType * > * > VTypeDistDictType
Vehicle type distribution dictionary type.
void handleTriggeredDepart(SUMOVehicle *v, bool add)
register / unregister depart-triggered vehicles with edges
void abortWaiting()
informes about all waiting vehicles (deletion in destructor)
void saveState(OutputDevice &out)
Saves the current state into the given stream.
double getVehicleMeanSpeedRelative() const
void registerTeleportWrongLane()
register one non-collision-related teleport
constVehIt loadedVehEnd() const
Returns the end of the internal vehicle map.
const std::set< std::string > getVTypeDistributionMembership(const std::string &id) const
Return the distribution IDs the vehicle type is a member of.
int myRunningVehNo
The number of vehicles within the network (build and inserted but not removed)
void registerCollision(bool teleport)
registers one collision-related teleport
int getDiscardedVehicleNo() const
Returns the number of discarded vehicles.
void registerStopStarted()
register emergency stop
VehicleDictType myVehicleDict
Dictionary of vehicles.
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:77
The car-following model and parameter.
Definition: MSVehicleType.h:63
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
Representation of a vehicle.
Definition: SUMOVehicle.h:60
Structure representing possible vehicle parameter.