55#define DEBUG_COND (true)
71#define TAXI_SERVICE "taxi"
72#define TAXI_SERVICE_PREFIX "taxi:"
73#define SWAP_THRESHOLD 5
87 oc.
addDescription(
"device.taxi.dispatch-algorithm",
"Taxi Device",
TL(
"The dispatch algorithm [greedy|greedyClosest|greedyShared|routeExtension|traci]"));
90 oc.
addDescription(
"device.taxi.dispatch-algorithm.output",
"Taxi Device",
TL(
"Write information from the dispatch algorithm to FILE"));
93 oc.
addDescription(
"device.taxi.dispatch-algorithm.params",
"Taxi Device",
TL(
"Load dispatch algorithm parameters in format KEY1:VALUE1[,KEY2:VALUE]"));
96 oc.
addDescription(
"device.taxi.dispatch-period",
"Taxi Device",
TL(
"The period between successive calls to the dispatcher"));
99 oc.
addDescription(
"device.taxi.dispatch-keep-unreachable",
"Taxi Device",
TL(
"The time before aborting unreachable reservations"));
102 oc.
addDescription(
"device.taxi.idle-algorithm",
"Taxi Device",
TL(
"The behavior of idle taxis [stop|randomCircling|taxistand]"));
105 oc.
addDescription(
"device.taxi.idle-algorithm.output",
"Taxi Device",
TL(
"Write information from the idling algorithm to FILE"));
115 into.push_back(device);
130 if (personCapacity < 1 && containerCapacity < 1) {
142 std::string algo = oc.
getString(
"device.taxi.dispatch-algorithm");
145 if (algo ==
"greedy") {
147 }
else if (algo ==
"greedyClosest") {
149 }
else if (algo ==
"greedyShared") {
151 }
else if (algo ==
"routeExtension") {
153 }
else if (algo ==
"traci") {
168 return lines.size() == 1 && (
175 const std::set<std::string>& lines,
179 const MSEdge* from,
double fromPos,
181 const MSEdge* to,
double toPos,
183 const std::string& group) {
188 throw ProcessError(
"Cannot add taxi reservation for " + std::string(person->
isPerson() ?
"person" :
"container")
189 +
" '" + person->
getID() +
"' because destination edge '" + to->
getID() +
"'"
190 +
" does not permit taxi access");
193 throw ProcessError(
"Cannot add taxi reservation for " + std::string(person->
isPerson() ?
"person" :
"container")
194 +
" '" + person->
getID() +
"' because origin edge '" + from->
getID() +
"'"
195 +
" does not permit taxi access");
200 if (fromStop !=
nullptr && &fromStop->
getLane().
getEdge() == from) {
204 myDispatcher->
addReservation(person, reservationTime, pickupTime, earliestPickupTime, from, fromPos, fromStop, to, toPos, toStop, group, *lines.begin(),
myMaxCapacity,
myMaxContainerCapacity);
209 const std::set<std::string>& lines,
210 const MSEdge* from,
double fromPos,
211 const MSEdge* to,
double toPos,
212 const std::string& group) {
220 const std::set<std::string>& lines,
221 const MSEdge* from,
double fromPos,
222 const MSEdge* to,
double toPos,
223 const std::string& group,
double newFromPos) {
232 std::vector<MSDevice_Taxi*> active;
234 if (taxi->getHolder().hasDeparted()) {
235 active.push_back(taxi);
262 taxi->myState =
EMPTY;
271 std::string defaultServiceEnd =
toString(1e15);
272 const std::string algo = holder.
getStringParam(
"device.taxi.idle-algorithm");
273 if (algo ==
"stop") {
275 }
else if (algo ==
"randomCircling") {
282 }
else if (algo ==
"taxistand") {
283 const std::string rerouterID = holder.
getStringParam(
"device.taxi.stands-rerouter");
284 if (rerouterID.empty()) {
285 throw ProcessError(
"Idle algorithm '" + algo +
"' requires a rerouter id to be defined using device param 'stands-rerouter' for vehicle '" +
myHolder.
getID() +
"'");
288 throw ProcessError(
"Unknown rerouter '" + rerouterID +
"' when loading taxi stands for vehicle '" +
myHolder.
getID() +
"'");
331 std::cout <<
" persons=" <<
toString(res->persons) <<
"\n";
367 tmpEdges.push_back(rerouteOrigin);
372 std::map<const MSTransportable*, int> nOccur;
378 throw ProcessError(
TLF(
"Invalid Re-dispatch for existing customer '%' with a new reservation", person->getID()));
385 for (
auto item : nOccur) {
386 std::cout <<
" previousCustomer=" << item.first->getID() <<
" occurs=" << item.second <<
"\n";
390 if (nOccur.size() == 0) {
396 std::cout <<
" re-dispatch with route-extension\n";
401 std::set<const MSTransportable*> onBoard;
404 onBoard.insert(onBoardP.begin(), onBoardP.end());
405 onBoard.insert(onBoardC.begin(), onBoardC.end());
406 std::set<const MSTransportable*> redundantPickup;
407 for (
auto item : nOccur) {
408 if (item.second == 1) {
410 if (onBoard.count(item.first) == 0) {
411 throw ProcessError(
TLF(
"Re-dispatch did not mention pickup for existing customer '%'", item.first->getID()));
413 }
else if (item.second == 2) {
414 if (onBoard.count(item.first) == 0) {
419 redundantPickup.insert(item.first);
422 throw ProcessError(
"Re-dispatch mentions existing customer '" + item.first->getID() +
"' " +
toString(item.second) +
" times");
426 if (!redundantPickup.empty()) {
427 for (
auto it = reservations.begin(); it != reservations.end();) {
428 bool isRedundant =
false;
430 if (redundantPickup.count(person) != 0) {
437 redundantPickup.erase(person);
439 it = reservations.erase(it);
450 tmpEdges.push_back(rerouteOrigin);
454 std::cout <<
" re-dispatch from scratch\n";
459 std::vector<std::string> missing;
461 if (nOccur.count(c) == 0) {
462 missing.push_back(c->getID());
470 bool hasPickup =
false;
473 bool isPickup =
false;
482 prepareStop(tmpEdges, stops, lastPos, res->from, res->fromPos, res->fromStop,
"pickup " +
toString(res->persons) +
" (" + res->id +
")", res, isPickup);
484 if (transportable->isPerson()) {
485 stops.back().triggered =
true;
487 stops.back().containerTriggered =
true;
489 stops.back().permitted.insert(transportable->getID());
492 std::set<const MSTransportable*> persons = res->persons;
493 for (
auto itr = persons.begin(); itr != persons.end(); itr++) {
494 stops.back().awaitedPersons.insert((*itr)->getID());
498 if (stops.back().duration == -1) {
503 prepareStop(tmpEdges, stops, lastPos, res->to, res->toPos, res->toStop,
"dropOff " +
toString(res->persons) +
" (" + res->id +
")", res, isPickup);
509 std::cout <<
" tmpEdges=" <<
toString(tmpEdges) <<
"\n";
548 std::set<const MSTransportable*> customersToBeRemoved;
549 std::set<const MSTransportable*> onBoard;
554 if (t->getID() == tID && onBoard.count(t) == 0) {
555 customersToBeRemoved.insert(t);
559 if (!customersToBeRemoved.empty()) {
563 for (
auto t : customersToBeRemoved) {
584 bool fulfilled =
false;
585 if ((*resIt)->persons.size() == 1 && (*resIt)->persons.count(t) != 0) {
639 if (*stop.edge == res->
from
645 }
else if (*stop.edge == res->
to
658 double& lastPos,
const MSEdge* stopEdge,
double stopPos,
660 const std::string& action,
const Reservation* res,
const bool isPickup) {
661 assert(!edges.empty());
662 if (stopPlace !=
nullptr && &stopPlace->
getLane().
getEdge() == stopEdge) {
665 if (stopPos < lastPos && stopPos + NUMERICAL_EPS >= lastPos) {
668 bool addedEdge =
false;
672 double distToStop = stopPos - lastPos;
677 if (stopEdge != edges.back()) {
678 distToStop += edges.back()->getLength();
679 if (distToStop < brakeGap) {
684 for (
int i = 1; i < (int)toFirstStop.size() - 1; i++) {
685 distToStop += toFirstStop[i]->getLength();
689 if (distToStop < brakeGap) {
692 edges.push_back(stopEdge);
697 if (stopEdge == edges.back() && !stops.empty()) {
698 if (stopPos >= lastPos && stopPos <= stops.back().endPos) {
700 stops.back().actType +=
"," + action;
706 stops.back().actType +=
"," + action;
710 if (!addedEdge && (stopEdge != edges.back() || stopPos < lastPos)) {
712 edges.push_back(stopEdge);
717 if (stopPlace !=
nullptr && &stopPlace->
getLane().
getEdge() == stopEdge) {
737 if (isPickup && earliestPickupTime >= 0) {
742 stops.push_back(stop);
749 if (allowedLanes ==
nullptr) {
752 return allowedLanes->front();
802 double newPos,
double ) {
811 const double timeOnLane,
814 const double travelledDistanceFrontOnLane,
854 WRITE_WARNINGF(
TL(
"All customers left vehicle '%' at time=% but there are % remaining stops"),
876 bool fulfilled =
true;
897 if (swapGroup !=
"") {
900 double maxSaving = 0;
903 if (taxi->getHolder().hasDeparted() && taxi->getState() ==
PICKUP
904 && taxi->getHolder().getStringParam(
"device.taxi.swapGroup",
false,
"") == swapGroup) {
911 if (!toPickup2.empty()) {
913 const double saving = cost - cost2 - stopTime;
915 if (saving > maxSaving) {
927 std::cout <<
toString(res->persons) <<
"; ";
953 if (stop.pars.permitted.size() > 0) {
962 if (tripinfoOut !=
nullptr) {
973 if (key ==
"customers") {
975 }
else if (key ==
"occupiedDistance") {
977 }
else if (key ==
"occupiedTime") {
979 }
else if (key ==
"state") {
981 }
else if (key ==
"currentCustomers") {
983 }
else if (key ==
"pickUpDuration") {
985 }
else if (key ==
"dropOffDuration") {
1000 if (key ==
"pickUpDuration" || key ==
"dropOffDuration") {
#define TAXI_SERVICE_PREFIX
std::vector< const MSEdge * > ConstMSEdgeVector
#define WRITE_WARNINGF(...)
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
@ SVC_TAXI
vehicle is a taxi
std::vector< SUMOVehicleParameter::Stop > StopParVector
const int STOP_PERMITTED_SET
@ GIVEN
The time is given.
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_CONTAINER_STOP
A container stop.
@ SUMO_TAG_BUS_STOP
A bus stop.
@ SUMO_TAG_PARKING_AREA
A parking area.
@ SUMO_TAG_TRAIN_STOP
A train stop (alias for bus stop)
std::string joinToStringSorting(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
std::string joinNamedToStringSorting(const std::set< T * > &ns, const T_BETWEEN &between)
Base (microsim) event class.
The base class for microscopic and mesoscopic vehicles.
const std::list< MSStop > & getStops() const
A device that performs vehicle rerouting based on current edge speeds.
void setActive(bool active)
A device which collects info on the vehicle trip (mainly on departure and arrival)
void prepareStop(ConstMSEdgeVector &edges, StopParVector &stops, double &lastPos, const MSEdge *stopEdge, double stopPos, const MSStoppingPlace *stopPlace, const std::string &action, const Reservation *res, const bool isPickup)
prepare stop for the given action
static void initDispatch()
initialize the dispatch algorithm
void addCustomer(const MSTransportable *t, const Reservation *res)
add person after extending reservation
static Command * myDispatchCommand
The repeated call to the dispatcher.
void customerArrived(const MSTransportable *person)
called by MSDevice_Transportable upon unloading a person
static SUMOTime triggerDispatch(SUMOTime currentTime)
period command to trigger the dispatch algorithm
void dispatch(const Reservation &res)
service the given reservation
std::set< const MSTransportable * > myCustomers
the customer of the current reservation
SUMOTime myServiceEnd
the time at which the taxi service ends (end the vehicle may leave the simulation)
static void updateReservationFromPos(MSTransportable *person, const std::set< std::string > &lines, const MSEdge *from, double fromPos, const MSEdge *to, double toPos, const std::string &group, double newFromPos)
update reservation's fromPos due to pre-booking
bool cancelCustomer(const MSTransportable *t)
remove person from reservations
void generateOutput(OutputDevice *tripinfoOut) const
Called on writing tripinfo output.
static std::set< std::string > myVClassWarningVTypes
void dispatchShared(std::vector< const Reservation * > reservations)
service the given reservations
static void addReservation(MSTransportable *person, const std::set< std::string > &lines, SUMOTime reservationTime, SUMOTime pickupTime, SUMOTime earliestPickupTime, const MSEdge *from, double fromPos, const MSStoppingPlace *fromStop, const MSEdge *to, double toPos, const MSStoppingPlace *toStop, const std::string &group)
add new reservation
MSIdling * myIdleAlgorithm
algorithm for controlling idle behavior
std::set< const Reservation * > myCurrentReservations
reservations currently being served
bool notifyMove(SUMOTrafficObject &veh, double oldPos, double newPos, double newSpeed)
Checks for waiting steps when the vehicle moves.
bool hasFuturePickup()
whether the taxi has another pickup scheduled
void cancelCurrentCustomers()
remove the persons the taxi is currently waiting for from reservations
std::vector< const Reservation * > myLastDispatch
the last dispatch order
static MSDispatch * myDispatcher
the dispatch algorithm
int myCustomersServed
number of customers that were served
void updateMove(const SUMOTime traveltime, const double travelledDist)
void notifyMoveInternal(const SUMOTrafficObject &veh, const double frontOnLane, const double timeOnLane, const double meanSpeedFrontOnLane, const double meanSpeedVehicleOnLane, const double travelledDistanceFrontOnLane, const double travelledDistanceVehicleOnLane, const double meanLengthOnLane)
Internal notification about the vehicle moves, see MSMoveReminder::notifyMoveInternal()
static int myMaxContainerCapacity
MSDevice_Routing * myRoutingDevice
routing device (if the vehicle has one)
bool isEmpty()
whether the taxi is empty
const std::string deviceName() const
return the name for this type of device
static std::vector< MSDevice_Taxi * > myFleet
static void removeReservation(MSTransportable *person, const std::set< std::string > &lines, const MSEdge *from, double fromPos, const MSEdge *to, double toPos, const std::string &group)
retract reservation
static SUMOTime myDispatchPeriod
the time between successive calls to the dispatcher
bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Saves departure info on insertion.
static void cleanup()
resets counters
static bool isReservation(const std::set< std::string > &lines)
whether the given lines description is a taxi call
double myOccupiedDistance
distance driven with customers
MSDevice_Taxi(SUMOVehicle &holder, const std::string &id)
Constructor.
static bool hasFleet()
returns whether taxis have been loaded
static void allCustomersErased()
signal the end of the simulation and the removal of all customers
bool allowsBoarding(const MSTransportable *t) const
whether the given person is allowed to board this taxi
static bool hasServableReservations()
check whether there are still (servable) reservations in the system
void customerEntered(const MSTransportable *t)
called by MSDevice_Transportable upon loading a person
bool compatibleLine(const Reservation *res)
whether the given reservation is compatible with the taxi line
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Taxi-options.
bool myIsStopped
whether the vehicle is currently stopped
void setParameter(const std::string &key, const std::string &value)
try to set the given parameter for this device. Throw exception for unsupported key
SUMOTime myOccupiedTime
time spent driving with customers
bool myReachedServiceEnd
whether the taxi has reached its schedule service end
~MSDevice_Taxi()
Destructor.
MSLane * getStopLane(const MSEdge *edge, const std::string &action)
determine stopping lane for taxi
void checkTaskSwap()
optionally swap tasks when a taxi becomes idle
std::string getParameter(const std::string &key) const
try to retrieve the given parameter from this device. Throw exception for unsupported key
static void insertDefaultAssignmentOptions(const std::string &deviceName, const std::string &optionsTopic, OptionsCont &oc, const bool isPerson=false)
Adds common command options that allow to assign devices to vehicles.
static bool equippedByDefaultAssignmentOptions(const OptionsCont &oc, const std::string &deviceName, DEVICEHOLDER &v, bool outputOptionSet, const bool isPerson=false)
Determines whether a vehicle should get a certain device.
A dispatch algorithm that services the reservations with the shortest traveltime-to-pickup first.
A dispatch algorithm that services customers in reservation order and always sends the closest availa...
A dispatch algorithm that services customers in reservation order and always sends the closest availa...
An algorithm that performs distpach for a taxi fleet.
void swappedRunning(const Reservation *res, MSDevice_Taxi *taxi)
virtual std::string removeReservation(MSTransportable *person, const MSEdge *from, double fromPos, const MSEdge *to, double toPos, std::string group)
remove person from reservation. If the whole reservation is removed, return its id
virtual Reservation * updateReservationFromPos(MSTransportable *person, const MSEdge *from, double fromPos, const MSEdge *to, double toPos, std::string group, double newFromPos)
update fromPos of the person's reservation. TODO: if there is already a reservation with the newFromP...
virtual SUMOAbstractRouter< MSEdge, SUMOVehicle > & getRouter() const
virtual Reservation * addReservation(MSTransportable *person, SUMOTime reservationTime, SUMOTime pickupTime, SUMOTime earliestPickupTime, const MSEdge *from, double fromPos, const MSStoppingPlace *fromStop, const MSEdge *to, double toPos, const MSStoppingPlace *tostop, std::string group, const std::string &line, int maxCapacity, int maxContainerCapacity)
add a new reservation
bool hasServableReservations()
check whether there are still (servable) reservations in the system
virtual void fulfilledReservation(const Reservation *res)
erase reservation from storage
virtual void computeDispatch(SUMOTime now, const std::vector< MSDevice_Taxi * > &fleet)=0
computes dispatch and updates reservations
A road/street connecting two junctions.
SVCPermissions getPermissions() const
Returns the combined permissions of all lanes of this edge.
const std::vector< MSLane * > * allowedLanes(const MSEdge &destination, SUMOVehicleClass vclass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Get the allowed lanes to reach the destination-edge.
double getLength() const
return the length of the edge
virtual void addEvent(Command *operation, SUMOTime execTimeStep=-1)
Adds an Event.
virtual void idle(MSDevice_Taxi *taxi)=0
computes Idling and updates reservations
Representation of a lane in the micro simulation.
double getLength() const
Returns the lane's length.
MSEdge & getEdge() const
Returns the lane's edge.
Notification
Definition of a vehicle state.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
MSEventControl * getEndOfTimestepEvents()
Returns the event control for events executed at the end of a time step.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
const ConstMSEdgeVector & getEdges() const
static MSVehicleRouter & getRouterTT(const int rngIndex, SUMOVehicleClass svc, const Prohibitions &prohibited={})
return the vehicle router instance
bool triggered
whether an arriving person lets the vehicle continue
bool containerTriggered
whether an arriving container lets the vehicle continue
bool joinTriggered
whether coupling another vehicle (train) the vehicle continue
MSRouteIterator edge
The edge in the route to stop at.
SUMOTime endBoarding
the maximum time at which persons may board this vehicle
SUMOTime duration
The stopping duration.
const SUMOVehicleParameter::Stop pars
The stop parameter.
A lane area vehicles can halt at.
double getBeginLanePosition() const
Returns the begin position of this stop.
SumoXMLTag getElement() const
return the type of this stopping place
double getEndLanePosition() const
Returns the end position of this stop.
const MSLane & getLane() const
Returns the lane this stop is located at.
bool isPerson() const override
Whether it is a person.
Reroutes traffic objects passing an edge.
static const std::map< std::string, MSTriggeredRerouter * > & getInstances()
return all rerouter instances
Abstract in-vehicle device.
SUMOVehicle & myHolder
The vehicle that stores the device.
SUMOVehicle & getHolder() const
Returns the vehicle that holds this device.
int getPersonCapacity() const
Get this vehicle type's person capacity.
const std::string & getID() const
Returns the name of the vehicle type.
double getLength() const
Get vehicle's length [m].
int getContainerCapacity() const
Get this vehicle type's container capacity.
const std::string & getID() const
Returns the id.
A storage for options typed value containers)
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
void doRegister(const std::string &name, Option *o)
Adds an option under the given name.
void addOptionSubTopic(const std::string &topic)
Adds an option subtopic.
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.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
An upper class for objects with additional parameters.
void setParametersStr(const std::string ¶msString, const std::string kvsep="=", const std::string sep="|")
set the inner key/value map in string format "key1=value1|key2=value2|...|keyN=valueN"
const Parameterised::Map & getParametersMap() const
Returns the inner key/value map.
virtual bool compute(const E *from, const E *to, const V *const vehicle, SUMOTime msTime, std::vector< const E * > &into, bool silent=false)=0
Builds the route between the given edges using the minimum effort at the given time The definition of...
double recomputeCostsPos(const std::vector< const E * > &edges, const V *const v, double fromPos, double toPos, SUMOTime msTime, double *lengthp=nullptr) const
Representation of a vehicle, person, or container.
virtual const MSVehicleType & getVehicleType() const =0
Returns the object's "vehicle" type.
std::string getStringParam(const std::string ¶mName, const bool required=false, const std::string &deflt="") const
Retrieve a string parameter for the traffic object.
virtual const MSLane * getLane() const =0
Returns the lane the object is currently at.
virtual int getRNGIndex() const =0
virtual MSDevice * getDevice(const std::type_info &type) const =0
Returns a device of the given type if it exists or nullptr if not.
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 int getRoutePosition() const =0
return index of edge within route
double getFloatParam(const std::string ¶mName, const bool required=false, const double deflt=INVALID_DOUBLE, bool checkDist=true) const
Retrieve a floating point parameter for the traffic object.
virtual const MSEdge * getEdge() const =0
Returns the edge the object is currently at.
virtual double getPositionOnLane() const =0
Get the object's position along the lane.
Representation of a vehicle.
virtual ConstMSEdgeVector::const_iterator getRerouteOrigin() const =0
Returns the starting point for reroutes (usually the current edge)
virtual bool reroute(SUMOTime t, const std::string &info, SUMOAbstractRouter< MSEdge, SUMOVehicle > &router, const bool onInit=false, const bool withTaz=false, const bool silent=false, const MSEdge *sink=nullptr)=0
Performs a rerouting using the given router.
virtual bool replaceRouteEdges(ConstMSEdgeVector &edges, double cost, double savings, const std::string &info, bool onInit=false, bool check=false, bool removeStops=true, std::string *msgReturn=nullptr)=0
Replaces the current route by the given edges.
virtual const std::vector< MSTransportable * > & getContainers() const =0
retrieve riding containers
virtual bool isStopped() const =0
Returns whether the vehicle is at a stop and waiting for a person or container to continue.
virtual bool hasStops() const =0
Returns whether the vehicle has to stop somewhere.
virtual bool addStop(const SUMOVehicleParameter::Stop &stopPar, std::string &errorMsg, SUMOTime untilOffset=0, ConstMSEdgeVector::const_iterator *searchStart=0)=0
Adds a stop.
virtual const std::list< MSStop > & getStops() const =0
virtual int getPersonNumber() const =0
Returns the number of persons.
virtual void unregisterWaiting()=0
mark vehicle as active
virtual bool isStoppedTriggered() const =0
Returns whether the vehicle is at a stop and waiting for a person or container to continue.
virtual const std::vector< MSTransportable * > & getPersons() const =0
retrieve riding persons
virtual int getContainerNumber() const =0
Returns the number of containers.
virtual const MSStop & getNextStop() const =0
virtual MSStop & getNextStopMutable()=0
virtual double getBrakeGap(bool delayed=false) const =0
get distance for coming to a stop (used for rerouting checks)
virtual bool isStoppedParking() const =0
Returns whether the vehicle is at a stop and parking.
virtual const ConstMSEdgeVector::const_iterator & getCurrentRouteEdge() const =0
Returns an iterator pointing to the current edge in this vehicles route.
virtual const SUMOVehicleParameter::Stop * getNextStopParameter() const =0
Returns parameters of the next stop or nullptr.
virtual const MSRoute & getRoute() const =0
Returns the current route.
virtual bool abortNextStop(int nextStopIndex=0)=0
deletes the next stop at the given index if it exists
Definition of vehicle stop (position and duration)
ParkingType parking
whether the vehicle is removed from the net while stopping
std::string lane
The lane to stop at.
SUMOTime extension
The maximum time extension for boarding / loading.
std::string parkingarea
(Optional) parking area if one is assigned to the stop
double startPos
The stopping position start.
std::set< std::string > permitted
IDs of persons or containers that may board/load at this stop.
int index
at which position in the stops list
std::string actType
act Type (only used by Persons) (used by netedit)
double endPos
The stopping position end.
SUMOTime waitUntil
The earliest pickup time for a taxi stop.
std::set< std::string > awaitedPersons
IDs of persons the vehicle has to wait for until departing.
std::string busstop
(Optional) bus stop if one is assigned to the stop
std::string containerstop
(Optional) container stop if one is assigned to the stop
Structure representing possible vehicle parameter.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
std::string line
The vehicle's line (mainly for public transport)
static ParkingType parseParkingType(const std::string &value)
parses parking type value
A wrapper for a Command function.
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
#define UNUSED_PARAMETER(x)
SUMOTime earliestPickupTime