SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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.sourceforge.net/
12 // Copyright (C) 2001-2013 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>
36 #include <utils/options/Option.h>
40 #include <utils/common/ToString.h>
41 #include <utils/common/SUMOTime.h>
42 #include "ROFrame.h"
43 
44 #ifdef CHECK_MEMORY_LEAKS
45 #include <foreign/nvwa/debug_new.h>
46 #endif // CHECK_MEMORY_LEAKS
47 
48 
49 // ===========================================================================
50 // method definitions
51 // ===========================================================================
52 void
53 ROFrame::fillOptions(OptionsCont& oc, bool forDuarouter) {
54  // register options
55  // register I/O options
56  oc.doRegister("output-file", 'o', new Option_FileName());
57  oc.addSynonyme("output-file", "output");
58  oc.addDescription("output-file", "Output", "Write generated routes to FILE");
59 
60  oc.doRegister("vtype-output", new Option_FileName(""));
61  oc.addSynonyme("vtype-output", "vtype");
62  oc.addDescription("vtype-output", "Output", "Write used vehicle types into separate FILE");
63 
64  oc.doRegister("net-file", 'n', new Option_FileName());
65  oc.addSynonyme("net-file", "net");
66  oc.addDescription("net-file", "Input", "Use FILE as SUMO-network to route on");
67 
68  oc.doRegister("taz-files", 'd', new Option_FileName());
69  oc.addSynonyme("taz-files", "districts", true);
70  oc.addDescription("taz-files", "Input", "Read (additional) districts from FILE");
71 
72  oc.doRegister("alternative-files", 'a', new Option_FileName());
73  oc.addSynonyme("alternative-files", "alternatives-files");
74  oc.addSynonyme("alternative-files", "alternatives", true);
75  oc.addDescription("alternative-files", "Input", "Read alternatives from FILE");
76 
77  oc.doRegister("flow-files", 'f', new Option_FileName());
78  oc.addSynonyme("flow-files", "flows");
79  oc.addSynonyme("flow-files", "flow-definition", true);
80  oc.addDescription("flow-files", "Input", "Read flow-definitions from FILE(s)");
81 
82  if (forDuarouter) {
83  oc.doRegister("weight-files", 'w', new Option_FileName());
84  oc.addSynonyme("weight-files", "weights");
85  oc.addDescription("weight-files", "Input", "Read network weights from FILE(s)");
86 
87  oc.doRegister("lane-weight-files", new Option_FileName());
88  oc.addDescription("lane-weight-files", "Input", "Read lane-based network weights from FILE(s)");
89 
90  oc.doRegister("weight-attribute", 'x', new Option_String("traveltime"));
91  oc.addSynonyme("weight-attribute", "measure", true);
92  oc.addDescription("weight-attribute", "Input", "Name of the xml attribute which gives the edge weight");
93  }
94 
95  // register the time settings
96  oc.doRegister("begin", 'b', new Option_String("0", "TIME"));
97  oc.addDescription("begin", "Time", "Defines the begin time; Previous trips will be discarded");
98 
99  oc.doRegister("end", 'e', new Option_String(SUMOTIME_MAXSTRING, "TIME"));
100  oc.addDescription("end", "Time", "Defines the end time; Later trips will be discarded; Defaults to the maximum time that SUMO can represent");
101 
102  // register the processing options
103  oc.doRegister("ignore-errors", new Option_Bool(false));
104  oc.addSynonyme("ignore-errors", "continue-on-unbuild", true);
105  oc.addDescription("ignore-errors", "Processing", "Continue if a route could not be build");
106 
107  oc.doRegister("unsorted-input", new Option_Bool(false));
108  oc.addSynonyme("unsorted-input", "unsorted");
109  oc.addDescription("unsorted-input", "Processing", "Assume input is unsorted");
110 
111  oc.doRegister("randomize-flows", new Option_Bool(false));
112  oc.addDescription("randomize-flows", "Processing", "generate random departure times for flow input");
113 
114  oc.doRegister("max-alternatives", new Option_Integer(5));
115  oc.addDescription("max-alternatives", "Processing", "Prune the number of alternatives to INT");
116 
117  oc.doRegister("remove-loops", new Option_Bool(false));
118  oc.addDescription("remove-loops", "Processing", "Remove loops within the route; Remove turnarounds at start and end of the route");
119 
120  oc.doRegister("repair", new Option_Bool(false));
121  oc.addDescription("repair", "Processing", "Tries to correct a false route");
122 
123  oc.doRegister("weights.interpolate", new Option_Bool(false));
124  oc.addSynonyme("weights.interpolate", "interpolate", true);
125  oc.addDescription("weights.interpolate", "Processing", "Interpolate edge weights at interval boundaries");
126 
127  oc.doRegister("with-taz", new Option_Bool(false));
128  oc.addDescription("with-taz", "Processing", "Use origin and destination zones (districts) for in- and output");
129 
130  if (forDuarouter) {
131  oc.doRegister("routing-algorithm", new Option_String("dijkstra"));
132  oc.addDescription("routing-algorithm", "Processing",
133 #ifndef HAVE_INTERNAL // catchall for internal stuff
134  "Select among routing algorithms ['dijkstra', 'astar']"
135 #else
136  "Select among routing algorithms ['dijkstra', 'astar', 'bulkstar', 'CH', 'CHWrapper']"
137 #endif
138  );
139 
140 #ifdef HAVE_INTERNAL // catchall for internal stuff
141  oc.doRegister("weight-period", new Option_String("3600", "TIME"));
142  oc.addDescription("weight-period", "Processing", "Aggregation period for the given weight files; triggers rebuilding of Contraction Hirarchy");
143 #endif
144  }
145 
146  // register defaults options
147  oc.doRegister("departlane", new Option_String());
148  oc.addDescription("departlane", "Defaults", "Assigns a default depart lane");
149 
150  oc.doRegister("departpos", new Option_String());
151  oc.addDescription("departpos", "Defaults", "Assigns a default depart position");
152 
153  oc.doRegister("departspeed", new Option_String());
154  oc.addDescription("departspeed", "Defaults", "Assigns a default depart speed");
155 
156  oc.doRegister("arrivallane", new Option_String());
157  oc.addDescription("arrivallane", "Defaults", "Assigns a default arrival lane");
158 
159  oc.doRegister("arrivalpos", new Option_String());
160  oc.addDescription("arrivalpos", "Defaults", "Assigns a default arrival position");
161 
162  oc.doRegister("arrivalspeed", new Option_String());
163  oc.addDescription("arrivalspeed", "Defaults", "Assigns a default arrival speed");
164 
165  oc.doRegister("defaults-override", new Option_Bool(false));
166  oc.addDescription("defaults-override", "Defaults", "Defaults will override given values");
167 
168 
169  // register report options
170  oc.doRegister("stats-period", new Option_Integer(-1));
171  oc.addDescription("stats-period", "Report", "Defines how often statistics shall be printed");
172 
173  oc.doRegister("no-step-log", new Option_Bool(false));
174  oc.addDescription("no-step-log", "Report", "Disable console output of route parsing step");
175 }
176 
177 
178 bool
180  // check whether the output is valid and can be build
181  if (!oc.isSet("output-file")) {
182  WRITE_ERROR("No output specified.");
183  return false;
184  }
185  //
186  if (oc.getInt("max-alternatives") < 2) {
187  WRITE_ERROR("At least two alternatives should be enabled");
188  return false;
189  }
190  return true;
191 }
192 
193 
194 
195 /****************************************************************************/
196