SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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-sim.org/
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 <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 #ifdef CHECK_MEMORY_LEAKS
48 #include <foreign/nvwa/debug_new.h>
49 #endif // CHECK_MEMORY_LEAKS
50 
51 
52 // ===========================================================================
53 // method definitions
54 // ===========================================================================
55 void
58  oc.addCallExample("-c <CONFIGURATION>", "run routing with options from file");
59 
60  // insert options sub-topics
61  SystemFrame::addConfigurationOptions(oc); // fill this subtopic, too
62  oc.addOptionSubTopic("Input");
63  oc.addOptionSubTopic("Output");
64  oc.addOptionSubTopic("Processing");
65  oc.addOptionSubTopic("Defaults");
66  oc.addOptionSubTopic("Time");
67  SystemFrame::addReportOptions(oc); // fill this subtopic, too
68 
69  // insert options
70  ROFrame::fillOptions(oc, true);
72  addDUAOptions();
73  // add rand options
75 }
76 
77 
78 void
81  // register import options
82  oc.doRegister("trip-files", 't', new Option_FileName());
83  oc.addSynonyme("trips", "trip-files");
84  oc.addSynonyme("trip-defs", "trip-files", true);
85  oc.addDescription("trip-files", "Input", "Read trip-definitions from FILE(s)");
86 
87  oc.doRegister("route-files", 'r', new Option_FileName());
88  oc.addSynonyme("route-files", "sumo-input", true);
89  oc.addSynonyme("route-files", "sumo", true);
90  oc.addDescription("route-files", "Input", "Read sumo-routes from FILE(s)");
91 
92  // register further processing options
93  // ! The subtopic "Processing" must be initialised earlier !
94  oc.doRegister("weights.expand", new Option_Bool(false));
95  oc.addSynonyme("weights.expand", "expand-weights", true);
96  oc.addDescription("weights.expand", "Processing", "Expand weights behind the simulation's end");
97 }
98 
99 
100 void
103  // register Gawron's DUE-settings
104  oc.doRegister("gawron.beta", new Option_Float(SUMOReal(0.3)));
105  oc.addSynonyme("gawron.beta", "gBeta", true);
106  oc.addDescription("gawron.beta", "Processing", "Use FLOAT as Gawron's beta");
107 
108  oc.doRegister("gawron.a", new Option_Float(SUMOReal(0.05)));
109  oc.addSynonyme("gawron.a", "gA", true);
110  oc.addDescription("gawron.a", "Processing", "Use FLOAT as Gawron's a");
111 
112  oc.doRegister("exit-times", new Option_Bool(false));
113  oc.addDescription("exit-times", "Output", "Write exit times (weights) for each edge");
114 
115  oc.doRegister("keep-all-routes", new Option_Bool(false));
116  oc.addDescription("keep-all-routes", "Processing", "Save routes with near zero probability");
117 
118  oc.doRegister("skip-new-routes", new Option_Bool(false));
119  oc.addDescription("skip-new-routes", "Processing", "Only reuse routes from input, do not calculate new ones");
120 
121  oc.doRegister("logit", new Option_Bool(false));
122  oc.addDescription("logit", "Processing", "Use c-logit model");
123 
124  oc.doRegister("logit.beta", new Option_Float(SUMOReal(-1)));
125  oc.addSynonyme("logit.beta", "lBeta", true);
126  oc.addDescription("logit.beta", "Processing", "Use FLOAT as logit's beta");
127 
128  oc.doRegister("logit.gamma", new Option_Float(SUMOReal(1)));
129  oc.addSynonyme("logit.gamma", "lGamma", true);
130  oc.addDescription("logit.gamma", "Processing", "Use FLOAT as logit's gamma");
131 
132  oc.doRegister("logit.theta", new Option_Float(SUMOReal(-1)));
133  oc.addSynonyme("logit.theta", "lTheta", true);
134  oc.addDescription("logit.theta", "Processing", "Use FLOAT as logit's theta (negative values mean auto-estimation)");
135 
136 }
137 
138 
139 bool
142  bool ok = ROFrame::checkOptions(oc);
143 
145  std::string error;
146  if (oc.isSet("departlane") && !SUMOVehicleParameter::parseDepartLane(oc.getString("departlane"), "option", "departlane", p.departLane, p.departLaneProcedure, error)) {
147  WRITE_ERROR(error);
148  ok = false;
149  }
150  if (oc.isSet("departpos") && !SUMOVehicleParameter::parseDepartPos(oc.getString("departpos"), "option", "departpos", p.departPos, p.departPosProcedure, error)) {
151  WRITE_ERROR(error);
152  ok = false;
153  }
154  if (oc.isSet("departspeed") && !SUMOVehicleParameter::parseDepartSpeed(oc.getString("departspeed"), "option", "departspeed", p.departSpeed, p.departSpeedProcedure, error)) {
155  WRITE_ERROR(error);
156  ok = false;
157  }
158  if (oc.isSet("arrivallane") && !SUMOVehicleParameter::parseArrivalLane(oc.getString("arrivallane"), "option", "arrivallane", p.arrivalLane, p.arrivalLaneProcedure, error)) {
159  WRITE_ERROR(error);
160  ok = false;
161  }
162  if (oc.isSet("arrivalpos") && !SUMOVehicleParameter::parseArrivalPos(oc.getString("arrivalpos"), "option", "arrivalpos", p.arrivalPos, p.arrivalPosProcedure, error)) {
163  WRITE_ERROR(error);
164  ok = false;
165  }
166  if (oc.isSet("arrivalspeed") && !SUMOVehicleParameter::parseArrivalSpeed(oc.getString("arrivalspeed"), "option", "arrivalspeed", p.arrivalSpeed, p.arrivalSpeedProcedure, error)) {
167  WRITE_ERROR(error);
168  ok = false;
169  }
170 
171  if (oc.getString("routing-algorithm") != "dijkstra" && oc.getString("weight-attribute") != "traveltime") {
172  WRITE_ERROR("Routing algorithm '" + oc.getString("routing-algorithm") + "' does not support weight-attribute '" + oc.getString("weight-attribute") + "'.");
173  return false;
174  }
175  return ok;
176 }
177 
178 
179 
180 /****************************************************************************/
181 
void doRegister(const std::string &name, Option *v)
Adds an option under the given name.
Definition: OptionsCont.cpp:84
static void insertRandOptions()
Initialises the given options container with random number options.
Definition: RandHelper.cpp:53
static bool parseDepartSpeed(const std::string &val, const std::string &element, const std::string &id, SUMOReal &speed, DepartSpeedDefinition &dsd, std::string &error)
Validates a given departSpeed value.
static void addReportOptions(OptionsCont &oc)
Adds reporting options to the given container.
Definition: SystemFrame.cpp:74
static bool parseArrivalPos(const std::string &val, const std::string &element, const std::string &id, SUMOReal &pos, ArrivalPosDefinition &apd, std::string &error)
Validates a given arrivalPos value.
static void addImportOptions()
Inserts import options used by duarouter into the OptionsCont-singleton.
Definition: RODUAFrame.cpp:79
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:140
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.
SUMOReal departSpeed
(optional) The initial speed of the vehicle
SUMOReal arrivalSpeed
(optional) The final speed of the vehicle (not used yet)
SUMOReal arrivalPos
(optional) The position the vehicle shall arrive on
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:50
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:67
void addSynonyme(const std::string &name1, const std::string &name2, bool isDeprecated=false)
Adds a synonyme for an options name (any order)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
static void fillOptions()
Inserts options used by duarouter into the OptionsCont-singleton.
Definition: RODUAFrame.cpp:56
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:53
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
static bool checkOptions(OptionsCont &oc)
Checks whether options are valid.
Definition: ROFrame.cpp:179
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.
static bool parseDepartPos(const std::string &val, const std::string &element, const std::string &id, SUMOReal &pos, DepartPosDefinition &dpd, std::string &error)
Validates a given departPos value.
int departLane
(optional) The lane the vehicle shall depart from (index in edge)
static bool parseArrivalSpeed(const std::string &val, const std::string &element, const std::string &id, SUMOReal &speed, ArrivalSpeedDefinition &asd, std::string &error)
Validates a given arrivalSpeed value.
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:201
Structure representing possible vehicle parameter.
A storage for options typed value containers)
Definition: OptionsCont.h:108
SUMOReal departPos
(optional) The position the vehicle shall depart from
#define SUMOReal
Definition: config.h:221
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:101
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
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.