Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
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-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/****************************************************************************/
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
36#include "MSNet.h"
37
38
39// ===========================================================================
40// class declarations
41// ===========================================================================
42class SUMOVehicle;
44class MSBaseVehicle;
45class MSVehicle;
46class MSRoute;
47class MSVehicleType;
48class OutputDevice;
49class MSEdge;
50
51typedef std::shared_ptr<const MSRoute> ConstMSRoutePtr;
52
53
54// ===========================================================================
55// class definitions
56// ===========================================================================
73public:
75 typedef std::map<std::string, SUMOVehicle*>::const_iterator constVehIt;
76
77public:
80
81
83 virtual ~MSVehicleControl();
84
87
101 MSVehicleType* type,
102 const bool ignoreStopErrors, const bool fromRouteFile = true,
103 bool addRouteStops = true);
105
106
107
110
124 virtual bool addVehicle(const std::string& id, SUMOVehicle* v);
125
126
135 SUMOVehicle* getVehicle(const std::string& id) const;
136
137
144 virtual void deleteVehicle(SUMOVehicle* v, bool discard = false);
145
148 myEndedVehNo++;
149 myDiscarded++;
150 }
151
163 void scheduleVehicleRemoval(SUMOVehicle* veh, bool checkDuplicate = false);
164
165
177 void removePending();
178
179
184 return myVehicleDict.begin();
185 }
186
187
192 return myVehicleDict.end();
193 }
195
196
198 void handleTriggeredDepart(SUMOVehicle* v, bool add);
199
202
210 void vehicleDeparted(const SUMOVehicle& v);
212
213
214
217
221 int getLoadedVehicleNo() const {
222 return myLoadedVehNo;
223 }
224
225
229 virtual int getHaltingVehicleNo() const;
230
232 virtual std::pair<double, double> getVehicleMeanSpeeds() const;
233 double getVehicleMeanSpeed() const {
234 return getVehicleMeanSpeeds().first;
235 }
237 return getVehicleMeanSpeeds().second;
238 }
239
243 int getEndedVehicleNo() const {
244 return myEndedVehNo;
245 }
246
251 return myEndedVehNo - myDiscarded;
252 }
253
258 return myDiscarded;
259 }
260
261
266 return myRunningVehNo;
267 }
268
269
275 }
276
277
285 int getQuota(double frac = -1, int loaded = -1) const;
286
287
295
300
301
303 int getCollisionCount() const {
304 return myCollisions;
305 }
306
310 }
311
313 int getTeleportsJam() const {
314 return myTeleportsJam;
315 }
316
318 int getTeleportsYield() const {
319 return myTeleportsYield;
320 }
321
325 }
326
328 int getTeleportCount() const;
329
331 int getEmergencyStops() const {
332 return myEmergencyStops;
333 }
334
338 }
339
342 return myStoppedVehicles;
343 }
344
348 double getTotalDepartureDelay() const {
350 }
351
352
356 double getTotalTravelTime() const {
357 return myTotalTravelTime;
358 }
360
361
362
365
378 bool addVType(MSVehicleType* vehType);
379
380 /*
381 * @param[in] vehType The vehicle type to remove
382 * @return Whether the vehicle type could be removed
383 */
384 void removeVType(const MSVehicleType* vehType);
385
386
400 bool addVTypeDistribution(const std::string& id, RandomDistributor<MSVehicleType*>* vehTypeDistribution);
401
402
410 bool hasVType(const std::string& id) const;
411
412
420 bool hasVTypeDistribution(const std::string& id) const;
421
422
427 MSVehicleType* getVType(const std::string& id = DEFAULT_VTYPE_ID, SumoRNG* rng = nullptr, bool readOnly = false);
428
429
433 void insertVTypeIDs(std::vector<std::string>& into) const;
434
435
439 const std::set<std::string> getVTypeDistributionMembership(const std::string& id) const;
440
442 const RandomDistributor<MSVehicleType*>* getVTypeDistribution(const std::string& typeDistID) const;
443
445
451
457
459 void registerCollision(bool teleport) {
460 myCollisions++;
461 if (teleport) {
463 }
464 }
465
469 }
470
475
480
485
490
495
500
503
506 void setState(int runningVehNo, int loadedVehNo, int endedVehNo, double totalDepartureDelay, double totalTravelTime);
507
510 void saveState(OutputDevice& out);
511
513 void clearState(const bool reinit);
515
518 myRunningVehNo -= n;
519 myDiscarded += n;
520 myEndedVehNo += n;
521 }
522
523
526 void abortWaiting();
527
529 double getMaxSpeedFactor() const {
530 return myMaxSpeedFactor;
531 }
532
534 double getMinDeceleration() const {
535 return myMinDeceleration;
536 }
537
539 double getMinDecelerationRail() const {
541 }
542
544
546 void setScale(double scale) {
547 myScale = scale;
548 }
549
551 double getScale() const {
552 return myScale;
553 }
554
555private:
557 void initDefaultTypes();
558
565 bool checkVType(const std::string& id);
566
568 bool isPendingRemoval(SUMOVehicle* veh);
569
570protected:
571 void initVehicle(MSBaseVehicle* built, const bool ignoreStopErrors, bool addRouteStops);
572
573private:
576
579
582
585
588
591
594
597
600
603
606
609
613
614
617
620
624
625
626protected:
629
631 typedef std::map< std::string, SUMOVehicle* > VehicleDictType;
635
636
637private:
640
642 typedef std::map< std::string, MSVehicleType* > VTypeDictType;
645
647 typedef std::map< std::string, RandomDistributor<MSVehicleType*>* > VTypeDistDictType;
650
652 std::map<std::string, std::set<std::string>> myVTypeToDist;
653
655 std::set<std::string> myReplaceableDefaultVTypes;
656
659
661 double myScale;
662
665
670
672 std::vector<SUMOVehicle*> myPTVehicles;
673
675#ifdef HAVE_FOX
677#else
678 std::vector<SUMOVehicle*> myPendingRemovals;
679#endif
680
681private:
684
687
688
689};
std::shared_ptr< const MSRoute > ConstMSRoutePtr
const std::string DEFAULT_VTYPE_ID
The base class for microscopic and mesoscopic vehicles.
A road/street connecting two junctions.
Definition MSEdge.h:77
The class responsible for building and deletion of vehicles.
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 * > 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 adaptIntermodalRouter(MSNet::MSIntermodalRouter &router) const
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.
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 ...
std::map< std::string, SUMOVehicle * >::const_iterator constVehIt
Definition of the internal vehicles map iterator.
MSVehicleControl & operator=(const MSVehicleControl &s)=delete
invalidated assignment operator
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.
Static storage of an output device and its base (abstract) implementation.
Represents a generic random distribution.
Representation of a vehicle.
Definition SUMOVehicle.h:62
Structure representing possible vehicle parameter.