Eclipse SUMO - Simulation of Urban MObility
MSInsertionControl Class Reference

Inserts vehicles into the network when their departure time is reached. More...

#include <MSInsertionControl.h>

Collaboration diagram for MSInsertionControl:
[legend]

Data Structures

struct  Flow
 Definition of vehicle flow with the current index for vehicle numbering. More...
 

Public Member Functions

void adaptIntermodalRouter (MSTransportableRouter &router) const
 
void add (SUMOVehicle *veh)
 Adds a single vehicle for departure. More...
 
bool addFlow (SUMOVehicleParameter *const pars, int index=-1)
 Adds parameter for a vehicle flow for departure. More...
 
void alreadyDeparted (SUMOVehicle *veh)
 stops trying to emit the given vehicle (because it already departed) More...
 
void clearPendingVehicles (const std::string &route)
 clears out all pending vehicles from a route, "" for all routes More...
 
void clearState ()
 Remove all vehicles before quick-loading state. More...
 
SUMOTime computeRandomDepartOffset () const
 compute (optional) random offset to the departure time More...
 
void descheduleDeparture (const SUMOVehicle *veh)
 stops trying to emit the given vehicle (and delete it) More...
 
void determineCandidates (SUMOTime time)
 Checks for all vehicles whether they can be emitted. More...
 
int emitVehicles (SUMOTime time)
 Emits vehicles that want to depart at the given time. More...
 
const SUMOVehicleParametergetFlowPars (const std::string &id) const
 return parameters for the given flow More...
 
SumoRNGgetFlowRNG ()
 retrieve internal RNG More...
 
SUMOVehiclegetLastFlowVehicle (const std::string &id) const
 return the last vehicle for the given flow More...
 
int getPendingEmits (const MSLane *lane)
 return the number of pending emits for the given lane More...
 
int getPendingFlowCount () const
 Returns the number of flows that are still active. More...
 
const MSVehicleContainer::VehicleVectorgetPendingVehicles () const
 retrieve vehicles waiting for insertion More...
 
int getWaitingVehicleNo () const
 Returns the number of waiting vehicles. More...
 
bool hasFlow (const std::string &id) const
 checks whether the given flow still exists More...
 
 MSInsertionControl (MSVehicleControl &vc, SUMOTime maxDepartDelay, bool checkEdgesOnce, int maxVehicleNumber, SUMOTime randomDepartOffset)
 Constructor. More...
 
void retractDescheduleDeparture (const SUMOVehicle *veh)
 reverts a previous call to descheduleDeparture (only needed for departPos="random_free") More...
 
void saveState (OutputDevice &out)
 Saves the current state into the given stream. More...
 
void updateScale (const std::string vtypeid)
 updates the flow scale value to keep track of TraCI-induced change More...
 
 ~MSInsertionControl ()
 Destructor. More...
 

Private Member Functions

void checkCandidates (SUMOTime time, const bool preCheck)
 Adds all vehicles that should have been emitted earlier to the refuse container. More...
 
 MSInsertionControl (const MSInsertionControl &)
 Invalidated copy constructor. More...
 
MSInsertionControloperator= (const MSInsertionControl &)
 Invalidated assignment operator. More...
 
int tryInsert (SUMOTime time, SUMOVehicle *veh, MSVehicleContainer::VehicleVector &refusedEmits)
 Tries to emit the vehicle. More...
 

Static Private Member Functions

static double initScale (const std::string vtypeid)
 init scale value of flow More...
 

Private Attributes

std::set< const SUMOVehicle * > myAbortedEmits
 Set of vehicles which shall not be inserted anymore. More...
 
MSVehicleContainer myAllVeh
 All loaded vehicles sorted by their departure time. More...
 
bool myEagerInsertionCheck
 Whether an edge on which a vehicle could not depart should be ignored in the same step. More...
 
std::set< SUMOVehicle * > myEmitCandidates
 Buffer for vehicles that may be inserted in the current step. More...
 
std::map< std::string, int > myFlowIDs
 Cache for periodical vehicle ids and their most recent index for quicker checking. More...
 
SumoRNG myFlowRNG
 A random number generator for probabilistic flows. More...
 
std::vector< FlowmyFlows
 Container for periodical vehicle parameters. More...
 
SUMOTime myMaxDepartDelay
 The maximum waiting time; vehicles waiting longer are deleted (-1: no deletion) More...
 
SUMOTime myMaxRandomDepartOffset
 The maximum random offset to be added to vehicles departure times (non-negative) More...
 
int myMaxVehicleNumber
 Storage for maximum vehicle number. More...
 
MSVehicleContainer::VehicleVector myPendingEmits
 Buffers for vehicles that could not be inserted. More...
 
std::map< const MSLane *, int > myPendingEmitsForLane
 the number of pending emits for each edge in the current time step More...
 
SUMOTime myPendingEmitsUpdateTime
 Last time at which pending emits for each edge where counted. More...
 
MSVehicleControlmyVehicleControl
 The assigned vehicle control (needed for vehicle re-insertion and deletion) More...
 

Detailed Description

Inserts vehicles into the network when their departure time is reached.

Holds a list of vehicles which may be filled by vehicles read by SUMORouteLoaders. Tries to emit vehicles departing at a time into the network as soon this time is reached and keeps them as long the insertion fails.

If a vehicle is emitted, the control about it is given to the lanes.

Vehicles are not controlled (created, deleted) by this class.

Todo:
When a vehicle is deleted due to waiting too long or because of vaporizing, this is not reported anywhere

Definition at line 61 of file MSInsertionControl.h.

Constructor & Destructor Documentation

◆ MSInsertionControl() [1/2]

MSInsertionControl::MSInsertionControl ( MSVehicleControl vc,
SUMOTime  maxDepartDelay,
bool  checkEdgesOnce,
int  maxVehicleNumber,
SUMOTime  randomDepartOffset 
)

Constructor.

Parameters
[in]vcThe assigned vehicle control (needed for vehicle re-insertion and deletion)
[in]maxDepartDelayVehicles waiting for insertion longer than this time are deleted (-1: no deletion)
[in]checkEdgesOnceWhether an edge on which a vehicle could not depart should be ignored in the same step
[in]maxVehicleNumberThe maximum number of vehicles that should not be exceeded

Definition at line 47 of file MSInsertionControl.cpp.

References RandHelper::initRandGlobal(), myFlowRNG, and myMaxRandomDepartOffset.

◆ ~MSInsertionControl()

MSInsertionControl::~MSInsertionControl ( )

Destructor.

Definition at line 63 of file MSInsertionControl.cpp.

References myFlows.

◆ MSInsertionControl() [2/2]

MSInsertionControl::MSInsertionControl ( const MSInsertionControl )
private

Invalidated copy constructor.

Member Function Documentation

◆ adaptIntermodalRouter()

void MSInsertionControl::adaptIntermodalRouter ( MSTransportableRouter router) const

Definition at line 371 of file MSInsertionControl.cpp.

References IntermodalNetwork< E, L, N, V >::addSchedule(), MSRoute::dictionary(), IntermodalRouter< E, L, N, V >::getNetwork(), and myFlows.

Referenced by MSNet::adaptIntermodalRouter().

Here is the caller graph for this function:

◆ add()

void MSInsertionControl::add ( SUMOVehicle veh)

Adds a single vehicle for departure.

The vehicle is added to "myAllVeh".

Parameters
[in]vehThe vehicle to add for later insertion

Definition at line 71 of file MSInsertionControl.cpp.

References MSVehicleContainer::add(), and myAllVeh.

Referenced by LIBSUMO_NAMESPACE::Vehicle::add(), MSDevice_FCDReplay::FCDHandler::addTrafficObjects(), MSRouteHandler::closeVehicle(), determineCandidates(), MSStageDriving::proceed(), and MSVehicle::processNextStop().

Here is the caller graph for this function:

◆ addFlow()

bool MSInsertionControl::addFlow ( SUMOVehicleParameter *const  pars,
int  index = -1 
)

Adds parameter for a vehicle flow for departure.

Parameters
[in]parsThe flow parameters to add for later insertion
[in]indexThe current index when loading this flow from a simulation state
Returns
whether it could be added (no other flow with the same id was present)

Definition at line 77 of file MSInsertionControl.cpp.

References SUMOVehicleParameter::id, initScale(), myFlowIDs, myFlowRNG, myFlows, SUMOVehicleParameter::repetitionOffset, SUMOVehicleParameter::repetitionProbability, and SUMOVehicleParameter::vtypeid.

Referenced by MSStateHandler::myStartElement().

Here is the caller graph for this function:

◆ alreadyDeparted()

void MSInsertionControl::alreadyDeparted ( SUMOVehicle veh)

stops trying to emit the given vehicle (because it already departed)

Definition at line 326 of file MSInsertionControl.cpp.

References myAllVeh, myPendingEmits, and MSVehicleContainer::remove().

Referenced by MSStateHandler::closeVehicle(), MSVehicleTransfer::loadState(), LIBSUMO_NAMESPACE::Vehicle::moveTo(), LIBSUMO_NAMESPACE::Vehicle::moveToXY(), and LIBSUMO_NAMESPACE::Vehicle::remove().

Here is the caller graph for this function:

◆ checkCandidates()

void MSInsertionControl::checkCandidates ( SUMOTime  time,
const bool  preCheck 
)
private

Adds all vehicles that should have been emitted earlier to the refuse container.

Parameters
[in]timeThe current simulation time
Todo:
recheck

Definition at line 192 of file MSInsertionControl.cpp.

References MSVehicleContainer::anyWaitingBefore(), SUMOTrafficObject::getDevice(), SUMOTrafficObject::getEdge(), MSEdge::insertVehicle(), myAllVeh, myEagerInsertionCheck, myEmitCandidates, myPendingEmits, MSVehicleContainer::pop(), MSDevice_Routing::skipRouting(), and MSVehicleContainer::top().

Referenced by determineCandidates().

Here is the caller graph for this function:

◆ clearPendingVehicles()

void MSInsertionControl::clearPendingVehicles ( const std::string &  route)

clears out all pending vehicles from a route, "" for all routes

Definition at line 333 of file MSInsertionControl.cpp.

References MSVehicleControl::deleteVehicle(), myPendingEmits, and myVehicleControl.

Referenced by LIBSUMO_NAMESPACE::Simulation::clearPending().

Here is the caller graph for this function:

◆ clearState()

void MSInsertionControl::clearState ( )

Remove all vehicles before quick-loading state.

Definition at line 415 of file MSInsertionControl.cpp.

References MSVehicleContainer::clearState(), myAbortedEmits, myAllVeh, myEmitCandidates, myFlowIDs, myFlows, and myPendingEmits.

Referenced by MSNet::clearState().

Here is the caller graph for this function:

◆ computeRandomDepartOffset()

SUMOTime MSInsertionControl::computeRandomDepartOffset ( ) const

compute (optional) random offset to the departure time

Definition at line 430 of file MSInsertionControl.cpp.

References DELTA_T, MSRouteHandler::getParsingRNG(), myMaxRandomDepartOffset, and RandHelper::rand().

Referenced by MSRouteHandler::addFlowTransportable(), MSRouteHandler::closeVehicle(), and determineCandidates().

Here is the caller graph for this function:

◆ descheduleDeparture()

void MSInsertionControl::descheduleDeparture ( const SUMOVehicle veh)

stops trying to emit the given vehicle (and delete it)

Definition at line 315 of file MSInsertionControl.cpp.

References myAbortedEmits.

Referenced by MSLane::checkFailure(), MSLane::isInsertionSuccess(), and MSBaseVehicle::reroute().

Here is the caller graph for this function:

◆ determineCandidates()

◆ emitVehicles()

int MSInsertionControl::emitVehicles ( SUMOTime  time)

Emits vehicles that want to depart at the given time.

All vehicles scheduled for this time are tried to be emitted. This includes those with a depart time as the given time and those that wait for being emitted due they could not be inserted in previous steps.

For each vehicle, tryInsert is called. If this fails, a vehicle keeps within the refused emit containers ("myRefusedEmits1", "myRefusedEmits2") so that it may be emitted within the next steps.

Returns the number of vehicles that could be inserted into the net.

Parameters
[in]timeThe current simulation time
Returns
The number of vehicles that could be inserted into the net

Definition at line 127 of file MSInsertionControl.cpp.

References MSRoutingEngine::isEnabled(), myEmitCandidates, myPendingEmits, and tryInsert().

Referenced by MSNet::simulationStep().

Here is the caller graph for this function:

◆ getFlowPars()

const SUMOVehicleParameter * MSInsertionControl::getFlowPars ( const std::string &  id) const

return parameters for the given flow

Definition at line 439 of file MSInsertionControl.cpp.

References hasFlow(), and myFlows.

Referenced by MSRouteHandler::addRideOrTransport().

Here is the caller graph for this function:

◆ getFlowRNG()

SumoRNG* MSInsertionControl::getFlowRNG ( )
inline

retrieve internal RNG

Definition at line 169 of file MSInsertionControl.h.

References myFlowRNG.

Referenced by MSStateHandler::myStartElement().

Here is the caller graph for this function:

◆ getLastFlowVehicle()

SUMOVehicle * MSInsertionControl::getLastFlowVehicle ( const std::string &  id) const

return the last vehicle for the given flow

Definition at line 451 of file MSInsertionControl.cpp.

References MSNet::getInstance(), MSVehicleControl::getVehicle(), MSNet::getVehicleControl(), myFlowIDs, and toString().

Referenced by MSStageDriving::proceed().

Here is the caller graph for this function:

◆ getPendingEmits()

int MSInsertionControl::getPendingEmits ( const MSLane lane)

return the number of pending emits for the given lane

Definition at line 348 of file MSInsertionControl.cpp.

References MSNet::getCurrentTimeStep(), MSLane::getEdge(), MSNet::getInstance(), MSEdge::getLanes(), myPendingEmits, myPendingEmitsForLane, and myPendingEmitsUpdateTime.

Referenced by GUIEdge::getPendingEmits(), GUILane::getPendingEmits(), and GUILane::getScaleValue().

Here is the caller graph for this function:

◆ getPendingFlowCount()

int MSInsertionControl::getPendingFlowCount ( ) const

Returns the number of flows that are still active.

Returns
number of active flows

Definition at line 309 of file MSInsertionControl.cpp.

References myFlows.

Referenced by LIBSUMO_NAMESPACE::Simulation::getMinExpectedNumber(), and MSNet::simulationState().

Here is the caller graph for this function:

◆ getPendingVehicles()

const MSVehicleContainer::VehicleVector& MSInsertionControl::getPendingVehicles ( ) const
inline

retrieve vehicles waiting for insertion

Definition at line 124 of file MSInsertionControl.h.

References myPendingEmits.

◆ getWaitingVehicleNo()

int MSInsertionControl::getWaitingVehicleNo ( ) const

Returns the number of waiting vehicles.

The sizes of refused emits (sum of vehicles in "myRefusedEmits1" and "myRefusedEmits2") is returned.

Returns
The number of vehicles that could not (yet) be inserted into the net

Definition at line 303 of file MSInsertionControl.cpp.

References myPendingEmits.

Referenced by MSNet::generateStatistics(), GUINet::getParameterWindow(), GUIApplicationWindow::handleEvent_SimulationStep(), MSNet::postSimStepOutput(), MSNet::writeStatistics(), and MSNet::writeSummaryOutput().

Here is the caller graph for this function:

◆ hasFlow()

bool MSInsertionControl::hasFlow ( const std::string &  id) const
inline

checks whether the given flow still exists

Definition at line 174 of file MSInsertionControl.h.

References myFlowIDs.

Referenced by getFlowPars(), and MSNet::hasFlow().

Here is the caller graph for this function:

◆ initScale()

double MSInsertionControl::initScale ( const std::string  vtypeid)
staticprivate

init scale value of flow

Definition at line 95 of file MSInsertionControl.cpp.

References MSNet::getInstance(), MSVehicleType::getParameter(), RandomDistributor< T >::getVals(), MSNet::getVehicleControl(), MSVehicleControl::getVType(), MSVehicleControl::getVTypeDistribution(), MSVehicleControl::hasVTypeDistribution(), and SUMOVTypeParameter::scale.

Referenced by addFlow(), and updateScale().

Here is the caller graph for this function:

◆ operator=()

MSInsertionControl& MSInsertionControl::operator= ( const MSInsertionControl )
private

Invalidated assignment operator.

◆ retractDescheduleDeparture()

void MSInsertionControl::retractDescheduleDeparture ( const SUMOVehicle veh)

reverts a previous call to descheduleDeparture (only needed for departPos="random_free")

Definition at line 320 of file MSInsertionControl.cpp.

References myAbortedEmits.

Referenced by MSLane::insertVehicle().

Here is the caller graph for this function:

◆ saveState()

void MSInsertionControl::saveState ( OutputDevice out)

Saves the current state into the given stream.

Definition at line 383 of file MSInsertionControl.cpp.

References OutputDevice::closeTag(), DEFAULT_VTYPE_ID, OptionsCont::getOptions(), myFlows, STEPS2TIME, SUMO_ATTR_DONE, SUMO_ATTR_END, SUMO_ATTR_INDEX, SUMO_ATTR_NEXT, SUMO_ATTR_NUMBER, SUMO_ATTR_PERIOD, SUMO_ATTR_PROB, SUMO_ATTR_REROUTE, SUMO_ATTR_ROUTE, SUMO_TAG_FLOWSTATE, SUMOTime_MAX, toString(), VEHPARS_FORCE_REROUTE, and OutputDevice::writeAttr().

Referenced by MSStateHandler::saveState().

Here is the caller graph for this function:

◆ tryInsert()

int MSInsertionControl::tryInsert ( SUMOTime  time,
SUMOVehicle veh,
MSVehicleContainer::VehicleVector refusedEmits 
)
private

Tries to emit the vehicle.

If the insertion fails, it is examined whether the reason was a vaporizing edge. If so, the vehicle is deleted. Otherwise, it is checked whether the time the vehicle had to wait so far is larger than the maximum allowed waiting time. If so, the vehicle is deleted, too. If both does not match, the vehicle is reinserted to "refusedEmits" in order to be emitted in next steps.

Parameters
[in]timeThe current simulation time
[in]vehThe vehicle to emit
[in]refusedEmitsContainer to insert vehicles that could not be emitted into
Returns
The number of emitted vehicles (0 or 1)

Definition at line 156 of file MSInsertionControl.cpp.

References MSVehicleControl::deleteVehicle(), SUMOVehicleParameter::depart, SUMOTrafficObject::getEdge(), MSNet::getInstance(), SUMOTrafficObject::getParameter(), SUMOVehicle::getRouteValidity(), MSEdge::insertVehicle(), SUMOVehicle::isOnRoad(), MSEdge::isVaporizing(), myAbortedEmits, myEagerInsertionCheck, myMaxDepartDelay, myMaxVehicleNumber, myVehicleControl, MSBaseVehicle::ROUTE_START_INVALID_LANE, MSBaseVehicle::ROUTE_START_INVALID_PERMISSIONS, and MSEdge::setLastFailedInsertionTime().

Referenced by emitVehicles().

Here is the caller graph for this function:

◆ updateScale()

void MSInsertionControl::updateScale ( const std::string  vtypeid)

updates the flow scale value to keep track of TraCI-induced change

Definition at line 117 of file MSInsertionControl.cpp.

References initScale(), and myFlows.

Referenced by MSVehicleType::setScale().

Here is the caller graph for this function:

Field Documentation

◆ myAbortedEmits

std::set<const SUMOVehicle*> MSInsertionControl::myAbortedEmits
private

Set of vehicles which shall not be inserted anymore.

Definition at line 233 of file MSInsertionControl.h.

Referenced by clearState(), descheduleDeparture(), retractDescheduleDeparture(), and tryInsert().

◆ myAllVeh

MSVehicleContainer MSInsertionControl::myAllVeh
private

All loaded vehicles sorted by their departure time.

Definition at line 224 of file MSInsertionControl.h.

Referenced by add(), alreadyDeparted(), checkCandidates(), and clearState().

◆ myEagerInsertionCheck

bool MSInsertionControl::myEagerInsertionCheck
private

Whether an edge on which a vehicle could not depart should be ignored in the same step.

Definition at line 257 of file MSInsertionControl.h.

Referenced by checkCandidates(), and tryInsert().

◆ myEmitCandidates

std::set<SUMOVehicle*> MSInsertionControl::myEmitCandidates
private

Buffer for vehicles that may be inserted in the current step.

Definition at line 230 of file MSInsertionControl.h.

Referenced by checkCandidates(), clearState(), and emitVehicles().

◆ myFlowIDs

std::map<std::string, int> MSInsertionControl::myFlowIDs
private

Cache for periodical vehicle ids and their most recent index for quicker checking.

Definition at line 251 of file MSInsertionControl.h.

Referenced by addFlow(), clearState(), determineCandidates(), getLastFlowVehicle(), and hasFlow().

◆ myFlowRNG

SumoRNG MSInsertionControl::myFlowRNG
private

A random number generator for probabilistic flows.

Definition at line 279 of file MSInsertionControl.h.

Referenced by addFlow(), determineCandidates(), getFlowRNG(), and MSInsertionControl().

◆ myFlows

std::vector<Flow> MSInsertionControl::myFlows
private

Container for periodical vehicle parameters.

Definition at line 248 of file MSInsertionControl.h.

Referenced by adaptIntermodalRouter(), addFlow(), clearState(), determineCandidates(), getFlowPars(), getPendingFlowCount(), saveState(), updateScale(), and ~MSInsertionControl().

◆ myMaxDepartDelay

SUMOTime MSInsertionControl::myMaxDepartDelay
private

The maximum waiting time; vehicles waiting longer are deleted (-1: no deletion)

Definition at line 254 of file MSInsertionControl.h.

Referenced by tryInsert().

◆ myMaxRandomDepartOffset

SUMOTime MSInsertionControl::myMaxRandomDepartOffset
private

The maximum random offset to be added to vehicles departure times (non-negative)

Definition at line 269 of file MSInsertionControl.h.

Referenced by computeRandomDepartOffset(), and MSInsertionControl().

◆ myMaxVehicleNumber

int MSInsertionControl::myMaxVehicleNumber
private

Storage for maximum vehicle number.

Definition at line 260 of file MSInsertionControl.h.

Referenced by tryInsert().

◆ myPendingEmits

MSVehicleContainer::VehicleVector MSInsertionControl::myPendingEmits
private

Buffers for vehicles that could not be inserted.

Definition at line 227 of file MSInsertionControl.h.

Referenced by alreadyDeparted(), checkCandidates(), clearPendingVehicles(), clearState(), emitVehicles(), getPendingEmits(), getPendingVehicles(), and getWaitingVehicleNo().

◆ myPendingEmitsForLane

std::map<const MSLane*, int> MSInsertionControl::myPendingEmitsForLane
private

the number of pending emits for each edge in the current time step

Definition at line 266 of file MSInsertionControl.h.

Referenced by getPendingEmits().

◆ myPendingEmitsUpdateTime

SUMOTime MSInsertionControl::myPendingEmitsUpdateTime
private

Last time at which pending emits for each edge where counted.

Definition at line 263 of file MSInsertionControl.h.

Referenced by getPendingEmits().

◆ myVehicleControl

MSVehicleControl& MSInsertionControl::myVehicleControl
private

The assigned vehicle control (needed for vehicle re-insertion and deletion)

Definition at line 221 of file MSInsertionControl.h.

Referenced by clearPendingVehicles(), and tryInsert().


The documentation for this class was generated from the following files: