SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00010 // The car-following model abstraction 00011 /****************************************************************************/ 00012 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00013 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors 00014 /****************************************************************************/ 00015 // 00016 // This file is part of SUMO. 00017 // SUMO is free software: you can redistribute it and/or modify 00018 // it under the terms of the GNU General Public License as published by 00019 // the Free Software Foundation, either version 3 of the License, or 00020 // (at your option) any later version. 00021 // 00022 /****************************************************************************/ 00023 #ifndef MSCFModel_h 00024 #define MSCFModel_h 00025 00026 // =========================================================================== 00027 // included modules 00028 // =========================================================================== 00029 #ifdef _MSC_VER 00030 #include <windows_config.h> 00031 #else 00032 #include <config.h> 00033 #endif 00034 00035 #include <cassert> 00036 #include <string> 00037 #include <utils/common/StdDefs.h> 00038 #include <utils/common/FileHelpers.h> 00039 00040 00041 // =========================================================================== 00042 // class declarations 00043 // =========================================================================== 00044 class MSVehicleType; 00045 class MSVehicle; 00046 class MSLane; 00047 00048 00049 // =========================================================================== 00050 // class definitions 00051 // =========================================================================== 00059 class MSCFModel { 00060 public: 00061 00062 class VehicleVariables { 00063 }; 00064 00068 MSCFModel(const MSVehicleType* vtype, SUMOReal accel, SUMOReal decel, SUMOReal headwayTime); 00069 00070 00072 virtual ~MSCFModel(); 00073 00074 00077 00083 virtual SUMOReal moveHelper(MSVehicle* const veh, SUMOReal vPos) const; 00084 00085 00096 virtual SUMOReal freeSpeed(const MSVehicle* const veh, SUMOReal speed, SUMOReal seen, SUMOReal maxSpeed) const { 00097 return followSpeed(veh, speed, seen, maxSpeed, 0); 00098 } 00099 00100 00110 virtual SUMOReal followSpeed(const MSVehicle* const veh, SUMOReal speed, SUMOReal gap2pred, SUMOReal predSpeed, SUMOReal predMaxDecel) const = 0; 00111 00112 00121 virtual SUMOReal stopSpeed(const MSVehicle* const veh, SUMOReal gap2pred) const = 0; 00122 00123 00132 virtual SUMOReal interactionGap(const MSVehicle* const veh, SUMOReal vL) const; 00133 00134 00138 virtual void saveState(std::ostream& os); 00139 00140 00144 virtual int getModelID() const = 0; 00145 00146 00151 virtual MSCFModel* duplicate(const MSVehicleType* vtype) const = 0; 00152 00153 00157 virtual VehicleVariables* createVehicleVariables() const { 00158 return 0; 00159 } 00161 00162 00165 00169 virtual SUMOReal getMaxAccel() const { 00170 return myAccel; 00171 } 00172 00173 00177 virtual SUMOReal getMaxDecel() const { 00178 return myDecel; 00179 } 00180 00181 00185 virtual SUMOReal getImperfection() const { 00186 return -1; 00187 } 00188 00189 00193 virtual SUMOReal getHeadwayTime() const { 00194 return myHeadwayTime; 00195 } 00197 00198 00199 00202 00210 void leftVehicleVsafe(const MSVehicle* const ego, const MSVehicle* const neigh, SUMOReal& vSafe) const; 00211 00212 00224 SUMOReal maxNextSpeed(SUMOReal speed) const; 00225 00226 00231 SUMOReal brakeGap(SUMOReal speed) const; 00232 00233 00239 SUMOReal getSecureGap(const SUMOReal speed, const SUMOReal leaderSpeed, const SUMOReal leaderMaxDecel) const { 00240 const int leaderSteps = int(leaderSpeed / ACCEL2SPEED(leaderMaxDecel)); 00241 const SUMOReal leaderBreak = SPEED2DIST(leaderSteps * leaderSpeed - ACCEL2SPEED(leaderMaxDecel) * leaderSteps * (leaderSteps + 1) / 2); 00242 return MAX2((SUMOReal) 0, brakeGap(speed) - leaderBreak); 00243 } 00244 00245 00250 SUMOReal getSpeedAfterMaxDecel(SUMOReal v) const { 00251 return MAX2((SUMOReal) 0, v - (SUMOReal) ACCEL2SPEED(myDecel)); 00252 } 00254 00255 00258 00262 virtual void setMaxAccel(SUMOReal accel) { 00263 myAccel = accel; 00264 } 00265 00266 00270 virtual void setMaxDecel(SUMOReal decel) { 00271 myDecel = decel; 00272 } 00273 00274 00278 virtual void setImperfection(SUMOReal imperfection) { 00279 UNUSED_PARAMETER(imperfection); 00280 } 00281 00282 00286 virtual void setHeadwayTime(SUMOReal headwayTime) { 00287 myHeadwayTime = headwayTime; 00288 } 00290 00291 00292 protected: 00294 const MSVehicleType* myType; 00295 00297 SUMOReal myAccel; 00298 00300 SUMOReal myDecel; 00301 00303 SUMOReal myHeadwayTime; 00304 }; 00305 00306 00307 #endif /* MSCFModel_h */ 00308