43 double accel,
double decel,
double emergencyDecel,
double apparentDecel,
44 double headwayTime,
double delta,
45 double internalStepping) :
46 MSCFModel(vtype, accel, decel, emergencyDecel, apparentDecel, headwayTime), myDelta(delta),
47 myAdaptationFactor(1.), myAdaptationTime(0.),
48 myIterations(
MAX2(1, int(
TS / internalStepping + .5))),
49 myTwoSqrtAccelDecel(double(2 * sqrt(accel * decel))) {
54 double accel,
double decel,
double emergencyDecel,
double apparentDecel,
56 double adaptationFactor,
double adaptationTime,
57 double internalStepping) :
58 MSCFModel(vtype, accel, decel, emergencyDecel, apparentDecel, headwayTime),
myDelta(4.),
87 if (gap2pred < 0.01) {
101 const double vNext = veh->
getSpeed() + acc;
102 const double gap = (vNext - vL) * (veh->
getSpeed() + vL) / (2 *
myDecel) + vL;
111 const double predSpeed,
const double desSpeed,
const bool respectMinGap)
const {
120 double newSpeed = egoSpeed;
121 double gap = gap2pred;
123 const double delta_v = newSpeed - predSpeed;
128 const double acc =
myAccel * (1. - pow(newSpeed / desSpeed,
myDelta) - (s * s) / (gap * gap));
134 return MAX2(0., newSpeed);
double followSpeed(const MSVehicle *const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel) const
Computes the vehicle's safe speed (no dawdling)
double getMinGap() const
Get the free space in front of vehicles of this class.
~MSCFModel_IDM()
Destructor.
double _v(const MSVehicle *const veh, const double gap2pred, const double mySpeed, const double predSpeed, const double desSpeed, const bool respectMinGap=true) const
Representation of a vehicle in the micro simulation.
const MSVehicleType * myType
The type to which this model definition belongs to.
double stopSpeed(const MSVehicle *const veh, const double speed, double gap2pred) const
Computes the vehicle's safe speed for approaching a non-moving obstacle (no dawdling) ...
double myApparentDecel
The vehicle's deceleration as expected by surrounding traffic [m/s^2].
virtual double moveHelper(MSVehicle *const veh, double vPos) const
Applies interaction with stops and lane changing model influences.
const double myDelta
The IDM delta exponent.
The car-following model abstraction.
const double myAdaptationFactor
The IDMM adaptation factor beta.
double myAccel
The vehicle's maximum acceleration [m/s^2].
The car-following model and parameter.
MSCFModel * duplicate(const MSVehicleType *vtype) const
Duplicates the car-following model.
const double myAdaptationTime
The IDMM adaptation time tau.
double levelOfService
state variable for remembering speed deviation history (lambda)
double moveHelper(MSVehicle *const veh, double vPos) const
Applies interaction with stops and lane changing model influences.
const double myTwoSqrtAccelDecel
A computational shortcut.
MSCFModel_IDM(const MSVehicleType *vtype, double accel, double decel, double emergencyDecel, double apparentDecel, double headwayTime, double delta, double internalStepping)
Constructor.
double myDecel
The vehicle's maximum deceleration [m/s^2].
MSCFModel::VehicleVariables * getCarFollowVariables() const
Returns the vehicle's car following model variables.
double interactionGap(const MSVehicle *const , double vL) const
Returns the maximum gap at which an interaction between both vehicles occurs.
const int myIterations
The number of iterations in speed calculations.
double myEmergencyDecel
The vehicle's maximum emergency deceleration [m/s^2].
double getVehicleMaxSpeed(const SUMOVehicle *const veh) const
Returns the lane's maximum speed, given a vehicle's speed limit adaptation.
double myHeadwayTime
The driver's desired time headway (aka reaction time tau) [s].
MSLane * getLane() const
Returns the lane the vehicle is on.
double getSpeed() const
Returns the vehicle's current speed.