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-2026 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, double maxSpeedFactor, double minDecel) {
216 myRunningVehNo = runningVehNo;
217 myLoadedVehNo = loadedVehNo;
218 myEndedVehNo = endedVehNo;
219 myTotalDepartureDelay = totalDepartureDelay;
220 myTotalTravelTime = totalTravelTime;
221 myMaxSpeedFactor = maxSpeedFactor;
222 myMinDeceleration = minDecel;
223}
224
225
226void
236 out.closeTag();
237 // save vehicle types
238 for (const auto& item : myVTypeDict) {
239 if (myReplaceableDefaultVTypes.count(item.first) == 0) {
240 item.second->getParameter().write(out);
241 }
242 }
243 for (const auto& item : myVTypeDistDict) {
245 out.writeAttr(SUMO_ATTR_VTYPES, item.second->getVals());
246 out.writeAttr(SUMO_ATTR_PROBS, item.second->getProbs());
247 out.closeTag();
248 }
249 std::vector<SUMOVehicle*> sortedVehs;
250 for (const auto& item : myVehicleDict) {
251 sortedVehs.push_back(item.second);
252 }
253 std::sort(sortedVehs.begin(), sortedVehs.end(), ComparatorNumericalIdLess());
254 for (SUMOVehicle* veh : sortedVehs) {
255 veh->saveState(out);
256 }
257}
258
259
260void
262 for (const auto& item : myVehicleDict) {
263 delete item.second;
264 }
265 myVehicleDict.clear();
266 // delete vehicle type distributions
267 for (const auto& item : myVTypeDistDict) {
268 delete item.second;
269 }
270 myVTypeDistDict.clear();
271 // delete vehicle types
272 for (const auto& item : myVTypeDict) {
273 delete item.second;
274 }
275 myVTypeDict.clear();
276 myPendingRemovals.clear(); // could be leftovers from MSVehicleTransfer::checkInsertions (teleport beyond arrival)
277 if (reinit) {
279 }
280 myLoadedVehNo = 0;
281 myRunningVehNo = 0;
282 myEndedVehNo = 0;
283 myDiscarded = 0;
284 myCollisions = 0;
286 myTeleportsJam = 0;
294}
295
296
297bool
298MSVehicleControl::addVehicle(const std::string& id, SUMOVehicle* v) {
299 VehicleDictType::iterator it = myVehicleDict.find(id);
300 if (it == myVehicleDict.end()) {
301 // id not in myVehicleDict.
302 myVehicleDict[id] = v;
303 handleTriggeredDepart(v, true);
304 const SUMOVehicleParameter& pars = v->getParameter();
305 if (v->getVClass() != SVC_TAXI && pars.line != "" && pars.repetitionNumber < 0) {
306 myPTVehicles.push_back(v);
307 }
308 return true;
309 }
310 return false;
311}
312
313
314void
316 const SUMOVehicleParameter& pars = v->getParameter();
318 const MSEdge* const firstEdge = v->getRoute().getEdges()[pars.departEdge];
319 if (add) {
321 // position will be checked against person position later
322 static_cast<MSVehicle*>(v)->setTentativeLaneAndPosition(nullptr, v->getParameter().departPos);
323 }
324 if (firstEdge->isTazConnector()) {
325 for (MSEdge* out : firstEdge->getSuccessors()) {
326 out->addWaiting(v);
327 }
328 } else {
329 firstEdge->addWaiting(v);
330 }
332 } else {
333 if (firstEdge->isTazConnector()) {
334 for (MSEdge* out : firstEdge->getSuccessors()) {
335 out->removeWaiting(v);
336 }
337 } else {
338 firstEdge->removeWaiting(v);
339 }
341 }
342 }
343}
344
345
347MSVehicleControl::getVehicle(const std::string& id) const {
348 VehicleDictType::const_iterator it = myVehicleDict.find(id);
349 if (it == myVehicleDict.end()) {
350 return nullptr;
351 }
352 return it->second;
353}
354
355
356void
357MSVehicleControl::deleteVehicle(SUMOVehicle* veh, bool discard, bool wasKept) {
358 if (!wasKept) {
359 myEndedVehNo++;
360 if (discard) {
361 myDiscarded++;
362 }
363 }
364 if (veh != nullptr) {
365 myVehicleDict.erase(veh->getID());
366 }
367 auto ptVehIt = std::find(myPTVehicles.begin(), myPTVehicles.end(), veh);
368 if (ptVehIt != myPTVehicles.end()) {
369 myPTVehicles.erase(ptVehIt);
370 }
371 delete veh;
372}
373
374
375bool
376MSVehicleControl::checkVType(const std::string& id) {
377 if (myReplaceableDefaultVTypes.erase(id) > 0) {
378 delete myVTypeDict[id];
379 myVTypeDict.erase(myVTypeDict.find(id));
380 } else {
381 if (myVTypeDict.find(id) != myVTypeDict.end() || myVTypeDistDict.find(id) != myVTypeDistDict.end()) {
382 return false;
383 }
384 }
385 return true;
386}
387
388
389bool
391 if (checkVType(vehType->getID())) {
392 myVTypeDict[vehType->getID()] = vehType;
393 return true;
394 }
395 return false;
396}
397
398
399void
401 assert(vehType != nullptr);
402 assert(myVTypeDict.find(vehType->getID()) != myVTypeDict.end());
403 myVTypeDict.erase(vehType->getID());
404 if (myVTypeToDist.find(vehType->getID()) != myVTypeToDist.end()) {
405 myVTypeToDist.erase(vehType->getID());
406 }
407 delete vehType;
408}
409
410
411bool
413 if (checkVType(id)) {
414 myVTypeDistDict[id] = vehTypeDistribution;
415 std::vector<MSVehicleType*> vehTypes = vehTypeDistribution->getVals();
416 for (auto vehType : vehTypes) {
417 if (myVTypeToDist.find(vehType->getID()) != myVTypeToDist.end()) {
418 myVTypeToDist[vehType->getID()].insert(id);
419 } else {
420 myVTypeToDist[vehType->getID()] = { id };
421 }
422 }
423 return true;
424 }
425 return false;
426}
427
428
429bool
430MSVehicleControl::hasVType(const std::string& id) const {
431 return myVTypeDict.count(id) > 0 || myVTypeDistDict.count(id) > 0;
432}
433
434
435bool
436MSVehicleControl::hasVTypeDistribution(const std::string& id) const {
437 return myVTypeDistDict.count(id) > 0;
438}
439
440
442MSVehicleControl::getVType(const std::string& id, SumoRNG* rng, bool readOnly) {
443 VTypeDictType::iterator it = myVTypeDict.find(id);
444 if (it == myVTypeDict.end()) {
445 VTypeDistDictType::iterator it2 = myVTypeDistDict.find(id);
446 if (it2 == myVTypeDistDict.end()) {
447 return nullptr;
448 }
449 return it2->second->get(rng);
450 }
451 if (!readOnly && myReplaceableDefaultVTypes.erase(id) > 0) {
452 it->second->check();
453 }
454 return it->second;
455}
456
457
458void
459MSVehicleControl::insertVTypeIDs(std::vector<std::string>& into) const {
460 into.reserve(into.size() + myVTypeDict.size() + myVTypeDistDict.size());
461 for (VTypeDictType::const_iterator i = myVTypeDict.begin(); i != myVTypeDict.end(); ++i) {
462 into.push_back((*i).first);
463 }
464 for (VTypeDistDictType::const_iterator i = myVTypeDistDict.begin(); i != myVTypeDistDict.end(); ++i) {
465 into.push_back((*i).first);
466 }
467}
468
469
470const std::set<std::string>
472 std::map<std::string, std::set<std::string>>::const_iterator it = myVTypeToDist.find(id);
473 if (it == myVTypeToDist.end()) {
474 return std::set<std::string>();
475 }
476 return it->second;
477}
478
479
481MSVehicleControl::getVTypeDistribution(const std::string& typeDistID) const {
482 const auto it = myVTypeDistDict.find(typeDistID);
483 if (it != myVTypeDistDict.end()) {
484 return it->second;
485 }
486 return nullptr;
487}
488
489
490const std::vector<MSVehicleType*>
492 std::vector<MSVehicleType*> pedestrianTypes;
493 for (auto const& e : myVTypeDict)
494 if (e.second->getVehicleClass() == SUMOVehicleClass::SVC_PEDESTRIAN) {
495 pedestrianTypes.push_back(e.second);
496 }
497 return pedestrianTypes;
498}
499
500
501void
503 for (VehicleDictType::iterator i = myVehicleDict.begin(); i != myVehicleDict.end(); ++i) {
504 SUMOVehicle* veh = i->second;
505 std::string waitReason;
506 if (veh->isStoppedTriggered()) {
507 const MSStop& stop = veh->getNextStop();
508 if (stop.triggered) {
509 waitReason = "for a person that will never come";
510 } else if (stop.containerTriggered) {
511 waitReason = "for a container that will never come";
512 } else if (stop.joinTriggered) {
513 if (stop.pars.join != "") {
514 waitReason = "to be joined to vehicle '" + stop.pars.join + "'";
515 } else {
516 waitReason = "for a joining vehicle that will never come";
517 }
518 } else {
519 waitReason = "for an unknown trigger";
520 }
521 } else if (!veh->hasDeparted()) {
523 waitReason = "for a train from which to split";
525 waitReason = "at insertion for a person that will never come";
527 waitReason = "at insertion for a container that will never come";
528 } else {
529 waitReason = "for an unknown departure trigger";
530 }
531 } else {
532 waitReason = "for an unknown reason";
533 }
534 WRITE_WARNINGF(TL("Vehicle '%' aborted waiting %."), i->first, waitReason);
535 }
536}
537
538
539int
541 int result = 0;
542 for (MSVehicleControl::constVehIt it = loadedVehBegin(); it != loadedVehEnd(); ++it) {
543 const SUMOVehicle* veh = it->second;
544 if ((veh->isOnRoad() || veh->isRemoteControlled()) && veh->getSpeed() < SUMO_const_haltingSpeed) {
545 result++;
546 }
547 }
548 return result;
549}
550
551
552std::pair<double, double>
554 double speedSum = 0;
555 double relSpeedSum = 0;
556 int count = 0;
557 for (MSVehicleControl::constVehIt it = loadedVehBegin(); it != loadedVehEnd(); ++it) {
558 const SUMOVehicle* veh = it->second;
559 if ((veh->isOnRoad() || veh->isRemoteControlled()) && !veh->isStopped()) {
560 count++;
561 speedSum += veh->getSpeed();
562 relSpeedSum += veh->getEdge()->getSpeedLimit() > 0 ? veh->getSpeed() / veh->getEdge()->getSpeedLimit() : 0;
563 }
564 }
565 if (count > 0) {
566 return std::make_pair(speedSum / count, relSpeedSum / count);
567 } else {
568 return std::make_pair(-1, -1);
569 }
570}
571
572
573int
574MSVehicleControl::getQuota(double frac, int loaded) const {
575 frac = frac < 0 ? myScale : frac;
576 const int origLoaded = (loaded < 1
577 // the vehicle in question has already been loaded, hence the '-1'
578 ? frac > 1. ? (int)(myLoadedVehNo / frac) : myLoadedVehNo - 1
579 // given transportable number reflects only previously loaded
580 : frac > 1. ? (int)(loaded / frac) : loaded);
581 return getScalingQuota(frac, origLoaded);
582}
583
584
585int
589
590
591void
593 for (const SUMOVehicle* const veh : myPTVehicles) {
594 // add single vehicles with line attribute which are not part of a flow
595 ConstMSRoutePtr const route = MSRoute::dictionary(veh->getParameter().routeid);
596 router.getNetwork()->addSchedule(veh->getParameter(), route == nullptr ? nullptr : &route->getStops());
597 }
598}
599
600// ===========================================================================
601// MSVehicleControl::DeleteKeptVehicle method definitions
602// ===========================================================================
603
609
610/****************************************************************************/
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:58
#define STEPFLOOR(x)
Definition SUMOTime.h:61
#define SIMSTEP
Definition SUMOTime.h:64
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_DECEL
@ SUMO_ATTR_END
weights: time range end
@ SUMO_ATTR_SPEEDFACTOR
@ SUMO_ATTR_ID
@ SUMO_ATTR_TIME
trigger: the time of the step
int getScalingQuota(double frac, long long int loaded)
Returns the number of instances of the current object that shall be emitted given the number of loade...
Definition StdDefs.cpp:73
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:1190
bool isTazConnector() const
Definition MSEdge.h:292
void addWaiting(SUMOVehicle *vehicle) const
Adds a vehicle to the list of waiting vehicles.
Definition MSEdge.cpp:1483
void removeWaiting(const SUMOVehicle *vehicle) const
Removes a vehicle from the list of waiting vehicles.
Definition MSEdge.cpp:1492
const MSEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
Definition MSEdge.cpp:1290
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:199
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:1359
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
Definition MSNet.h:392
static SumoRNG * getParsingRNG()
get parsing RNG
const ConstMSEdgeVector & getEdges() const
Definition MSRoute.h:128
static bool dictionary(const std::string &id, ConstMSRoutePtr route)
Adds a route to the dictionary.
Definition MSRoute.cpp:116
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.
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)
void setState(int runningVehNo, int loadedVehNo, int endedVehNo, double totalDepartureDelay, double totalTravelTime, double maxSpeedFactor, double minDecel)
Sets the current state variables as loaded from the stream.
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 & openTag(const std::string &xmlElement)
Opens an XML tag.
OutputDevice & writeAttr(const ATTR_TYPE &attr, const T &val, const bool isNull=false)
writes a named attribute
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:63
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