Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSVehicleControl.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 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#include <config.h>
23
24#include "MSVehicleControl.h"
25#include "MSVehicle.h"
26#include "MSLane.h"
27#include "MSEdge.h"
28#include "MSNet.h"
29#include "MSRouteHandler.h"
30#include "MSEventControl.h"
31#include "MSStop.h"
35#include <utils/common/Named.h>
41
42
43// ===========================================================================
44// member method definitions
45// ===========================================================================
47 myLoadedVehNo(0),
48 myRunningVehNo(0),
49 myEndedVehNo(0),
50 myDiscarded(0),
51 myCollisions(0),
52 myTeleportsCollision(0),
53 myTeleportsJam(0),
54 myTeleportsYield(0),
55 myTeleportsWrongLane(0),
56 myEmergencyStops(0),
57 myEmergencyBrakingCount(0),
58 myStoppedVehicles(0),
59 myTotalDepartureDelay(0),
60 myTotalTravelTime(0),
61 myWaitingForTransportable(0),
62 myMaxSpeedFactor(1),
63 myMinDeceleration(SUMOVTypeParameter::getDefaultDecel(SVC_IGNORING)),
64 myMinDecelerationRail(SUMOVTypeParameter::getDefaultDecel(SVC_RAIL)),
65 myPendingRemovals(MSGlobals::gNumSimThreads > 1) {
66
69 myKeepTime = string2time(OptionsCont::getOptions().getString("keep-after-arrival"));
70}
71
72
76
77
78void
105
106
109 ConstMSRoutePtr route, MSVehicleType* type,
110 const bool ignoreStopErrors, const VehicleDefinitionSource source, bool addRouteStops) {
111 const double speedFactor = (source == VehicleDefinitionSource::STATE ? 1 :
113 MSVehicle* built = new MSVehicle(defs, route, type, speedFactor);
114 initVehicle(built, ignoreStopErrors, addRouteStops, source);
115 return built;
116}
117
118
119void
120MSVehicleControl::initVehicle(MSBaseVehicle* built, const bool ignoreStopErrors, bool addRouteStops, const VehicleDefinitionSource source) {
122 try {
123 built->initDevices();
124 if (source != VehicleDefinitionSource::STATE) {
125 built->addStops(ignoreStopErrors, nullptr, addRouteStops);
126 }
127 } catch (ProcessError&) {
128 delete built;
129 throw;
130 }
132}
133
134
135void
137 assert(myRunningVehNo > 0);
138 if (!checkDuplicate || !isPendingRemoval(veh)) {
139 myPendingRemovals.push_back(veh);
140 }
141}
142
143
144bool
146#ifdef HAVE_FOX
147 return myPendingRemovals.contains(veh);
148#else
149 return std::find(myPendingRemovals.begin(), myPendingRemovals.end(), veh) == myPendingRemovals.end();
150#endif
151}
152
153
154void
156 OutputDevice* const tripinfoOut = OptionsCont::getOptions().isSet("tripinfo-output") ? &OutputDevice::getDeviceByOption("tripinfo-output") : nullptr;
157#ifdef HAVE_FOX
158 std::vector<SUMOVehicle*>& vehs = myPendingRemovals.getContainer();
159#else
160 std::vector<SUMOVehicle*>& vehs = myPendingRemovals;
161#endif
162 std::sort(vehs.begin(), vehs.end(), ComparatorNumericalIdLess());
163 for (SUMOVehicle* const veh : vehs) {
164 myTotalTravelTime += STEPS2TIME(MSNet::getInstance()->getCurrentTimeStep() - veh->getDeparture());
167 // vehicle is equipped with tripinfo device (not all vehicles are)
168 const bool hasTripinfo = veh->getDevice(typeid(MSDevice_Tripinfo)) != nullptr;
169 for (MSVehicleDevice* const dev : veh->getDevices()) {
170 dev->generateOutput(hasTripinfo ? tripinfoOut : nullptr);
171 }
172 if (tripinfoOut != nullptr && hasTripinfo) {
173 // close tag after tripinfo (possibly including emissions from another device) have been written
174 tripinfoOut->closeTag();
175 }
176 if (myKeepTime == 0) {
177 deleteVehicle(veh);
178 } else {
180 }
181 }
182 vehs.clear();
183 if (tripinfoOut != nullptr) {
184 // there seem to be people who think reading an unfinished xml is a good idea ;-)
185 tripinfoOut->flush();
186 }
187#ifdef HAVE_FOX
188 myPendingRemovals.unlock();
189#endif
190}
191
192
193void
198
199void
212
213
214void
215MSVehicleControl::setState(int runningVehNo, int loadedVehNo, int endedVehNo, double totalDepartureDelay, double totalTravelTime) {
216 myRunningVehNo = runningVehNo;
217 myLoadedVehNo = loadedVehNo;
218 myEndedVehNo = endedVehNo;
219 myTotalDepartureDelay = totalDepartureDelay;
220 myTotalTravelTime = totalTravelTime;
221}
222
223
224void
232 // save vehicle types
233 for (const auto& item : myVTypeDict) {
234 if (myReplaceableDefaultVTypes.count(item.first) == 0) {
235 item.second->getParameter().write(out);
236 }
237 }
238 for (const auto& item : myVTypeDistDict) {
240 out.writeAttr(SUMO_ATTR_VTYPES, item.second->getVals());
241 out.writeAttr(SUMO_ATTR_PROBS, item.second->getProbs());
242 out.closeTag();
243 }
244 std::vector<SUMOVehicle*> sortedVehs;
245 for (const auto& item : myVehicleDict) {
246 sortedVehs.push_back(item.second);
247 }
248 std::sort(sortedVehs.begin(), sortedVehs.end(), ComparatorNumericalIdLess());
249 for (SUMOVehicle* veh : sortedVehs) {
250 veh->saveState(out);
251 }
252}
253
254
255void
257 for (const auto& item : myVehicleDict) {
258 delete item.second;
259 }
260 myVehicleDict.clear();
261 // delete vehicle type distributions
262 for (const auto& item : myVTypeDistDict) {
263 delete item.second;
264 }
265 myVTypeDistDict.clear();
266 // delete vehicle types
267 for (const auto& item : myVTypeDict) {
268 delete item.second;
269 }
270 myVTypeDict.clear();
271 myPendingRemovals.clear(); // could be leftovers from MSVehicleTransfer::checkInsertions (teleport beyond arrival)
272 if (reinit) {
274 }
275 myLoadedVehNo = 0;
276 myRunningVehNo = 0;
277 myEndedVehNo = 0;
278 myDiscarded = 0;
279 myCollisions = 0;
281 myTeleportsJam = 0;
289}
290
291
292bool
293MSVehicleControl::addVehicle(const std::string& id, SUMOVehicle* v) {
294 VehicleDictType::iterator it = myVehicleDict.find(id);
295 if (it == myVehicleDict.end()) {
296 // id not in myVehicleDict.
297 myVehicleDict[id] = v;
298 handleTriggeredDepart(v, true);
299 const SUMOVehicleParameter& pars = v->getParameter();
300 if (v->getVClass() != SVC_TAXI && pars.line != "" && pars.repetitionNumber < 0) {
301 myPTVehicles.push_back(v);
302 }
303 return true;
304 }
305 return false;
306}
307
308
309void
311 const SUMOVehicleParameter& pars = v->getParameter();
313 const MSEdge* const firstEdge = v->getRoute().getEdges()[pars.departEdge];
314 if (add) {
316 // position will be checked against person position later
317 static_cast<MSVehicle*>(v)->setTentativeLaneAndPosition(nullptr, v->getParameter().departPos);
318 }
319 if (firstEdge->isTazConnector()) {
320 for (MSEdge* out : firstEdge->getSuccessors()) {
321 out->addWaiting(v);
322 }
323 } else {
324 firstEdge->addWaiting(v);
325 }
327 } else {
328 if (firstEdge->isTazConnector()) {
329 for (MSEdge* out : firstEdge->getSuccessors()) {
330 out->removeWaiting(v);
331 }
332 } else {
333 firstEdge->removeWaiting(v);
334 }
336 }
337 }
338}
339
340
342MSVehicleControl::getVehicle(const std::string& id) const {
343 VehicleDictType::const_iterator it = myVehicleDict.find(id);
344 if (it == myVehicleDict.end()) {
345 return nullptr;
346 }
347 return it->second;
348}
349
350
351void
352MSVehicleControl::deleteVehicle(SUMOVehicle* veh, bool discard, bool wasKept) {
353 if (!wasKept) {
354 myEndedVehNo++;
355 if (discard) {
356 myDiscarded++;
357 }
358 }
359 if (veh != nullptr) {
360 myVehicleDict.erase(veh->getID());
361 }
362 auto ptVehIt = std::find(myPTVehicles.begin(), myPTVehicles.end(), veh);
363 if (ptVehIt != myPTVehicles.end()) {
364 myPTVehicles.erase(ptVehIt);
365 }
366 delete veh;
367}
368
369
370bool
371MSVehicleControl::checkVType(const std::string& id) {
372 if (myReplaceableDefaultVTypes.erase(id) > 0) {
373 delete myVTypeDict[id];
374 myVTypeDict.erase(myVTypeDict.find(id));
375 } else {
376 if (myVTypeDict.find(id) != myVTypeDict.end() || myVTypeDistDict.find(id) != myVTypeDistDict.end()) {
377 return false;
378 }
379 }
380 return true;
381}
382
383
384bool
386 if (checkVType(vehType->getID())) {
387 myVTypeDict[vehType->getID()] = vehType;
388 return true;
389 }
390 return false;
391}
392
393
394void
396 assert(vehType != nullptr);
397 assert(myVTypeDict.find(vehType->getID()) != myVTypeDict.end());
398 myVTypeDict.erase(vehType->getID());
399 if (myVTypeToDist.find(vehType->getID()) != myVTypeToDist.end()) {
400 myVTypeToDist.erase(vehType->getID());
401 }
402 delete vehType;
403}
404
405
406bool
408 if (checkVType(id)) {
409 myVTypeDistDict[id] = vehTypeDistribution;
410 std::vector<MSVehicleType*> vehTypes = vehTypeDistribution->getVals();
411 for (auto vehType : vehTypes) {
412 if (myVTypeToDist.find(vehType->getID()) != myVTypeToDist.end()) {
413 myVTypeToDist[vehType->getID()].insert(id);
414 } else {
415 myVTypeToDist[vehType->getID()] = { id };
416 }
417 }
418 return true;
419 }
420 return false;
421}
422
423
424bool
425MSVehicleControl::hasVType(const std::string& id) const {
426 return myVTypeDict.count(id) > 0 || myVTypeDistDict.count(id) > 0;
427}
428
429
430bool
431MSVehicleControl::hasVTypeDistribution(const std::string& id) const {
432 return myVTypeDistDict.count(id) > 0;
433}
434
435
437MSVehicleControl::getVType(const std::string& id, SumoRNG* rng, bool readOnly) {
438 VTypeDictType::iterator it = myVTypeDict.find(id);
439 if (it == myVTypeDict.end()) {
440 VTypeDistDictType::iterator it2 = myVTypeDistDict.find(id);
441 if (it2 == myVTypeDistDict.end()) {
442 return nullptr;
443 }
444 return it2->second->get(rng);
445 }
446 if (!readOnly && myReplaceableDefaultVTypes.erase(id) > 0) {
447 it->second->check();
448 }
449 return it->second;
450}
451
452
453void
454MSVehicleControl::insertVTypeIDs(std::vector<std::string>& into) const {
455 into.reserve(into.size() + myVTypeDict.size() + myVTypeDistDict.size());
456 for (VTypeDictType::const_iterator i = myVTypeDict.begin(); i != myVTypeDict.end(); ++i) {
457 into.push_back((*i).first);
458 }
459 for (VTypeDistDictType::const_iterator i = myVTypeDistDict.begin(); i != myVTypeDistDict.end(); ++i) {
460 into.push_back((*i).first);
461 }
462}
463
464
465const std::set<std::string>
467 std::map<std::string, std::set<std::string>>::const_iterator it = myVTypeToDist.find(id);
468 if (it == myVTypeToDist.end()) {
469 return std::set<std::string>();
470 }
471 return it->second;
472}
473
474
476MSVehicleControl::getVTypeDistribution(const std::string& typeDistID) const {
477 const auto it = myVTypeDistDict.find(typeDistID);
478 if (it != myVTypeDistDict.end()) {
479 return it->second;
480 }
481 return nullptr;
482}
483
484
485const std::vector<MSVehicleType*>
487 std::vector<MSVehicleType*> pedestrianTypes;
488 for (auto const& e : myVTypeDict)
489 if (e.second->getVehicleClass() == SUMOVehicleClass::SVC_PEDESTRIAN) {
490 pedestrianTypes.push_back(e.second);
491 }
492 return pedestrianTypes;
493}
494
495
496void
498 for (VehicleDictType::iterator i = myVehicleDict.begin(); i != myVehicleDict.end(); ++i) {
499 SUMOVehicle* veh = i->second;
500 std::string waitReason;
501 if (veh->isStoppedTriggered()) {
502 const MSStop& stop = veh->getNextStop();
503 if (stop.triggered) {
504 waitReason = "for a person that will never come";
505 } else if (stop.containerTriggered) {
506 waitReason = "for a container that will never come";
507 } else if (stop.joinTriggered) {
508 if (stop.pars.join != "") {
509 waitReason = "to be joined to vehicle '" + stop.pars.join + "'";
510 } else {
511 waitReason = "for a joining vehicle that will never come";
512 }
513 } else {
514 waitReason = "for an unknown trigger";
515 }
516 } else if (!veh->hasDeparted()) {
518 waitReason = "for a train from which to split";
520 waitReason = "at insertion for a person that will never come";
522 waitReason = "at insertion for a container that will never come";
523 } else {
524 waitReason = "for an unknown departure trigger";
525 }
526 } else {
527 waitReason = "for an unknown reason";
528 }
529 WRITE_WARNINGF(TL("Vehicle '%' aborted waiting %."), i->first, waitReason);
530 }
531}
532
533
534int
536 int result = 0;
537 for (MSVehicleControl::constVehIt it = loadedVehBegin(); it != loadedVehEnd(); ++it) {
538 const SUMOVehicle* veh = it->second;
539 if ((veh->isOnRoad() || veh->isRemoteControlled()) && veh->getSpeed() < SUMO_const_haltingSpeed) {
540 result++;
541 }
542 }
543 return result;
544}
545
546
547std::pair<double, double>
549 double speedSum = 0;
550 double relSpeedSum = 0;
551 int count = 0;
552 for (MSVehicleControl::constVehIt it = loadedVehBegin(); it != loadedVehEnd(); ++it) {
553 const SUMOVehicle* veh = it->second;
554 if ((veh->isOnRoad() || veh->isRemoteControlled()) && !veh->isStopped()) {
555 count++;
556 speedSum += veh->getSpeed();
557 relSpeedSum += veh->getEdge()->getSpeedLimit() > 0 ? veh->getSpeed() / veh->getEdge()->getSpeedLimit() : 0;
558 }
559 }
560 if (count > 0) {
561 return std::make_pair(speedSum / count, relSpeedSum / count);
562 } else {
563 return std::make_pair(-1, -1);
564 }
565}
566
567
568int
569MSVehicleControl::getQuota(double frac, int loaded) const {
570 frac = frac < 0 ? myScale : frac;
571 const int origLoaded = (loaded < 1
572 // the vehicle in question has already been loaded, hence the '-1'
573 ? frac > 1. ? (int)(myLoadedVehNo / frac) : myLoadedVehNo - 1
574 // given transportable number reflects only previously loaded
575 : frac > 1. ? (int)(loaded / frac) : loaded);
576 return getScalingQuota(frac, origLoaded);
577}
578
579
580int
584
585
586void
588 for (const SUMOVehicle* const veh : myPTVehicles) {
589 // add single vehicles with line attribute which are not part of a flow
590 ConstMSRoutePtr const route = MSRoute::dictionary(veh->getParameter().routeid);
591 router.getNetwork()->addSchedule(veh->getParameter(), route == nullptr ? nullptr : &route->getStops());
592 }
593}
594
595// ===========================================================================
596// MSVehicleControl::DeleteKeptVehicle method definitions
597// ===========================================================================
598
604
605/****************************************************************************/
long long int SUMOTime
Definition GUI.h:36
#define WRITE_WARNINGF(...)
Definition MsgHandler.h:287
#define TL(string)
Definition MsgHandler.h:304
std::shared_ptr< const MSRoute > ConstMSRoutePtr
Definition Route.h:32
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
Definition SUMOTime.cpp:46
#define STEPS2TIME(x)
Definition SUMOTime.h:55
#define STEPFLOOR(x)
Definition SUMOTime.h:58
#define SIMSTEP
Definition SUMOTime.h:61
const long long int VTYPEPARS_VEHICLECLASS_SET
const std::string DEFAULT_TAXITYPE_ID
const std::string DEFAULT_RAILTYPE_ID
const std::string DEFAULT_PEDTYPE_ID
const std::set< std::string > DEFAULT_VTYPES
const std::string DEFAULT_VTYPE_ID
const std::string DEFAULT_CONTAINERTYPE_ID
@ SVC_IGNORING
vehicles ignoring classes
@ SVC_RAIL
vehicle is a not electrified rail
@ SVC_RAIL_CLASSES
classes which drive on tracks
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_CONTAINER
@ SVC_NON_ROAD
@ SVC_TAXI
vehicle is a taxi
@ SVC_PEDESTRIAN
pedestrian
const std::string DEFAULT_BIKETYPE_ID
@ SPLIT
The departure is triggered by a train split.
@ CONTAINER_TRIGGERED
The departure is container triggered.
@ TRIGGERED
The departure is person triggered.
@ SUMO_TAG_DELAY
@ SUMO_TAG_VTYPE_DISTRIBUTION
distribution of a vehicle type
@ SUMO_ATTR_NUMBER
@ SUMO_ATTR_DEPART
@ SUMO_ATTR_PROBS
@ SUMO_ATTR_BEGIN
weights: time range begin
@ SUMO_ATTR_VTYPES
@ SUMO_ATTR_END
weights: time range end
@ SUMO_ATTR_ID
@ SUMO_ATTR_TIME
trigger: the time of the step
int getScalingQuota(double frac, int loaded)
Returns the number of instances of the current object that shall be emitted given the number of loade...
Definition StdDefs.cpp:72
T MIN2(T a, T b)
Definition StdDefs.h:80
const double SUMO_const_haltingSpeed
the speed threshold at which vehicles are considered as halting
Definition StdDefs.h:62
T MAX2(T a, T b)
Definition StdDefs.h:86
void addSchedule(const SUMOVehicleParameter &pars, const StopParVector *addStops=nullptr)
Network * getNetwork() const
The base class for microscopic and mesoscopic vehicles.
virtual void initDevices()
void addStops(const bool ignoreStopErrors, MSRouteIterator *searchStart=nullptr, bool addRouteStops=true)
Adds stops to the built vehicle.
double getMaxDecel() const
Get the vehicle type's maximal comfortable deceleration [m/s^2].
Definition MSCFModel.h:269
A device which collects info on the vehicle trip (mainly on departure and arrival)
A road/street connecting two junctions.
Definition MSEdge.h:77
double getSpeedLimit() const
Returns the speed limit of the edge @caution The speed limit of the first lane is retured; should pro...
Definition MSEdge.cpp:1168
bool isTazConnector() const
Definition MSEdge.h:291
void addWaiting(SUMOVehicle *vehicle) const
Adds a vehicle to the list of waiting vehicles.
Definition MSEdge.cpp:1461
void removeWaiting(const SUMOVehicle *vehicle) const
Removes a vehicle from the list of waiting vehicles.
Definition MSEdge.cpp:1470
const MSEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
Definition MSEdge.cpp:1268
virtual void addEvent(Command *operation, SUMOTime execTimeStep=-1)
Adds an Event.
static bool gUseMesoSim
Definition MSGlobals.h:106
@ BUILT
The vehicle was built, but has not yet departed.
@ ARRIVED
The vehicle arrived at his destination (is deleted)
@ DEPARTED
The vehicle has departed (was inserted into the network)
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition MSNet.cpp:186
MSEventControl * getEndOfTimestepEvents()
Returns the event control for events executed at the end of a time step.
Definition MSNet.h:495
void informVehicleStateListener(const SUMOVehicle *const vehicle, VehicleState to, const std::string &info="")
Informs all added listeners about a vehicle's state change.
Definition MSNet.cpp:1335
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
Definition MSNet.h:392
static SumoRNG * getParsingRNG()
get parsing RNG
const ConstMSEdgeVector & getEdges() const
Definition MSRoute.h:125
static bool dictionary(const std::string &id, ConstMSRoutePtr route)
Adds a route to the dictionary.
Definition MSRoute.cpp:109
bool triggered
whether an arriving person lets the vehicle continue
Definition MSStop.h:69
bool containerTriggered
whether an arriving container lets the vehicle continue
Definition MSStop.h:71
bool joinTriggered
whether coupling another vehicle (train) the vehicle continue
Definition MSStop.h:73
const SUMOVehicleParameter::Stop pars
The stop parameter.
Definition MSStop.h:65
SUMOTime execute(SUMOTime currentTime)
Executes the command.
void adaptIntermodalRouter(MSTransportableRouter &router) const
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.
const std::vector< MSVehicleType * > getPedestrianTypes(void) const
Return all pedestrian vehicle types.
bool addVType(MSVehicleType *vehType)
Adds a vehicle type.
void setState(int runningVehNo, int loadedVehNo, int endedVehNo, double totalDepartureDelay, double totalTravelTime)
Sets the current state variables as loaded from the stream.
VehicleDefinitionSource
possible origins of a vehicle definition
void removePending()
Removes a vehicle after it has ended.
void initVehicle(MSBaseVehicle *built, const bool ignoreStopErrors, bool addRouteStops, const VehicleDefinitionSource source)
std::set< std::string > myReplaceableDefaultVTypes
the default vehicle types which may still be replaced
std::vector< SUMOVehicle * > myPendingRemovals
List of vehicles which are going to be removed.
int myLoadedVehNo
The number of build vehicles.
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.
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 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.
SUMOVehicle * getVehicle(const std::string &id) const
Returns the vehicle with the given id.
void clearState(const bool reinit)
Remove all vehicles before quick-loading state.
std::map< std::string, std::set< std::string > > myVTypeToDist
Inverse lookup from vehicle type to distributions it is a member of.
double myMinDeceleration
The minimum deceleration capability for all road vehicles in the network.
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 deleteKeptVehicle(SUMOVehicle *veh)
when a vehicle is kept after arrival, schedule later deletion
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...
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 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.
bool addVTypeDistribution(const std::string &id, RandomDistributor< MSVehicleType * > *vehTypeDistribution)
Adds a vehicle type distribution.
int myTeleportsJam
The number of teleports due to jam.
std::map< std::string, SUMOVehicle * >::const_iterator constVehIt
Definition of the internal vehicles map iterator.
void insertVTypeIDs(std::vector< std::string > &into) const
Inserts ids of all known vehicle types and vehicle type distributions to the given vector.
virtual SUMOVehicle * buildVehicle(SUMOVehicleParameter *defs, ConstMSRoutePtr route, MSVehicleType *type, const bool ignoreStopErrors, const VehicleDefinitionSource source=ROUTEFILE, bool addRouteStops=true)
Builds a vehicle, increases the number of built vehicles.
double myTotalDepartureDelay
The aggregated time vehicles had to wait for departure (in seconds)
VTypeDictType myVTypeDict
Dictionary of vehicle types.
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.
void scheduleVehicleRemoval(SUMOVehicle *veh, bool checkDuplicate=false)
Removes a vehicle after it has ended.
virtual void deleteVehicle(SUMOVehicle *v, bool discard=false, bool wasKept=false)
Deletes the vehicle.
constVehIt loadedVehBegin() const
Returns the begin of the internal vehicle map.
double myTotalTravelTime
The aggregated time vehicles needed to accomplish 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)
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.
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)
VehicleDictType myVehicleDict
Dictionary of vehicles.
Abstract in-vehicle device.
Representation of a vehicle in the micro simulation.
Definition MSVehicle.h:77
The car-following model and parameter.
const std::string & getID() const
Returns the name of the vehicle type.
const MSCFModel & getCarFollowModel() const
Returns the vehicle type's car following model definition (const version)
static MSVehicleType * build(SUMOVTypeParameter &from, const std::string &fileName="")
Builds the microsim vehicle type described by the given parameter.
double computeChosenSpeedDeviation(SumoRNG *rng, const double minDev=-1.) const
Computes and returns the speed deviation.
void check()
Checks whether vehicle type parameters may be problematic (Currently, only the value for the action s...
const std::string & getID() const
Returns the id.
Definition Named.h:74
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
static OptionsCont & getOptions()
Retrieves the options.
Static storage of an output device and its base (abstract) implementation.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
static OutputDevice & getDeviceByOption(const std::string &name)
Returns the device described by the option.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
Represents a generic random distribution.
const std::vector< T > & getVals() const
Returns the members of the distribution.
virtual const MSVehicleType & getVehicleType() const =0
Returns the object's "vehicle" type.
virtual double getChosenSpeedFactor() const =0
virtual double getSpeed() const =0
Returns the object's current speed.
virtual const SUMOVehicleParameter & getParameter() const =0
Returns the vehicle's parameter (including departure definition)
virtual SUMOVehicleClass getVClass() const =0
Returns the object's access class.
virtual const MSEdge * getEdge() const =0
Returns the edge the object is currently at.
Structure representing possible vehicle parameter.
long long int parametersSet
Information for the router which parameter were set.
Representation of a vehicle.
Definition SUMOVehicle.h:62
virtual bool isStopped() const =0
Returns whether the vehicle is at a stop and waiting for a person or container to continue.
virtual SUMOTime getDeparture() const =0
Returns this vehicle's real departure time.
virtual bool hasDeparted() const =0
Returns whether this vehicle has departed.
virtual bool isStoppedTriggered() const =0
Returns whether the vehicle is at a stop and waiting for a person or container to continue.
virtual bool isOnRoad() const =0
Returns the information whether the vehicle is on a road (is simulated)
virtual bool isRemoteControlled() const =0
Returns the information whether the vehicle is fully controlled via TraCI.
virtual const MSStop & getNextStop() const =0
virtual const MSRoute & getRoute() const =0
Returns the current route.
std::string join
the id of the vehicle (train portion) to which this vehicle shall be joined
Structure representing possible vehicle parameter.
double departPos
(optional) The position the vehicle shall depart from
int departEdge
(optional) The initial edge within the route of the vehicle
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
std::string line
The vehicle's line (mainly for public transport)
Function-object for stable sorting of objects with numerical ids.
Definition Named.h:39