38 #include <xercesc/sax/SAXException.hpp> 39 #include <xercesc/sax/SAXParseException.hpp> 106 if (oc.
isSet(
"weight-files")) {
109 if (oc.
isSet(
"lane-weight-files")) {
125 std::ofstream outFile(oc.
getString(
"all-pairs-output").c_str(), std::ios::binary);
131 const int numTotalEdges = (int)net.
getEdgeNo();
132 for (
int i = numInternalEdges; i < numTotalEdges; i++) {
133 const Dijkstra::EdgeInfo& ei = router.getEdgeInfo(i);
134 if (!ei.edge->isInternal()) {
135 router.compute(ei.edge, 0, 0, 0, into);
136 double fromEffort = router.getEffort(ei.edge, 0, 0);
137 for (
int j = numInternalEdges; j < numTotalEdges; j++) {
138 double heuTT = router.getEdgeInfo(j).traveltime - fromEffort;
161 for (std::map<std::string, ROEdge*>::const_iterator i = net.
getEdgeMap().begin(); i != net.
getEdgeMap().end(); ++i) {
185 const std::string measure = oc.
getString(
"weight-attribute");
186 const std::string routingAlgorithm = oc.
getString(
"routing-algorithm");
189 if (measure ==
"traveltime") {
190 if (routingAlgorithm ==
"dijkstra") {
192 if (oc.
getInt(
"paths") > 1) {
200 if (oc.
getInt(
"paths") > 1) {
208 }
else if (routingAlgorithm ==
"astar") {
210 if (oc.
getInt(
"paths") > 1) {
218 if (oc.
getInt(
"paths") > 1) {
226 }
else if (routingAlgorithm ==
"CH") {
237 }
else if (routingAlgorithm ==
"CHWrapper") {
243 begin, end, weightPeriod, oc.
getInt(
"routing-threads"));
245 throw ProcessError(
"Unknown routing Algorithm '" + routingAlgorithm +
"'!");
250 if (measure ==
"CO") {
251 op = &ROEdge::getEmissionEffort<PollutantsInterface::CO>;
252 }
else if (measure ==
"CO2") {
253 op = &ROEdge::getEmissionEffort<PollutantsInterface::CO2>;
254 }
else if (measure ==
"PMx") {
255 op = &ROEdge::getEmissionEffort<PollutantsInterface::PM_X>;
256 }
else if (measure ==
"HC") {
257 op = &ROEdge::getEmissionEffort<PollutantsInterface::HC>;
258 }
else if (measure ==
"NOx") {
259 op = &ROEdge::getEmissionEffort<PollutantsInterface::NO_X>;
260 }
else if (measure ==
"fuel") {
261 op = &ROEdge::getEmissionEffort<PollutantsInterface::FUEL>;
262 }
else if (measure ==
"electricity") {
263 op = &ROEdge::getEmissionEffort<PollutantsInterface::ELEC>;
264 }
else if (measure ==
"noise") {
267 throw ProcessError(
"Unknown measure (weight attribute '" + measure +
"')!");
270 if (oc.
getInt(
"paths") > 1) {
278 if (oc.
getInt(
"paths") > 1) {
292 if (oc.
isSet(
"timeline")) {
300 const int maxNumThreads = oc.
getInt(
"routing-threads");
301 while ((
int)net.getThreadPool().size() < maxNumThreads) {
302 new RONet::WorkerThread(net.getThreadPool(), provider);
305 const std::string assignMethod = oc.
getString(
"assignment-method");
306 if (assignMethod ==
"incremental") {
307 a.incremental(oc.
getInt(
"max-iterations"), oc.
getBool(
"verbose"));
308 }
else if (assignMethod ==
"SUE") {
309 a.sue(oc.
getInt(
"max-iterations"), oc.
getInt(
"max-inner-iterations"),
313 bool haveOutput =
false;
316 std::vector<std::string> tazParamKeys;
317 if (oc.
isSet(
"taz-param")) {
320 std::map<SUMOTime, std::string> sortedOut;
323 for (std::vector<ODCell*>::const_iterator i = matrix.getCells().begin(); i != matrix.getCells().end(); ++i) {
324 const ODCell*
const c = *i;
325 if (lastEnd >= 0 && lastEnd <= c->begin) {
326 for (std::map<SUMOTime, std::string>::const_iterator desc = sortedOut.begin(); desc != sortedOut.end(); ++desc) {
336 matrix.writeDefaultAttrs(od, oc.
getBool(
"ignore-vehicle-type"), c);
340 (*j)->writeXMLDefinition(od, 0,
true,
false);
344 sortedOut[c->
begin] += od.getString();
348 for (std::vector<std::string>::const_iterator
id = deps->second.begin();
id != deps->second.end(); ++id) {
351 matrix.writeDefaultAttrs(od, oc.
getBool(
"ignore-vehicle-type"), c);
355 (*j)->writeXMLDefinition(od, 0,
true,
false);
358 if (!tazParamKeys.empty()) {
360 if (tazParamKeys.size() > 1) {
365 sortedOut[deps->first] += od.getString();
372 if (c->
end > lastEnd) {
376 for (std::map<SUMOTime, std::string>::const_iterator desc = sortedOut.begin(); desc != sortedOut.end(); ++desc) {
382 if (oc.
getBool(
"additive-traffic")) {
386 for (std::vector<ODCell*>::const_iterator i = matrix.getCells().begin(); i != matrix.getCells().end(); ++i) {
387 if ((*i)->end > lastCell) {
388 lastCell = (*i)->end;
392 for (
SUMOTime start = begin; start <
MIN2(end, lastCell); start += interval) {
404 for (std::vector<ODCell*>::const_iterator i = matrix.
getCells().begin(); i != matrix.
getCells().end(); ++i) {
405 for (std::vector<RORoute*>::const_iterator j = (*i)->pathsVector.begin(); j != (*i)->pathsVector.end(); ++j) {
444 if (oc.
isSet(
"all-pairs-output")) {
450 std::cout <<
"Success." << std::endl;
478 }
catch (XERCES_CPP_NAMESPACE::SAXParseException& e) {
481 }
catch (XERCES_CPP_NAMESPACE::SAXException& e) {
489 if (std::string(e.what()) != std::string(
"Process Error") && std::string(e.what()) != std::string(
"")) {
499 std::cout <<
"Success." << std::endl;
Computes the shortest path through a contracted network.
double getFlow(const double time) const
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
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) ...
bool hasPermissions() const
const std::vector< ODCell * > & getCells()
static void init()
Initialises the xml-subsystem.
Computes the shortest path through a network using the Dijkstra algorithm.
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
double getSpeedLimit() const
Returns the speed allowed on this edge.
OutputDevice * getRouteOutput(const bool alternative=false)
const std::map< std::string, std::pair< std::vector< std::string >, std::vector< std::string > > > & getDistricts() const
Retrieves all TAZ (districts) from the network.
void computeRoutes(RONet &net, OptionsCont &oc, ODMatrix &matrix)
static void getOptions(const bool commandLineOnly=false)
Parses the command line arguments and loads the configuration.
a flow definition (used by router)
double getLength() const
Returns the length of the edge.
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme)
Enables or disables validation.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
Interface for building instances of duarouter-edges.
void makeDistricts(const std::map< std::string, std::pair< std::vector< std::string >, std::vector< std::string > > > &districts)
create districts from description
void setApplicationDescription(const std::string &appDesc)
Sets the application description.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
int main(int argc, char **argv)
static std::ostream & writeFloat(std::ostream &strm, double value)
Writes a float binary.
OutputDevice & writePreformattedTag(const std::string &val)
writes a preformatted tag to the device but ensures that any pending tags are closed ...
std::string time2string(SUMOTime t)
Computes the shortest path through a network using the A* algorithm.
weights: time range begin
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid for usage within duarouter...
void computeAllPairs(RONet &net, OptionsCont &oc)
double getTravelTime(const ROVehicle *const veh, double time) const
Returns the travel time for this edge.
std::vector< const ROEdge * > ConstROEdgeVector
Parser and container for routes during their loading.
std::vector< RORoute * > pathsVector
the list of paths / routes
const std::string DEFAULT_VTYPE_ID
static void close()
Closes all of an applications subsystems.
double vehicleNumber
The number of vehicles.
Computes the shortest path through a network using the Dijkstra algorithm.
const std::map< std::string, ROEdge * > & getEdgeMap() const
static void setArgs(int argc, char **argv)
Stores the command line arguments for later parsing.
static OptionsCont & getOptions()
Retrieves the options.
void openOutput(const OptionsCont &options, const std::string altFilename="")
Opens the output for computed routes.
void loadMatrix(OptionsCont &oc)
read a matrix in one of several formats
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
const std::string & getID() const
Returns the id.
A vehicle as used by router.
void cleanup()
closes the file output for computed routes and deletes associated threads if necessary ...
static double getTravelTimeStatic(const ROEdge *const edge, const ROVehicle *const veh, double time)
Returns the travel time for the given edge.
double getTravelTime(const ROEdge *const edge, const ROVehicle *const , double)
A single O/D-matrix cell.
void initNet(RONet &net, ROLoader &loader, OptionsCont &oc)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
std::string origin
Name of the origin district.
parameter associated to a certain key
An O/D (origin/destination) matrix.
bool processMetaOptions(bool missingOptions)
Checks for help and configuration output, returns whether we should exit.
void loadRoutes(OptionsCont &oc, SUMOSAXHandler &handler)
read SUMO routes
SUMOTime string2time(const std::string &r)
A container for districts.
std::map< SUMOTime, std::vector< std::string > > departures
mapping of departure times to departing vehicles, if already fixed
int getEdgeNo() const
Returns the total number of edges the network contains including internal edges.
SumoXMLEdgeFunc getFunction() const
Returns the function of the edge.
void writeInterval(OutputDevice &dev, const SUMOTime begin, const SUMOTime end, const RONet &net, const ROVehicle *const veh)
SUMOTime begin
The begin time this cell describes.
static double getCapacity(const ROEdge *edge)
virtual void loadNet(RONet &toFill, ROAbstractEdgeBuilder &eb)
Loads the network.
A basic edge for routing applications.
begin/end of the description of an edge
int getInternalEdgeNumber() const
Returns the number of internal edges the network contains.
static void fillOptions()
Inserts options used by duarouter into the OptionsCont-singleton.
virtual double recomputeCosts(const std::vector< const E * > &edges, const V *const v, SUMOTime msTime) const =0
static double getPenalizedEffort(const ROEdge *const e, const ROVehicle *const v, double t)
Returns the effort to pass an edge including penalties.
The router's network representation.
Structure representing possible vehicle parameter.
static double getTravelTime(const ROEdge *const e, const ROVehicle *const v, double t)
Returns the traveltime on an edge without penalties.
static OutputDevice & getDeviceByOption(const std::string &name)
Returns the device described by the option.
static const ROEdgeVector & getAllEdges()
Returns all ROEdges.
void inform(std::string msg, bool addType=true)
adds a new error to the list
A storage for options typed value containers)
double getNumLoaded() const
Returns the number of loaded vehicles.
static void initRandGlobal(std::mt19937 *which=0)
Reads the given random number options and initialises the random number generator in accordance...
void applyCurve(const Distribution_Points &ps)
Splits the stored cells dividing them on the given time line.
static double getNoiseEffort(const ROEdge *const edge, const ROVehicle *const veh, double time)
static void setGlobalOptions(const bool interpolate)
an aggreagated-output interval
static bool createDeviceByOption(const std::string &optionName, const std::string &rootElement="", const std::string &schemaFile="")
Creates the device using the output definition stored in the named option.
Static storage of an output device and its base (abstract) implementation.
std::string destination
Name of the destination district.
bool closeTag()
Closes the most recently opened tag.
SUMOVTypeParameter * getVehicleTypeSecure(const std::string &id)
Retrieves the named vehicle type.
SUMOTime end
The end time this cell describes.
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
void clear()
Clears information whether an error occured previously.
#define WRITE_MESSAGE(msg)
static void initOutputOptions()
A basic edge for routing applications.
static std::string _2str(const int var)
convert int to string
bool loadWeights(RONet &net, const std::string &optionName, const std::string &measure, const bool useLanes, const bool boundariesOverride)
Loads the net weights.
vehicles ignoring classes
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
An output device that encapsulates an ofstream.
static double getPenalizedTT(const ROEdge *const e, const ROVehicle *const v, double t)
Returns the traveltime on an edge including penalties.
Distribution_Points parseTimeLine(const std::vector< std::string > &def, bool timelineDayInHours)
split the given timeline
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
bool isBinary() const
Returns whether we have a binary output.
Computes the shortest path through a contracted network.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.