SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00009 // Sets and checks options for dua-routing 00010 /****************************************************************************/ 00011 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00012 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors 00013 /****************************************************************************/ 00014 // 00015 // This file is part of SUMO. 00016 // SUMO is free software: you can redistribute it and/or modify 00017 // it under the terms of the GNU General Public License as published by 00018 // the Free Software Foundation, either version 3 of the License, or 00019 // (at your option) any later version. 00020 // 00021 /****************************************************************************/ 00022 00023 00024 // =========================================================================== 00025 // included modules 00026 // =========================================================================== 00027 #ifdef _MSC_VER 00028 #include <windows_config.h> 00029 #else 00030 #include <config.h> 00031 #endif 00032 00033 #include <iostream> 00034 #include <fstream> 00035 #include <ctime> 00036 #include <utils/options/OptionsCont.h> 00037 #include <utils/options/Option.h> 00038 #include <utils/common/MsgHandler.h> 00039 #include <utils/common/UtilExceptions.h> 00040 #include <utils/common/ToString.h> 00041 #include "RODUAFrame.h" 00042 #include <router/ROFrame.h> 00043 #include <utils/common/RandHelper.h> 00044 #include <utils/common/SystemFrame.h> 00045 #include <utils/common/SUMOVehicleParameter.h> 00046 00047 #ifdef CHECK_MEMORY_LEAKS 00048 #include <foreign/nvwa/debug_new.h> 00049 #endif // CHECK_MEMORY_LEAKS 00050 00051 00052 // =========================================================================== 00053 // method definitions 00054 // =========================================================================== 00055 void 00056 RODUAFrame::fillOptions() { 00057 OptionsCont& oc = OptionsCont::getOptions(); 00058 oc.addCallExample("-c <CONFIGURATION>", "run routing with options from file"); 00059 00060 // insert options sub-topics 00061 SystemFrame::addConfigurationOptions(oc); // fill this subtopic, too 00062 oc.addOptionSubTopic("Input"); 00063 oc.addOptionSubTopic("Output"); 00064 oc.addOptionSubTopic("Processing"); 00065 oc.addOptionSubTopic("Defaults"); 00066 oc.addOptionSubTopic("Time"); 00067 SystemFrame::addReportOptions(oc); // fill this subtopic, too 00068 00069 // insert options 00070 ROFrame::fillOptions(oc, true); 00071 addImportOptions(); 00072 addDUAOptions(); 00073 // add rand options 00074 RandHelper::insertRandOptions(); 00075 } 00076 00077 00078 void 00079 RODUAFrame::addImportOptions() { 00080 OptionsCont& oc = OptionsCont::getOptions(); 00081 // register import options 00082 oc.doRegister("trip-files", 't', new Option_FileName()); 00083 oc.addSynonyme("trips", "trip-files"); 00084 oc.addSynonyme("trip-defs", "trip-files", true); 00085 oc.addDescription("trip-files", "Input", "Read trip-definitions from FILE(s)"); 00086 00087 oc.doRegister("route-files", 'r', new Option_FileName()); 00088 oc.addSynonyme("route-files", "sumo-input", true); 00089 oc.addSynonyme("route-files", "sumo", true); 00090 oc.addDescription("route-files", "Input", "Read sumo-routes from FILE(s)"); 00091 00092 // register further processing options 00093 // ! The subtopic "Processing" must be initialised earlier ! 00094 oc.doRegister("weights.expand", new Option_Bool(false)); 00095 oc.addSynonyme("weights.expand", "expand-weights", true); 00096 oc.addDescription("weights.expand", "Processing", "Expand weights behind the simulation's end"); 00097 } 00098 00099 00100 void 00101 RODUAFrame::addDUAOptions() { 00102 OptionsCont& oc = OptionsCont::getOptions(); 00103 // register Gawron's DUE-settings 00104 oc.doRegister("gawron.beta", new Option_Float(SUMOReal(0.3))); 00105 oc.addSynonyme("gawron.beta", "gBeta", true); 00106 oc.addDescription("gawron.beta", "Processing", "Use FLOAT as Gawron's beta"); 00107 00108 oc.doRegister("gawron.a", new Option_Float(SUMOReal(0.05))); 00109 oc.addSynonyme("gawron.a", "gA", true); 00110 oc.addDescription("gawron.a", "Processing", "Use FLOAT as Gawron's a"); 00111 00112 oc.doRegister("exit-times", new Option_Bool(false)); 00113 oc.addDescription("exit-times", "Output", "Write exit times (weights) for each edge"); 00114 00115 oc.doRegister("keep-all-routes", new Option_Bool(false)); 00116 oc.addDescription("keep-all-routes", "Processing", "Save routes with near zero probability"); 00117 00118 oc.doRegister("skip-new-routes", new Option_Bool(false)); 00119 oc.addDescription("skip-new-routes", "Processing", "Only reuse routes from input, do not calculate new ones"); 00120 00121 oc.doRegister("logit", new Option_Bool(false)); 00122 oc.addDescription("logit", "Processing", "Use c-logit model"); 00123 00124 oc.doRegister("logit.beta", new Option_Float(SUMOReal(-1))); 00125 oc.addSynonyme("logit.beta", "lBeta", true); 00126 oc.addDescription("logit.beta", "Processing", "Use FLOAT as logit's beta"); 00127 00128 oc.doRegister("logit.gamma", new Option_Float(SUMOReal(1))); 00129 oc.addSynonyme("logit.gamma", "lGamma", true); 00130 oc.addDescription("logit.gamma", "Processing", "Use FLOAT as logit's gamma"); 00131 00132 oc.doRegister("logit.theta", new Option_Float(SUMOReal(-1))); 00133 oc.addSynonyme("logit.theta", "lTheta", true); 00134 oc.addDescription("logit.theta", "Processing", "Use FLOAT as logit's theta (negative values mean auto-estimation)"); 00135 00136 } 00137 00138 00139 bool 00140 RODUAFrame::checkOptions() { 00141 OptionsCont& oc = OptionsCont::getOptions(); 00142 bool ok = ROFrame::checkOptions(oc); 00143 ok &= (!oc.isSet("departlane") || SUMOVehicleParameter::departlaneValidate(oc.getString("departlane"))); 00144 ok &= (!oc.isSet("departpos") || SUMOVehicleParameter::departposValidate(oc.getString("departpos"))); 00145 ok &= (!oc.isSet("departspeed") || SUMOVehicleParameter::departspeedValidate(oc.getString("departspeed"))); 00146 ok &= (!oc.isSet("arrivallane") || SUMOVehicleParameter::arrivallaneValidate(oc.getString("arrivallane"))); 00147 ok &= (!oc.isSet("arrivalpos") || SUMOVehicleParameter::arrivalposValidate(oc.getString("arrivalpos"))); 00148 ok &= (!oc.isSet("arrivalspeed") || SUMOVehicleParameter::arrivalspeedValidate(oc.getString("arrivalspeed"))); 00149 if (oc.getString("routing-algorithm") != "dijkstra" && oc.getString("weight-attribute") != "traveltime") { 00150 WRITE_ERROR("Only routing algorithm 'dijkstra' supports weight-attribute '" + oc.getString("weight-attribute") + "'."); 00151 return false; 00152 } 00153 return ok; 00154 } 00155 00156 00157 00158 /****************************************************************************/ 00159