 |
Eclipse SUMO - Simulation of Urban MObility
|
Go to the documentation of this file.
53 const bool tryRepair,
const bool mayBeDisconnected) :
55 myPrecomputed(nullptr), myLastUsed(lastUsed), myTryRepair(tryRepair), myMayBeDisconnected(mayBeDisconnected) {
104 mh->
inform(
"Vehicle '" + veh.
getID() +
"' is not allowed to depart on edge '" +
112 mh->
inform(
"Vehicle '" + veh.
getID() +
"' is not allowed to arrive on edge '" +
116 const bool skipTripRouting = (oc.
exists(
"write-trips") && oc.
getBool(
"write-trips")
169 const int initialSize = (int)oldEdges.size();
170 if (initialSize == 1) {
173 router.
compute(oldEdges.front(),
nullptr, &veh, begin, newEdges);
178 if (oldEdges.front()->prohibits(&veh)) {
180 const std::string& frontID = oldEdges.front()->getID();
181 for (ConstROEdgeVector::iterator i = oldEdges.begin(); i != oldEdges.end();) {
182 if ((*i)->prohibits(&veh) || (*i)->isInternal()) {
183 i = oldEdges.erase(i);
186 +
"' to '" + (*i)->getID() +
"' for vehicle '" + veh.
getID() +
"'.");
191 if (oldEdges.size() == 0) {
192 mh->
inform(
"Could not find new starting edge for vehicle '" + veh.
getID() +
"'.");
195 if (oldEdges.back()->prohibits(&veh)) {
197 const std::string& backID = oldEdges.back()->getID();
199 while (oldEdges.back()->prohibits(&veh) || oldEdges.back()->isInternal()) {
203 +
"' to edge '" + oldEdges.back()->getID() +
"' for vehicle '" + veh.
getID() +
"'.");
206 assert(mandatory.size() >= 2);
208 for (ConstROEdgeVector::iterator i = oldEdges.begin(); i != oldEdges.end();) {
209 if ((*i)->prohibits(&veh) || (*i)->isInternal()) {
211 i = oldEdges.erase(i);
217 if (mandatory.size() > oldEdges.size() && initialSize > 2) {
218 WRITE_MESSAGE(
"There are stop edges which were not part of the original route for vehicle '" + veh.
getID() +
"'.");
220 const ConstROEdgeVector& targets = mandatory.size() > oldEdges.size() ? mandatory : oldEdges;
221 newEdges.push_back(*(targets.begin()));
222 ConstROEdgeVector::iterator nextMandatory = mandatory.begin() + 1;
223 int lastMandatory = 0;
224 for (ConstROEdgeVector::const_iterator i = targets.begin() + 1;
225 i != targets.end() && nextMandatory != mandatory.end(); ++i) {
226 if ((*(i - 1))->isConnectedTo(*i, &veh)) {
227 newEdges.push_back(*i);
229 if (initialSize > 2) {
231 WRITE_MESSAGE(
"Edge '" + (*(i - 1))->
getID() +
"' not connected to edge '" + (*i)->getID() +
"' for vehicle '" + veh.
getID() +
"'.");
233 const ROEdge*
const last = newEdges.back();
235 if (!router.
compute(last, *i, &veh, begin, newEdges)) {
242 if (lastMandatory >= (
int)newEdges.size() || last == newEdges[lastMandatory] || !router.
compute(newEdges[lastMandatory], *nextMandatory, &veh, begin, edges)) {
243 mh->
inform(
"Mandatory edge '" + (*i)->getID() +
"' not reachable by vehicle '" + veh.
getID() +
"'.");
246 while (*i != *nextMandatory) {
249 newEdges.erase(newEdges.begin() + lastMandatory + 1, newEdges.end());
250 std::copy(edges.begin() + 1, edges.end(), back_inserter(newEdges));
253 if (*i == *nextMandatory) {
255 lastMandatory = (int)newEdges.size() - 1;
309 if ((*i)->getProbability() == 0) {
327 newSum += (*i)->getProbability();
332 (*i)->setProbability((*i)->getProbability() / newSum);
340 chosen -= (*i)->getProbability();
358 bool asAlternatives,
bool withExitTimes)
const {
359 if (asAlternatives) {
362 myAlternatives[i]->writeXMLDefinition(dev, veh,
true, withExitTimes);
379 edges.push_back(route->
getLast());
403 sum += (*i)->getProbability();
void addAlternative(SUMOAbstractRouter< ROEdge, ROVehicle > &router, const ROVehicle *const, RORoute *current, SUMOTime begin)
Adds an alternative to the list of routes.
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...
const ROEdge * getLast() const
Returns the last edge in the route.
double getProbability() const
Returns the probability the driver will take this route with.
#define WRITE_WARNING(msg)
RORoute * buildCurrentRoute(SUMOAbstractRouter< ROEdge, ROVehicle > &router, SUMOTime begin, const ROVehicle &veh) const
Triggers building of the complete route (via preComputeCurrentRoute) or returns precomputed route.
Base class for objects which have an id.
SUMOTime getDepartureTime() const
Returns the time the vehicle starts at, 0 for triggered vehicles.
Static storage of an output device and its base (abstract) implementation.
void addAlternativeDef(const RORouteDef *alternative)
Adds an alternative loaded from the file.
virtual void inform(std::string msg, bool addType=true)
adds a new error to the list
const ConstROEdgeVector & getEdgeVector() const
Returns the list of edges this route consists of.
bool exists(const std::string &name) const
Returns the information whether the named option is known.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
Base class for a vehicle's route definition.
void setCosts(double costs)
Sets the costs of the route.
static RouteCostCalculator< R, E, V > & getCalculator()
A vehicle as used by router.
const RGBColor * getColor() const
Returns this route's color.
double getOverallProb() const
Returns the sum of the probablities of the contained routes.
void preComputeCurrentRoute(SUMOAbstractRouter< ROEdge, ROVehicle > &router, SUMOTime begin, const ROVehicle &veh) const
Builds the complete route (or chooses her from the list of alternatives, when existing)
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
static double rand(std::mt19937 *rng=0)
Returns a random real number in [0, 1)
Abstract base class providing static factory method.
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
ConstROEdgeVector getMandatoryEdges(const ROEdge *requiredStart, const ROEdge *requiredEnd) const
compute mandatory edges
const std::string & getID() const
Returns the id of the routable.
OutputDevice & writeXMLDefinition(OutputDevice &dev, const ROVehicle *const veh, bool asAlternatives, bool withExitTimes) const
Saves the built route / route alternatives.
std::set< RORoute * > myRouteRefs
Routes which are deleted someplace else.
A complete router's route.
bool myNewRoute
Information whether a new route was generated.
A storage for options typed value containers)
const bool myMayBeDisconnected
int myLastUsed
Index of the route used within the last step.
RORoute * myPrecomputed
precomputed route for out-of-order computation
void addLoadedAlternative(RORoute *alternative)
Adds a single alternative loaded from the file An alternative may also be generated during DUA.
void addStopOffset(const SUMOTime offset)
Adapts the until time of all stops by the given offset.
void setProbability(double prob)
Sets the probability of the route.
Some static methods for string processing.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
const ROEdge * getDestination() const
double recomputeCosts(const std::vector< const E * > &edges, const V *const v, SUMOTime msTime, double *lengthp=nullptr) const
const ROEdge * getFirst() const
Returns the first edge in the route.
A basic edge for routing applications.
virtual ~RORouteDef()
Destructor.
RORouteDef * copyOrigDest(const std::string &id) const
Returns a origin-destination copy of the route definition.
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
RORouteDef * copy(const std::string &id, const SUMOTime stopOffset) const
Returns a deep copy of the route definition.
std::string myID
The name of the object.
const std::string & getID() const
Returns the id.
#define WRITE_MESSAGE(msg)
RORouteDef(const std::string &id, const int lastUsed, const bool tryRepair, const bool mayBeDisconnected)
Constructor.
std::vector< const ROEdge * > ConstROEdgeVector
bool repairCurrentRoute(SUMOAbstractRouter< ROEdge, ROVehicle > &router, SUMOTime begin, const ROVehicle &veh, ConstROEdgeVector oldEdges, ConstROEdgeVector &newEdges) const
Builds the complete route (or chooses her from the list of alternatives, when existing)
const std::vector< SUMOVehicleParameter::Stop > & getStops() const
Returns the list of stops this route contains.
std::vector< RORoute * > myAlternatives
The alternatives.