21 #ifndef MSLCM_LC2013_h 22 #define MSLCM_LC2013_h 37 #define INVALID_SPEED 299792458 + 1 // nothing can go faster than the speed of light! 76 const std::pair<MSVehicle*, double>& leader,
77 const std::pair<MSVehicle*, double>& neighLead,
78 const std::pair<MSVehicle*, double>& neighFollow,
80 const std::vector<MSVehicle::LaneQ>& preb,
96 double patchSpeed(
const double min,
const double wanted,
const double max,
99 double _patchSpeed(
const double min,
const double wanted,
const double max,
114 void setParameter(
const std::string& key,
const std::string& value);
129 const std::pair<MSVehicle*, double>& leader,
130 const std::pair<MSVehicle*, double>& neighLead,
131 const std::pair<MSVehicle*, double>& neighFollow,
133 const std::vector<MSVehicle::LaneQ>& preb,
142 int blocked,
int dir,
143 const std::pair<MSVehicle*, double>& neighLead,
144 double remainingSeconds);
148 int blocked,
int dir,
149 const std::pair<MSVehicle*, double>& neighFollow,
150 double remainingSeconds,
151 double plannedSpeed);
201 return dist / (abs(laneOffset)) < lookForwardDist;
204 return dist / abs(laneOffset) > lookForwardDist;
218 typedef std::pair<double, int>
Info;
double myLeadingBlockerLength
double patchSpeed(const double min, const double wanted, const double max, const MSCFModel &cfModel)
Called to adapt the speed in order to allow a lane change. It uses information on LC-related desired ...
double getAssumedDecelForLaneChangeDuration() const
Returns a deceleration value which is used for the estimation of the duration of a lane change...
void saveBlockerLength(MSVehicle *blocker, int lcaCounter)
save space for vehicles which need to counter-lane-change
Representation of a vehicle in the micro simulation.
MSLCM_LC2013(MSVehicle &v)
double getSafetyFactor() const
return factor for modifying the safety constraints of the car-following model
double getRoundaboutDistBonus(const MSVehicle::LaneQ &curr, const MSVehicle::LaneQ &neigh, const MSVehicle::LaneQ &best)
Computes the artificial bonus distance for roundabout lanes this additional distance reduces the sens...
bool amBlockingFollower()
bool amBlockingFollowerNB()
double myKeepRightProbability
The car-following model abstraction.
void addLCSpeedAdvice(const double vSafe)
Takes a vSafe (speed advice for speed in the next simulation step), converts it into an acceleration ...
double myChangeProbThresholdLeft
int _wantsChange(int laneOffset, MSAbstractLaneChangeModel::MSLCMessager &msgPass, int blocked, const std::pair< MSVehicle *, double > &leader, const std::pair< MSVehicle *, double > &neighLead, const std::pair< MSVehicle *, double > &neighFollow, const MSLane &neighLane, const std::vector< MSVehicle::LaneQ > &preb, MSVehicle **lastBlocked, MSVehicle **firstBlocked)
helper function for doing the actual work
void initDerivedParameters()
init cached parameters derived directly from model parameters
double _patchSpeed(const double min, const double wanted, const double max, const MSCFModel &cfModel)
std::pair< double, int > Info
information regarding save velocity (unused) and state flags of the ego vehicle
double computeSpeedLat(double latDist, double &maneuverDist)
decides the next lateral speed (for continuous lane changing)
LaneChangeModel getModelID() const
Returns the model's id.
bool currentDistDisallows(double dist, int laneOffset, double lookForwardDist)
bool debugVehicle() const
whether the current vehicles shall be debugged
A class responsible for exchanging messages between cars involved in lane-change interaction.
static double overtakeDistance(const MSVehicle *follower, const MSVehicle *leader, const double gap, double followerSpeed=INVALID_SPEED, double leaderSpeed=INVALID_SPEED)
A lane change model developed by D. Krajzewicz, J. Erdmann et al. between 2004 and 2013...
double mySpeedGainProbability
a value for tracking the probability that a change to the offset with the same sign is beneficial ...
void informFollower(MSAbstractLaneChangeModel::MSLCMessager &msgPass, int blocked, int dir, const std::pair< MSVehicle *, double > &neighFollow, double remainingSeconds, double plannedSpeed)
decide whether we will try cut in before the follower or allow to be overtaken
bool currentDistAllows(double dist, int laneOffset, double lookForwardDist)
const double myExperimentalParam1
int slowDownForBlocked(MSVehicle **blocked, int state)
compute useful slowdowns for blocked vehicles
int wantsChange(int laneOffset, MSAbstractLaneChangeModel::MSLCMessager &msgPass, int blocked, const std::pair< MSVehicle *, double > &leader, const std::pair< MSVehicle *, double > &neighLead, const std::pair< MSVehicle *, double > &neighFollow, const MSLane &neighLane, const std::vector< MSVehicle::LaneQ > &preb, MSVehicle **lastBlocked, MSVehicle **firstBlocked)
Called to examine whether the vehicle wants to change using the given laneOffset. This method gets th...
const double myOvertakeRightParam
A structure representing the best lanes for continuing the current route starting at 'lane'...
int myOwnState
The current state of the vehicle.
std::vector< double > myLCAccelerationAdvices
vector of LC-related acceleration recommendations Filled in wantsChange() and applied in patchSpeed()...
double myChangeProbThresholdRight
void adaptSpeedToPedestrians(const MSLane *lane, double &v)
react to pedestrians on the given lane
void saveBlockerLength(double length)
reserve space at the end of the lane to avoid dead locks
void setParameter(const std::string &key, const std::string &value)
try to set the given parameter for this laneChangeModel. Throw exception for unsupported key ...
double myCooperativeParam
std::string getParameter(const std::string &key) const
try to retrieve the given parameter from this device. Throw exception for unsupported key ...
bool amBlockingFollowerPlusNB()
double informLeader(MSAbstractLaneChangeModel::MSLCMessager &msgPass, int blocked, int dir, const std::pair< MSVehicle *, double > &neighLead, double remainingSeconds)
void * inform(void *info, MSVehicle *sender)
Representation of a lane in the micro simulation.
Interface for lane-change models.
double getOppositeSafetyFactor() const
return factor for modifying the safety constraints for opposite-diretction overtaking of the car-foll...