37 #include <xercesc/sax/SAXException.hpp> 38 #include <xercesc/sax/SAXParseException.hpp> 104 if (oc.
isSet(
"weight-files")) {
107 if (oc.
isSet(
"lane-weight-files")) {
123 std::ofstream outFile(oc.
getString(
"all-pairs-output").c_str(), std::ios::binary);
130 for (
int i = numInternalEdges; i < numTotalEdges; i++) {
131 const Dijkstra::EdgeInfo& ei = router.getEdgeInfo(i);
132 if (!ei.edge->isInternal()) {
133 router.compute(ei.edge, 0, 0, 0, into);
134 double fromEffort = router.getEffort(ei.edge, 0, 0);
135 for (
int j = numInternalEdges; j < numTotalEdges; j++) {
136 double heuTT = router.getEdgeInfo(j).effort - fromEffort;
183 const std::string measure = oc.
getString(
"weight-attribute");
184 const std::string routingAlgorithm = oc.
getString(
"routing-algorithm");
187 if (measure ==
"traveltime") {
188 if (routingAlgorithm ==
"dijkstra") {
190 if (oc.
getInt(
"paths") > 1) {
198 if (oc.
getInt(
"paths") > 1) {
206 }
else if (routingAlgorithm ==
"astar") {
208 if (oc.
getInt(
"paths") > 1) {
216 if (oc.
getInt(
"paths") > 1) {
224 }
else if (routingAlgorithm ==
"CH") {
227 std::numeric_limits<int>::max());
235 }
else if (routingAlgorithm ==
"CHWrapper") {
238 std::numeric_limits<int>::max());
241 begin, end, weightPeriod, oc.
getInt(
"routing-threads"));
243 throw ProcessError(
"Unknown routing Algorithm '" + routingAlgorithm +
"'!");
248 if (measure ==
"CO") {
249 op = &ROEdge::getEmissionEffort<PollutantsInterface::CO>;
250 }
else if (measure ==
"CO2") {
251 op = &ROEdge::getEmissionEffort<PollutantsInterface::CO2>;
252 }
else if (measure ==
"PMx") {
253 op = &ROEdge::getEmissionEffort<PollutantsInterface::PM_X>;
254 }
else if (measure ==
"HC") {
255 op = &ROEdge::getEmissionEffort<PollutantsInterface::HC>;
256 }
else if (measure ==
"NOx") {
257 op = &ROEdge::getEmissionEffort<PollutantsInterface::NO_X>;
258 }
else if (measure ==
"fuel") {
259 op = &ROEdge::getEmissionEffort<PollutantsInterface::FUEL>;
260 }
else if (measure ==
"electricity") {
261 op = &ROEdge::getEmissionEffort<PollutantsInterface::ELEC>;
262 }
else if (measure ==
"noise") {
265 throw ProcessError(
"Unknown measure (weight attribute '" + measure +
"')!");
268 if (oc.
getInt(
"paths") > 1) {
276 if (oc.
getInt(
"paths") > 1) {
290 if (oc.
isSet(
"timeline")) {
298 const int maxNumThreads = oc.
getInt(
"routing-threads");
299 while ((
int)net.getThreadPool().size() < maxNumThreads) {
300 new RONet::WorkerThread(net.getThreadPool(), provider);
303 const std::string assignMethod = oc.
getString(
"assignment-method");
304 if (assignMethod ==
"incremental") {
305 a.incremental(oc.
getInt(
"max-iterations"), oc.
getBool(
"verbose"));
306 }
else if (assignMethod ==
"SUE") {
307 a.sue(oc.
getInt(
"max-iterations"), oc.
getInt(
"max-inner-iterations"),
311 bool haveOutput =
false;
314 std::vector<std::string> tazParamKeys;
315 if (oc.
isSet(
"taz-param")) {
318 std::map<SUMOTime, std::string> sortedOut;
321 for (std::vector<ODCell*>::const_iterator i = matrix.getCells().begin(); i != matrix.getCells().end(); ++i) {
322 const ODCell*
const c = *i;
323 if (lastEnd >= 0 && lastEnd <= c->begin) {
324 for (std::map<SUMOTime, std::string>::const_iterator desc = sortedOut.begin(); desc != sortedOut.end(); ++desc) {
334 matrix.writeDefaultAttrs(od, oc.
getBool(
"ignore-vehicle-type"), c);
338 (*j)->writeXMLDefinition(od, 0,
true,
false);
342 sortedOut[c->
begin] += od.getString();
346 for (std::vector<std::string>::const_iterator
id = deps->second.begin();
id != deps->second.end(); ++id) {
349 matrix.writeDefaultAttrs(od, oc.
getBool(
"ignore-vehicle-type"), c);
353 (*j)->writeXMLDefinition(od, 0,
true,
false);
356 if (!tazParamKeys.empty()) {
358 if (tazParamKeys.size() > 1) {
363 sortedOut[deps->first] += od.getString();
370 if (c->
end > lastEnd) {
374 for (std::map<SUMOTime, std::string>::const_iterator desc = sortedOut.begin(); desc != sortedOut.end(); ++desc) {
380 if (oc.
getBool(
"additive-traffic")) {
384 for (std::vector<ODCell*>::const_iterator i = matrix.getCells().begin(); i != matrix.getCells().end(); ++i) {
385 if ((*i)->end > lastCell) {
386 lastCell = (*i)->end;
390 for (
SUMOTime start = begin; start <
MIN2(end, lastCell); start += interval) {
402 for (std::vector<ODCell*>::const_iterator i = matrix.
getCells().begin(); i != matrix.
getCells().end(); ++i) {
403 for (std::vector<RORoute*>::const_iterator j = (*i)->pathsVector.begin(); j != (*i)->pathsVector.end(); ++j) {
442 if (oc.
isSet(
"all-pairs-output")) {
448 std::cout <<
"Success." << std::endl;
476 }
catch (XERCES_CPP_NAMESPACE::SAXParseException& e) {
479 }
catch (XERCES_CPP_NAMESPACE::SAXException& e) {
487 if (std::string(e.what()) != std::string(
"Process Error") && std::string(e.what()) != std::string(
"")) {
497 std::cout <<
"Success." << std::endl;
Computes the shortest path through a contracted network.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
int getEdgeNumber() const
Returns the total number of edges the network contains including internal edges.
const std::vector< ODCell * > & getCells()
static void init()
Initialises the xml-subsystem.
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
OutputDevice * getRouteOutput(const bool alternative=false)
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
void computeRoutes(RONet &net, OptionsCont &oc, ODMatrix &matrix)
static void getOptions(const bool commandLineOnly=false)
Parses the command line arguments and loads the configuration.
int getInternalEdgeNumber() const
Returns the number of internal edges the network contains.
a flow definition (used by router)
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme)
Enables or disables validation.
Interface for building instances of duarouter-edges.
virtual double recomputeCosts(const std::vector< const E *> &edges, const V *const v, SUMOTime msTime) const =0
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.
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...
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 computeAllPairs(RONet &net, OptionsCont &oc)
bool hasPermissions() const
double getLength() const
Returns the length of the edge.
std::vector< const ROEdge * > ConstROEdgeVector
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
Parser and container for routes during their loading.
const std::string & getID() const
Returns the id.
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.
static void setArgs(int argc, char **argv)
Stores the command line arguments for later parsing.
static OptionsCont & getOptions()
Retrieves the options.
void loadMatrix(OptionsCont &oc)
read a matrix in one of several formats
void openOutput(const OptionsCont &options)
Opens the output for computed routes.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
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.
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.
Computes the shortest path through a network using the Dijkstra algorithm.
parameter associated to a certain key
An O/D (origin/destination) matrix.
SumoXMLEdgeFunc getFunction() const
Returns the function of the edge.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool processMetaOptions(bool missingOptions)
Checks for help and configuration output, returns whether we should exit.
double getTravelTime(const ROEdge *const edge, const ROVehicle *const, double)
void loadRoutes(OptionsCont &oc, SUMOSAXHandler &handler)
read SUMO routes
SUMOTime string2time(const std::string &r)
A container for districts.
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::map< SUMOTime, std::vector< std::string > > departures
mapping of departure times to departing vehicles, if already fixed
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.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
static double getCapacity(const ROEdge *edge)
double getNumLoaded() const
Returns the number of loaded vehicles.
virtual void loadNet(RONet &toFill, ROAbstractEdgeBuilder &eb)
Loads the network.
A basic edge for routing applications.
begin/end of the description of an edge
static void fillOptions()
Inserts options used by duarouter into the OptionsCont-singleton.
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.
const NamedObjectCont< ROEdge * > & getEdgeMap() const
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.
double getTravelTime(const ROVehicle *const veh, double time) const
Returns the travel time for this edge.
void inform(std::string msg, bool addType=true)
adds a new error to the list
A storage for options typed value containers)
double getSpeedLimit() const
Returns the speed allowed on this edge.
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.
double getFlow(const double time) const
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.
IDMap::const_iterator end() const
Returns a reference to the end iterator for the internal map.
SUMOTime end
The end time this cell describes.
void clear()
Clears information whether an error occured previously.
#define WRITE_MESSAGE(msg)
static void initOutputOptions()
A basic edge for routing applications.
bool isBinary() const
Returns whether we have a binary output.
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
Computes the shortest path through a contracted network.
IDMap::const_iterator begin() const
Returns a reference to the begin iterator for the internal map.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.