SUMO - Simulation of Urban MObility
MSCFModel.h
Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines