SUMO - Simulation of Urban MObility
ROFrame.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // Sets and checks options for routing
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
12 // Copyright (C) 2001-2017 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <iostream>
34 #include <ctime>
35 #include <stdlib.h>
37 #include <utils/options/Option.h>
41 #include <utils/common/ToString.h>
42 #include <utils/common/SUMOTime.h>
43 #include "ROFrame.h"
44 
45 
46 // ===========================================================================
47 // method definitions
48 // ===========================================================================
49 void
50 ROFrame::fillOptions(OptionsCont& oc, bool forDuarouter) {
51  // register options
52  // register I/O options
53  oc.doRegister("output-file", 'o', new Option_FileName());
54  oc.addSynonyme("output-file", "output");
55  oc.addDescription("output-file", "Output", "Write generated routes to FILE");
56 
57  oc.doRegister("vtype-output", new Option_FileName(""));
58  oc.addSynonyme("vtype-output", "vtype");
59  oc.addDescription("vtype-output", "Output", "Write used vehicle types into separate FILE");
60 
61  oc.doRegister("net-file", 'n', new Option_FileName());
62  oc.addSynonyme("net-file", "net");
63  oc.addDescription("net-file", "Input", "Use FILE as SUMO-network to route on");
64 
65  oc.doRegister("additional-files", 'd', new Option_FileName());
66  oc.addSynonyme("additional-files", "additional");
67  oc.addSynonyme("additional-files", "taz-files");
68  oc.addSynonyme("additional-files", "districts", true);
69  oc.addDescription("additional-files", "Input", "Read additional network data (districts, bus stops) from FILE");
70 
71  oc.doRegister("alternative-files", 'a', new Option_FileName());
72  oc.addSynonyme("alternative-files", "alternatives-files");
73  oc.addSynonyme("alternative-files", "alternatives", true);
74  oc.addDescription("alternative-files", "Input", "Read alternatives from FILE");
75 
76  oc.doRegister("flow-files", 'f', new Option_FileName());
77  oc.addSynonyme("flow-files", "flows");
78  oc.addSynonyme("flow-files", "flow-definition", true);
79  oc.addDescription("flow-files", "Input", "Read flow-definitions from FILE(s)");
80 
81  if (forDuarouter) {
82  oc.doRegister("weight-files", 'w', new Option_FileName());
83  oc.addSynonyme("weight-files", "weights");
84  oc.addDescription("weight-files", "Input", "Read network weights from FILE(s)");
85 
86  oc.doRegister("lane-weight-files", new Option_FileName());
87  oc.addDescription("lane-weight-files", "Input", "Read lane-based network weights from FILE(s)");
88 
89  oc.doRegister("weight-attribute", 'x', new Option_String("traveltime"));
90  oc.addSynonyme("weight-attribute", "measure", true);
91  oc.addDescription("weight-attribute", "Input", "Name of the xml attribute which gives the edge weight");
92 
93  oc.doRegister("phemlight-path", new Option_FileName("./PHEMlight/"));
94  oc.addDescription("phemlight-path", "Input", "Determines where to load PHEMlight definitions from.");
95  }
96 
97  // register the time settings
98  oc.doRegister("begin", 'b', new Option_String("0", "TIME"));
99  oc.addDescription("begin", "Time", "Defines the begin time; Previous trips will be discarded");
100 
101  oc.doRegister("end", 'e', new Option_String(SUMOTIME_MAXSTRING, "TIME"));
102  oc.addDescription("end", "Time", "Defines the end time; Later trips will be discarded; Defaults to the maximum time that SUMO can represent");
103 
104  // register the processing options
105  oc.doRegister("ignore-errors", new Option_Bool(false));
106  oc.addSynonyme("ignore-errors", "continue-on-unbuild", true);
107  oc.addDescription("ignore-errors", "Processing", "Continue if a route could not be build");
108 
109  oc.doRegister("unsorted-input", new Option_Bool(false));
110  oc.addSynonyme("unsorted-input", "unsorted");
111  oc.addDescription("unsorted-input", "Processing", "Assume input is unsorted");
112 
113  oc.doRegister("route-steps", 's', new Option_String("200", "TIME"));
114  oc.addDescription("route-steps", "Processing", "Load routes for the next number of seconds ahead");
115 
116  oc.doRegister("randomize-flows", new Option_Bool(false));
117  oc.addDescription("randomize-flows", "Processing", "generate random departure times for flow input");
118 
119  oc.doRegister("max-alternatives", new Option_Integer(5));
120  oc.addDescription("max-alternatives", "Processing", "Prune the number of alternatives to INT");
121 
122  oc.doRegister("remove-loops", new Option_Bool(false));
123  oc.addDescription("remove-loops", "Processing", "Remove loops within the route; Remove turnarounds at start and end of the route");
124 
125  oc.doRegister("repair", new Option_Bool(false));
126  oc.addDescription("repair", "Processing", "Tries to correct a false route");
127 
128  oc.doRegister("repair.from", new Option_Bool(false));
129  oc.addDescription("repair.from", "Processing", "Tries to correct an invalid starting edge by using the first usable edge instead");
130 
131  oc.doRegister("repair.to", new Option_Bool(false));
132  oc.addDescription("repair.to", "Processing", "Tries to correct an invalid destination edge by using the last usable edge instead");
133 
134  oc.doRegister("weights.interpolate", new Option_Bool(false));
135  oc.addSynonyme("weights.interpolate", "interpolate", true);
136  oc.addDescription("weights.interpolate", "Processing", "Interpolate edge weights at interval boundaries");
137 
138  oc.doRegister("with-taz", new Option_Bool(false));
139  oc.addDescription("with-taz", "Processing", "Use origin and destination zones (districts) for in- and output");
140 
141  if (forDuarouter) {
142  oc.doRegister("routing-algorithm", new Option_String("dijkstra"));
143  oc.addDescription("routing-algorithm", "Processing", "Select among routing algorithms ['dijkstra', 'astar', 'CH', 'CHWrapper']");
144 
145  oc.doRegister("weight-period", new Option_String("3600", "TIME"));
146  oc.addDescription("weight-period", "Processing", "Aggregation period for the given weight files; triggers rebuilding of Contraction Hierarchy");
147  }
148 
149  oc.doRegister("bulk-routing", new Option_Bool(false));
150  oc.addDescription("bulk-routing", "Processing", "Aggregate routing queries with the same origin");
151 
152  oc.doRegister("routing-threads", new Option_Integer(0));
153  oc.addDescription("routing-threads", "Processing", "The number of parallel execution threads used for routing");
154 
155  // register defaults options
156  oc.doRegister("departlane", new Option_String());
157  oc.addDescription("departlane", "Defaults", "Assigns a default depart lane");
158 
159  oc.doRegister("departpos", new Option_String());
160  oc.addDescription("departpos", "Defaults", "Assigns a default depart position");
161 
162  oc.doRegister("departspeed", new Option_String());
163  oc.addDescription("departspeed", "Defaults", "Assigns a default depart speed");
164 
165  oc.doRegister("arrivallane", new Option_String());
166  oc.addDescription("arrivallane", "Defaults", "Assigns a default arrival lane");
167 
168  oc.doRegister("arrivalpos", new Option_String());
169  oc.addDescription("arrivalpos", "Defaults", "Assigns a default arrival position");
170 
171  oc.doRegister("arrivalspeed", new Option_String());
172  oc.addDescription("arrivalspeed", "Defaults", "Assigns a default arrival speed");
173 
174  oc.doRegister("defaults-override", new Option_Bool(false));
175  oc.addDescription("defaults-override", "Defaults", "Defaults will override given values");
176 
177 
178  // register report options
179  oc.doRegister("stats-period", new Option_Integer(-1));
180  oc.addDescription("stats-period", "Report", "Defines how often statistics shall be printed");
181 
182  oc.doRegister("no-step-log", new Option_Bool(false));
183  oc.addDescription("no-step-log", "Report", "Disable console output of route parsing step");
184 }
185 
186 
187 bool
189  // check whether the output is valid and can be build
190  if (!oc.isSet("output-file")) {
191  WRITE_ERROR("No output specified.");
192  return false;
193  }
194  //
195  if (oc.getInt("max-alternatives") < 2) {
196  WRITE_ERROR("At least two alternatives should be enabled.");
197  return false;
198  }
199 #ifndef HAVE_FOX
200  if (oc.getInt("routing-threads") > 1) {
201  WRITE_ERROR("Parallel routing is only possible when compiled with Fox.");
202  return false;
203  }
204 #endif
205  return true;
206 }
207 
208 
209 
210 /****************************************************************************/
211 
void doRegister(const std::string &name, Option *v)
Adds an option under the given name.
Definition: OptionsCont.cpp:82
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
void addSynonyme(const std::string &name1, const std::string &name2, bool isDeprecated=false)
Adds a synonyme for an options name (any order)
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
static void fillOptions(OptionsCont &oc, bool forDuarouter)
Inserts options used by routing applications into the OptionsCont-singleton.
Definition: ROFrame.cpp:50
static bool checkOptions(OptionsCont &oc)
Checks whether options are valid.
Definition: ROFrame.cpp:188
#define SUMOTIME_MAXSTRING
Definition: SUMOTime.h:46
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:206
An integer-option.
Definition: Option.h:313
A storage for options typed value containers)
Definition: OptionsCont.h:99
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.