SUMO - Simulation of Urban MObility
RODUAFrame.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // Sets and checks options for dua-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 <fstream>
35 #include <ctime>
37 #include <utils/options/Option.h>
40 #include <utils/common/ToString.h>
41 #include "RODUAFrame.h"
42 #include <router/ROFrame.h>
46 
47 
48 // ===========================================================================
49 // method definitions
50 // ===========================================================================
51 void
54  oc.addCallExample("-c <CONFIGURATION>", "run routing with options from file");
55 
56  // insert options sub-topics
57  SystemFrame::addConfigurationOptions(oc); // fill this subtopic, too
58  oc.addOptionSubTopic("Input");
59  oc.addOptionSubTopic("Output");
60  oc.addOptionSubTopic("Processing");
61  oc.addOptionSubTopic("Defaults");
62  oc.addOptionSubTopic("Time");
63  SystemFrame::addReportOptions(oc); // fill this subtopic, too
64 
65  // insert options
66  ROFrame::fillOptions(oc, true);
68  addDUAOptions();
69  // add rand options
71 }
72 
73 
74 void
77  // register import options
78  oc.doRegister("trip-files", 't', new Option_FileName());
79  oc.addSynonyme("trips", "trip-files");
80  oc.addSynonyme("trip-defs", "trip-files", true);
81  oc.addDescription("trip-files", "Input", "Read trip-definitions from FILE(s)");
82 
83  oc.doRegister("route-files", 'r', new Option_FileName());
84  oc.addSynonyme("route-files", "sumo-input", true);
85  oc.addSynonyme("route-files", "sumo", true);
86  oc.addDescription("route-files", "Input", "Read sumo-routes from FILE(s)");
87 
88  // register further processing options
89  // ! The subtopic "Processing" must be initialised earlier !
90  oc.doRegister("weights.expand", new Option_Bool(false));
91  oc.addSynonyme("weights.expand", "expand-weights", true);
92  oc.addDescription("weights.expand", "Processing", "Expand weights behind the simulation's end");
93 }
94 
95 
96 void
99  // register Gawron's DUE-settings
100  oc.doRegister("gawron.beta", new Option_Float(double(0.3)));
101  oc.addSynonyme("gawron.beta", "gBeta", true);
102  oc.addDescription("gawron.beta", "Processing", "Use FLOAT as Gawron's beta");
103 
104  oc.doRegister("gawron.a", new Option_Float(double(0.05)));
105  oc.addSynonyme("gawron.a", "gA", true);
106  oc.addDescription("gawron.a", "Processing", "Use FLOAT as Gawron's a");
107 
108  oc.doRegister("exit-times", new Option_Bool(false));
109  oc.addDescription("exit-times", "Output", "Write exit times (weights) for each edge");
110 
111  oc.doRegister("keep-all-routes", new Option_Bool(false));
112  oc.addDescription("keep-all-routes", "Processing", "Save routes with near zero probability");
113 
114  oc.doRegister("skip-new-routes", new Option_Bool(false));
115  oc.addDescription("skip-new-routes", "Processing", "Only reuse routes from input, do not calculate new ones");
116 
117  oc.doRegister("logit", new Option_Bool(false)); // deprecated
118  oc.addDescription("logit", "Processing", "Use c-logit model (deprecated in favor of --route-choice-method logit)");
119 
120  oc.doRegister("route-choice-method", new Option_String("gawron"));
121  oc.addDescription("route-choice-method", "Processing", "Choose a route choice method: gawron, logit, or lohse");
122 
123  oc.doRegister("logit.beta", new Option_Float(double(-1)));
124  oc.addSynonyme("logit.beta", "lBeta", true);
125  oc.addDescription("logit.beta", "Processing", "Use FLOAT as logit's beta");
126 
127  oc.doRegister("logit.gamma", new Option_Float(double(1)));
128  oc.addSynonyme("logit.gamma", "lGamma", true);
129  oc.addDescription("logit.gamma", "Processing", "Use FLOAT as logit's gamma");
130 
131  oc.doRegister("logit.theta", new Option_Float(double(-1)));
132  oc.addSynonyme("logit.theta", "lTheta", true);
133  oc.addDescription("logit.theta", "Processing", "Use FLOAT as logit's theta (negative values mean auto-estimation)");
134 
135  oc.doRegister("persontrip.walkfactor", new Option_Float(double(0.9)));
136  oc.addDescription("persontrip.walkfactor", "Processing", "Use FLOAT as a factor on pedestrian maximum speed during intermodal routing");
137 
138 }
139 
140 
141 bool
144  bool ok = ROFrame::checkOptions(oc);
145 
147  std::string error;
148  if (oc.isSet("departlane") && !SUMOVehicleParameter::parseDepartLane(oc.getString("departlane"), "option", "departlane", p.departLane, p.departLaneProcedure, error)) {
149  WRITE_ERROR(error);
150  ok = false;
151  }
152  if (oc.isSet("departpos") && !SUMOVehicleParameter::parseDepartPos(oc.getString("departpos"), "option", "departpos", p.departPos, p.departPosProcedure, error)) {
153  WRITE_ERROR(error);
154  ok = false;
155  }
156  if (oc.isSet("departspeed") && !SUMOVehicleParameter::parseDepartSpeed(oc.getString("departspeed"), "option", "departspeed", p.departSpeed, p.departSpeedProcedure, error)) {
157  WRITE_ERROR(error);
158  ok = false;
159  }
160  if (oc.isSet("arrivallane") && !SUMOVehicleParameter::parseArrivalLane(oc.getString("arrivallane"), "option", "arrivallane", p.arrivalLane, p.arrivalLaneProcedure, error)) {
161  WRITE_ERROR(error);
162  ok = false;
163  }
164  if (oc.isSet("arrivalpos") && !SUMOVehicleParameter::parseArrivalPos(oc.getString("arrivalpos"), "option", "arrivalpos", p.arrivalPos, p.arrivalPosProcedure, error)) {
165  WRITE_ERROR(error);
166  ok = false;
167  }
168  if (oc.isSet("arrivalspeed") && !SUMOVehicleParameter::parseArrivalSpeed(oc.getString("arrivalspeed"), "option", "arrivalspeed", p.arrivalSpeed, p.arrivalSpeedProcedure, error)) {
169  WRITE_ERROR(error);
170  ok = false;
171  }
172 
173  if (oc.getString("routing-algorithm") != "dijkstra" && oc.getString("weight-attribute") != "traveltime") {
174  WRITE_ERROR("Routing algorithm '" + oc.getString("routing-algorithm") + "' does not support weight-attribute '" + oc.getString("weight-attribute") + "'.");
175  return false;
176  }
177 
178  if (oc.getBool("bulk-routing") && (oc.getString("routing-algorithm") == "CH" || oc.getString("routing-algorithm") == "CHWrapper")) {
179  WRITE_ERROR("Routing algorithm '" + oc.getString("routing-algorithm") + "' does not support bulk routing.");
180  return false;
181  }
182 
183  if (oc.getString("route-choice-method") != "gawron" && oc.getString("route-choice-method") != "logit") {
184  WRITE_ERROR("Invalid route choice method '" + oc.getString("route-choice-method") + "'.");
185  return false;
186  }
187 
188  if (oc.getBool("logit")) {
189  WRITE_WARNING("The --logit option is deprecated, please use --route-choice-method logit.");
190  oc.set("route-choice-method", "logit");
191  }
192  return ok;
193 }
194 
195 
196 
197 /****************************************************************************/
198 
void doRegister(const std::string &name, Option *v)
Adds an option under the given name.
Definition: OptionsCont.cpp:82
static void insertRandOptions()
Initialises the given options container with random number options.
Definition: RandHelper.cpp:49
static void addReportOptions(OptionsCont &oc)
Adds reporting options to the given container.
Definition: SystemFrame.cpp:72
static void addImportOptions()
Inserts import options used by duarouter into the OptionsCont-singleton.
Definition: RODUAFrame.cpp:75
ArrivalLaneDefinition arrivalLaneProcedure
Information how the vehicle shall choose the lane to arrive on.
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid for usage within duarouter...
Definition: RODUAFrame.cpp:142
void addCallExample(const std::string &example, const std::string &desc)
Add a call example.
DepartLaneDefinition departLaneProcedure
Information how the vehicle shall choose the lane to depart from.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
ArrivalSpeedDefinition arrivalSpeedProcedure
Information how the vehicle&#39;s end speed shall be chosen.
static void addConfigurationOptions(OptionsCont &oc)
Adds configuration options to the given container.
Definition: SystemFrame.cpp:47
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:200
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:65
void addSynonyme(const std::string &name1, const std::string &name2, bool isDeprecated=false)
Adds a synonyme for an options name (any order)
double departSpeed
(optional) The initial speed of the vehicle
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
static void fillOptions()
Inserts options used by duarouter into the OptionsCont-singleton.
Definition: RODUAFrame.cpp:52
DepartSpeedDefinition departSpeedProcedure
Information how the vehicle&#39;s initial speed shall be chosen.
static void fillOptions(OptionsCont &oc, bool forDuarouter)
Inserts options used by routing applications into the OptionsCont-singleton.
Definition: ROFrame.cpp:50
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
static bool checkOptions(OptionsCont &oc)
Checks whether options are valid.
Definition: ROFrame.cpp:188
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
int arrivalLane
(optional) The lane the vehicle shall arrive on (not used yet)
void addOptionSubTopic(const std::string &topic)
Adds an option subtopic.
static bool parseArrivalLane(const std::string &val, const std::string &element, const std::string &id, int &lane, ArrivalLaneDefinition &ald, std::string &error)
Validates a given arrivalLane value.
int departLane
(optional) The lane the vehicle shall depart from (index in edge)
double arrivalPos
(optional) The position the vehicle shall arrive on
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:206
double departPos
(optional) The position the vehicle shall depart from
Structure representing possible vehicle parameter.
bool set(const std::string &name, const std::string &value)
Sets the given value for the named option.
static bool parseDepartPos(const std::string &val, const std::string &element, const std::string &id, double &pos, DepartPosDefinition &dpd, std::string &error)
Validates a given departPos value.
static bool parseArrivalSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, ArrivalSpeedDefinition &asd, std::string &error)
Validates a given arrivalSpeed value.
A storage for options typed value containers)
Definition: OptionsCont.h:99
static bool parseArrivalPos(const std::string &val, const std::string &element, const std::string &id, double &pos, ArrivalPosDefinition &apd, std::string &error)
Validates a given arrivalPos value.
static bool parseDepartSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, DepartSpeedDefinition &dsd, std::string &error)
Validates a given departSpeed value.
double arrivalSpeed
(optional) The final speed of the vehicle (not used yet)
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
static void addDUAOptions()
Inserts dua options used by duarouter into the OptionsCont-singleton.
Definition: RODUAFrame.cpp:97
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
static bool parseDepartLane(const std::string &val, const std::string &element, const std::string &id, int &lane, DepartLaneDefinition &dld, std::string &error)
Validates a given departLane value.