50 #define DEBUG_COND (isSelected()) 58 std::set<std::string> MSBaseVehicle::myShallTraceMoveReminders;
69 throw ProcessError(
"getPreviousSpeed() is not available for non-MSVehicles.");
90 , myTraceMoveReminders(myShallTraceMoveReminders.count(pars->id) > 0)
101 msg =
"Vehicle '" + pars->
id +
"' has no valid route. " + msg;
179 if (source ==
nullptr) {
183 if (sink ==
nullptr) {
190 double firstPos = -1;
193 if (stops.size() > 0) {
196 const bool skipFirst = stops.front() == source && sourcePos < firstPos;
197 const bool skipLast = stops.back() == sink &&
myArrivalPos > lastPos;
201 <<
" source=" << source->
getID() <<
" sourcePos=" << sourcePos <<
" firstPos=" << firstPos <<
" arrivalPos=" <<
myArrivalPos <<
" lastPos=" << lastPos
205 if (stops.size() == 1 && (skipFirst || skipLast)) {
209 stops.erase(stops.begin());
212 stops.erase(stops.end() - 1);
221 if (viaEdge == source || viaEdge == sink) {
224 assert(viaEdge != 0);
226 throw ProcessError(
"Vehicle '" +
getID() +
"' is not allowed on any lane of via edge '" + viaEdge->
getID() +
"'.");
228 stops.push_back(viaEdge);
236 if (into.size() > 0) {
238 edges.insert(edges.end(), into.begin(), into.end());
239 if ((*s)->isTazConnector()) {
240 source = into.back();
246 std::string error =
"Vehicle '" +
getID() +
"' has no valid route from edge '" + source->
getID() +
"' to stop edge '" + (*s)->getID() +
"'.";
251 edges.push_back(source);
256 router.
compute(source, sink,
this, t, edges, silent);
257 if (edges.empty() && silent) {
260 if (!edges.empty() && edges.front()->isTazConnector()) {
261 edges.erase(edges.begin());
263 if (!edges.empty() && edges.back()->isTazConnector()) {
267 const double previousCost = onInit ? routeCost : router.
recomputeCosts(oldEdgesRemaining,
this, t);
268 const double savings = previousCost - routeCost;
298 std::string
id =
getID();
302 if (
myRoute->
getID().find(
"!var#") != std::string::npos) {
307 int oldSize = (int)edges.size();
310 if (origin != *
myCurrEdge && edges.front() == origin) {
312 oldSize = (int)edges.size();
338 if (!
replaceRoute(newRoute, info, onInit, (
int)edges.
size() - oldSize,
false, removeStops)) {
405 if (route ==
nullptr) {
408 start = route->
begin();
414 msg =
"No connection between edge '" + (*e)->getID() +
"' and edge '" + (*(e + 1))->getID() +
"'.";
421 if ((*e)->prohibits(
this)) {
422 msg =
"Edge '" + (*e)->getID() +
"' prohibits.";
433 if (myTraceMoveReminders) {
434 traceMoveReminder(
"add", rem, 0,
true);
444 if (r->first == rem) {
446 if (myTraceMoveReminders) {
447 traceMoveReminder(
"remove", rem, 0,
false);
460 if (rem->first->notifyEnter(*
this, reason, enteredLane)) {
462 if (myTraceMoveReminders) {
463 traceMoveReminder(
"notifyEnter", rem->first, rem->second,
true);
469 if (myTraceMoveReminders) {
470 traceMoveReminder(
"notifyEnter", rem->first, rem->second,
false);
485 const double lastLaneLength = lanes[0]->getLength();
489 WRITE_WARNING(
"Vehicle '" +
getID() +
"' will not be able to arrive at the given position!");
514 for (std::vector<MSLane*>::const_iterator l = lanes.begin(); l != lanes.end(); ++l) {
519 WRITE_WARNING(
"Vehicle '" +
getID() +
"' will not be able to arrive with the given speed!");
534 if (
typeid(*dev) == type) {
561 std::string errorMsg;
565 if (errorMsg !=
"") {
571 std::string errorMsg;
572 if (!
addStop(*i, errorMsg, untilOffset) && !ignoreStopErrors) {
575 if (errorMsg !=
"") {
588 std::vector<std::string>
590 std::vector<std::string> ret;
591 const std::vector<MSTransportable*>& persons =
getPersons();
592 for (std::vector<MSTransportable*>::const_iterator it_p = persons.begin(); it_p != persons.end(); ++it_p) {
593 ret.push_back((*it_p)->getID());
617 const std::vector<MSTransportable*>&
627 const std::vector<MSTransportable*>&
641 if (dev->deviceName() == deviceName) {
652 if (deviceName ==
"rerouting") {
658 assert(routingDevice != 0);
662 throw InvalidArgument(
"Creating device of type '" + deviceName +
"' is not supported");
671 if (dev->deviceName() == deviceName) {
672 return dev->getParameter(key);
675 throw InvalidArgument(
"No device of type '" + deviceName +
"' exists");
682 if (dev->deviceName() == deviceName) {
683 dev->setParameter(key, value);
687 throw InvalidArgument(
"No device of type '" + deviceName +
"' exists");
693 assert(type !=
nullptr);
714 if (lane ==
nullptr) {
723 MSBaseVehicle::initMoveReminderOutput(
const OptionsCont& oc) {
724 if (oc.
isSet(
"movereminder-output.vehicles")) {
725 const std::vector<std::string> vehicles = oc.
getStringVector(
"movereminder-output.vehicles");
726 myShallTraceMoveReminders.insert(vehicles.begin(), vehicles.end());
732 MSBaseVehicle::traceMoveReminder(
const std::string& type,
MSMoveReminder* rem,
double pos,
bool keep)
const {
std::vector< MSVehicleDevice * > myDevices
The devices this vehicle has.
The departure is person triggered.
virtual bool addStop(const SUMOVehicleParameter::Stop &stopPar, std::string &errorMsg, SUMOTime untilOffset=0, bool collision=false, ConstMSEdgeVector::const_iterator *searchStart=0)=0
Adds a stop.
void removeReminder(MSMoveReminder *rem)
Removes a MoveReminder dynamically.
const std::vector< MSTransportable * > & getTransportables() const
Returns the list of transportables using this vehicle.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
int getContainerNumber() const
Returns the number of containers.
void reroute(SUMOTime t, const std::string &info, SUMOAbstractRouter< MSEdge, SUMOVehicle > &router, const bool onInit=false, const bool withTaz=false, const bool silent=false)
Performs a rerouting using the given router.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice *> &into)
Build devices for the given vehicle, if needed.
const int VEHPARS_FORCE_REROUTE
int size() const
Return the number of passengers / containers.
bool hasValidRoute(std::string &msg, const MSRoute *route=0) const
Validates the current or given route.
MoveReminderCont myMoveReminders
Currently relevant move reminders.
const ConstMSEdgeVector & getEdges() const
void replaceParameter(const SUMOVehicleParameter *newParameter)
replace the vehicle parameter (deleting the old one)
bool hasDeparted() const
Returns whether this vehicle has already departed.
void release() const
deletes the route if there are no further references to it
static bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
void setDeviceParameter(const std::string &deviceName, const std::string &key, const std::string &value)
try to set the given parameter from any of the vehicles devices, raise InvalidArgument if no device p...
ArrivalLaneDefinition arrivalLaneProcedure
Information how the vehicle shall choose the lane to arrive on.
std::mt19937 * getRNG() const
static double rand(std::mt19937 *rng=0)
Returns a random real number in [0, 1)
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
double myArrivalPos
The position on the destination lane where the vehicle stops.
int parametersSet
Information for the router which parameter were set, TraCI may modify this (whe changing color) ...
Notification
Definition of a vehicle state.
A device that performs vehicle rerouting based on current edge speeds.
int repetitionsDone
The number of times the vehicle was already inserted.
virtual MSLane * getLane() const =0
Returns the lane the vehicle is on.
const RGBColor & getColor() const
Returns the color.
const std::vector< MSLane * > * allowedLanes(const MSEdge &destination, SUMOVehicleClass vclass=SVC_IGNORING) const
Get the allowed lanes to reach the destination-edge.
virtual bool replaceRoute(const MSRoute *route, const std::string &info, bool onInit=false, int offset=0, bool addStops=true, bool removeStops=true)=0
Replaces the current route by the given one.
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
virtual ~MSBaseVehicle()
Destructor.
MSBaseVehicle(SUMOVehicleParameter *pars, const MSRoute *route, MSVehicleType *type, const double speedFactor)
Constructor.
const MSRoute * myRoute
This vehicle's route.
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn't already in the dictionary...
const MSEdge * getLastEdge() const
returns the destination edge
virtual const ConstMSEdgeVector getStopEdges(double &firstPos, double &lastPos) const =0
Returns the list of still pending stop edges.
std::vector< const MSEdge * > ConstMSEdgeVector
ArrivalSpeedDefinition arrivalSpeedProcedure
Information how the vehicle's end speed shall be chosen.
int myArrivalLane
The destination lane where the vehicle stops.
const SUMOVehicleParameter * myParameter
This vehicle's parameter.
const std::string & getID() const
Returns the id.
The arrival position is given.
void setCosts(double costs)
Sets the costs of the route.
int size() const
Returns the number of edges to pass.
int getNumberReroutes() const
Returns the number of new routes this vehicle got.
#define WRITE_WARNING(msg)
SUMOTime repetitionOffset
The time offset between vehicle reinsertions.
The car-following model and parameter.
virtual void saveState(OutputDevice &out)
Saves the (common) state of a vehicle.
static OptionsCont & getOptions()
Retrieves the options.
std::string toTaz
The vehicle's destination zone (district)
std::string getDeviceParameter(const std::string &deviceName, const std::string &key) const
try to retrieve the given parameter from any of the vehicles devices, raise InvalidArgument if no dev...
bool isVehicleSpecific() const
Returns whether this type belongs to a single vehicle only (was modified)
std::vector< Stop > stops
List of the stops the vehicle will make, TraCI may add entries here.
double getMaxSpeed() const
Returns the maximum speed.
void calculateArrivalParams()
(Re-)Calculates the arrival position and lane from the vehicle parameters
std::mt19937 * getRNG() const
return the associated RNG
A road/street connecting two junctions.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
static SUMOTime gTimeToImpatience
virtual void addPerson(MSTransportable *person)
Adds a person to this vehicle.
virtual const MSEdge * getRerouteOrigin() const
Returns the starting point for reroutes (usually the current edge)
double myDepartPos
The real depart position.
bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Computes a new route on vehicle insertion.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
void createDevice(const std::string &deviceName)
create device of the given type
const std::vector< MSTransportable * > & getContainers() const
retrieve riding containers
std::string routeid
The vehicle's route id.
bool replaceRouteEdges(ConstMSEdgeVector &edges, double cost, double savings, const std::string &info, bool onInit=false, bool check=false, bool removeStops=true)
Replaces the current route by the given edges.
MSVehicleType * buildSingularType(const std::string &id) const
Duplicates the microsim vehicle type giving the newly created type the given id, marking it as vehicl...
double recomputeCosts(const std::vector< const E *> &edges, const V *const v, SUMOTime msTime, double *lengthp=nullptr) const
static const RGBColor DEFAULT_COLOR
The default color (for vehicle types and vehicles)
const MSEdge * getEdge() const
Returns the edge the vehicle is currently at.
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
ConstMSEdgeVector::const_iterator MSRouteIterator
void removeVType(const MSVehicleType *vehType)
MSDevice_Transportable * myPersonDevice
The passengers this vehicle may have.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
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...
void write(OutputDevice &dev, const OptionsCont &oc, const SumoXMLTag tag=SUMO_TAG_VEHICLE, const std::string &typeID="") const
Writes the parameters as a beginning element.
double getMaxSpeed() const
Get vehicle's maximum speed [m/s].
std::vector< std::string > getStringVector(const std::string &name) const
Returns the list of string-vector-value of the named option (only for Option_String) ...
std::string fromTaz
The vehicle's origin zone (district)
double getImpatience() const
Returns this vehicles impatience.
void addTransportable(MSTransportable *transportable)
Add a passenger.
Something on a lane to be noticed about vehicle movement.
bool computeLooped(const E *from, const E *to, const V *const vehicle, SUMOTime msTime, std::vector< const E *> &into, bool silent=false)
Builds the route between the given edges using the minimum effort at the given time if from == to...
int personNumber
The static number of persons in the vehicle when it departs (not including boarding persons) ...
std::vector< std::string > getPersonIDList() const
Returns the list of persons.
double arrivalPos
(optional) The position the vehicle shall arrive on
std::vector< std::string > via
List of the via-edges the vehicle must visit.
Abstract in-vehicle / in-person device.
entry for an alternative parking zone
trigger: the time of the step
SUMOVehicleClass getVClass() const
Returns the vehicle's access class.
The vehicle has departed (was inserted into the network)
void addStops(const bool ignoreStopErrors)
Adds stops to the built vehicle.
int getPersonNumber() const
Returns the number of persons.
void setSavings(double savings)
Sets the savings of the route.
Structure representing possible vehicle parameter.
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
bool isTazConnector() const
virtual bool hasArrived() const
Returns whether this vehicle has already arived (by default this is true if the vehicle has reached i...
virtual double getAcceleration() const
Returns the vehicle's acceleration.
const std::string & getDescription() const
void removeTransportable(MSTransportable *t)
removes a person or container
MSInsertionControl & getInsertionControl()
Returns the insertion control.
MSVehicleType * myType
This vehicle's type.
static OutputDevice & getDeviceByOption(const std::string &name)
Returns the device described by the option.
static std::vector< MSTransportable * > myEmptyTransportableVector
MSVehicleDevice * getDevice(const std::type_info &type) const
Returns a device of the given type if it exists or 0.
void onDepart()
Called when the vehicle is inserted into the network.
virtual double getSlope() const
Returns the slope of the road at vehicle's position.
A storage for options typed value containers)
virtual void activateReminders(const MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
"Activates" all current move reminder
const std::string & getID() const
Returns the name of the vehicle type.
The arrival lane is given.
int containerNumber
The static number of containers in the vehicle when it departs.
void addReference() const
increments the reference counter for the route
Abstract in-vehicle device.
int myNumberReroutes
The number of reroutings.
const MSEdge * succEdge(int nSuccs) const
Returns the nSuccs'th successor of edge the vehicle is currently at.
const NumericalID myNumericalID
bool wasSet(int what) const
Returns whether the given parameter was set.
virtual double getPositionOnLane() const =0
Get the vehicle's position along the lane.
Static storage of an output device and its base (abstract) implementation.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
bool hasDevice(const std::string &deviceName) const
check whether the vehicle is equiped with a device of the given type
MSRouteIterator myCurrEdge
Iterator to current route-edge.
MSDevice_Transportable * myContainerDevice
The containers this vehicle may have.
double arrivalSpeed
(optional) The final speed of the vehicle (not used yet)
MSRouteIterator begin() const
Returns the begin of the list of edges to pass.
void vehicleDeparted(const SUMOVehicle &v)
Informs this control about a vehicle's departure.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice *> &into)
Build devices for the given vehicle, if needed.
MSVehicleType & getSingularType()
Replaces the current vehicle type with a new one used by this vehicle only.
long long int NumericalID
const std::vector< MSTransportable * > & getPersons() const
retrieve riding persons
void removeTransportable(MSTransportable *transportable)
Remove a passenger (TraCI)
const std::string & getID() const
Returns the name of the vehicle.
void addReminder(MSMoveReminder *rem)
Adds a MoveReminder dynamically.
Representation of a lane in the micro simulation.
void replaceVehicleType(MSVehicleType *type)
Replaces the current vehicle type by the one given.
virtual void addContainer(MSTransportable *container)
Adds a container to this vehicle.
static void checkDist(const std::string &id)
Checks the distribution whether it is permanent and deletes it if not.
const std::vector< SUMOVehicleParameter::Stop > & getStops() const
Returns the stops.
static MSDevice_Transportable * buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice *> &into, const bool isContainer)
Build devices for the given vehicle, if needed.
MSRouteIterator end() const
Returns the end of the list of edges to pass.
void descheduleDeparture(const SUMOVehicle *veh)
stops trying to emit the given vehicle (and delete it)
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
double getPreviousSpeed() const
Returns the vehicle's previous speed.
SUMOTime myDeparture
The real departure time.
SUMOVehicleClass getVehicleClass() const
Get this vehicle type's vehicle class.
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
static const SUMOTime NOT_YET_DEPARTED
std::string id
The vehicle's id.
virtual SUMOTime getWaitingTime() const =0
static NumericalID myCurrentNumericalIndex
double myChosenSpeedFactor
A precomputed factor by which the driver wants to be faster than the speed limit. ...
static bool dictionary(const std::string &id, const MSRoute *route)
Adds a route to the dictionary.
The arrival position is chosen randomly.