Line data Source code
1 : /****************************************************************************/ 2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo 3 : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others. 4 : // This program and the accompanying materials are made available under the 5 : // terms of the Eclipse Public License 2.0 which is available at 6 : // https://www.eclipse.org/legal/epl-2.0/ 7 : // This Source Code may also be made available under the following Secondary 8 : // Licenses when the conditions for such availability set forth in the Eclipse 9 : // Public License 2.0 are satisfied: GNU General Public License, version 2 10 : // or later which is available at 11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html 12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later 13 : /****************************************************************************/ 14 : /// @file MSCFModel_Kerner.h 15 : /// @author Daniel Krajzewicz 16 : /// @author Michael Behrisch 17 : /// @date 03.04.2010 18 : /// 19 : // car-following model by B. Kerner 20 : /****************************************************************************/ 21 : #pragma once 22 : #include <config.h> 23 : 24 : #include "MSCFModel.h" 25 : #include <utils/xml/SUMOXMLDefinitions.h> 26 : 27 : 28 : // =========================================================================== 29 : // class definitions 30 : // =========================================================================== 31 : /** @class MSCFModel_Kerner 32 : * @brief car-following model by B. Kerner 33 : * @see MSCFModel 34 : */ 35 : class MSCFModel_Kerner : public MSCFModel { 36 : public: 37 : /** @brief Constructor 38 : * @param[in] vtype the type for which this model is built and also the parameter object to configure this model 39 : */ 40 : MSCFModel_Kerner(const MSVehicleType* vtype); 41 : 42 : 43 : /// @brief Destructor 44 : ~MSCFModel_Kerner(); 45 : 46 : 47 : /// @name Implementations of the MSCFModel interface 48 : /// @{ 49 : 50 : /** @brief Applies interaction with stops and lane changing model influences 51 : * @param[in] veh The ego vehicle 52 : * @param[in] vPos The possible velocity 53 : * @return The velocity after applying interactions with stops and lane change model influences 54 : */ 55 : double finalizeSpeed(MSVehicle* const veh, double vPos) const; 56 : 57 : /** @brief Computes the vehicle's safe speed (no dawdling) 58 : * @param[in] veh The vehicle (EGO) 59 : * @param[in] speed The vehicle's speed 60 : * @param[in] gap2pred The (netto) distance to the LEADER 61 : * @param[in] predSpeed The speed of LEADER 62 : * @return EGO's safe speed 63 : * @see MSCFModel::ffeV 64 : */ 65 : double followSpeed(const MSVehicle* const veh, double speed, double gap2pred, 66 : double predSpeed, double predMaxDecel, const MSVehicle* const pred = 0, const CalcReason usage = CalcReason::CURRENT) const; 67 : 68 : 69 : /** @brief Computes the vehicle's safe speed for approaching a non-moving obstacle (no dawdling) 70 : * @param[in] veh The vehicle (EGO) 71 : * @param[in] gap2pred The (netto) distance to the the obstacle 72 : * @return EGO's safe speed for approaching a non-moving obstacle 73 : * @see MSCFModel::ffeS 74 : * @todo generic Interface, models can call for the values they need 75 : */ 76 : double stopSpeed(const MSVehicle* const veh, const double speed, double gap2pred, double decel, const CalcReason usage = CalcReason::CURRENT) const; 77 : 78 : 79 : /** @brief Returns the model's name 80 : * @return The model's name 81 : * @see MSCFModel::getModelName 82 : */ 83 0 : int getModelID() const { 84 0 : return SUMO_TAG_CF_BKERNER; 85 : } 86 : /// @} 87 : 88 : 89 : 90 : /** @brief Duplicates the car-following model 91 : * @param[in] vtype The vehicle type this model belongs to (1:1) 92 : * @return A duplicate of this car-following model 93 : */ 94 : MSCFModel* duplicate(const MSVehicleType* vtype) const; 95 : 96 : 97 : MSCFModel::VehicleVariables* createVehicleVariables() const; 98 : 99 : 100 : private: 101 6879 : class VehicleVariables : public MSCFModel::VehicleVariables { 102 : public: 103 : double rand; 104 : }; 105 : 106 : /** @brief Returns the "safe" velocity 107 : * @param[in] gap2pred The (netto) distance to the LEADER 108 : * @param[in] predSpeed The LEADER's speed 109 : * @return the safe velocity 110 : */ 111 : double _v(const MSVehicle* const veh, double speed, double vfree, double gap, double predSpeed) const; 112 : 113 : 114 : 115 : private: 116 : /// @name model parameter 117 : /// @{ 118 : /// @brief Kerner's k 119 : double myK; 120 : 121 : /// @brief Kerner's phi 122 : double myPhi; 123 : 124 : /// @brief The precomputed value for myDecel*myTau 125 : double myTauDecel; 126 : /// @} 127 : 128 : };