bool MSCFModel_KraussOrig1::hasSafeGap(SUMOReal speed, SUMOReal gap, SUMOReal predSpeed, SUMOReal laneMaxSpeed) const throw() { if (gap<0) { return false; } SUMOReal vSafe = MIN2(_vsafe(gap, predSpeed), maxNextSpeed(speed)); SUMOReal vNext = MIN3(maxNextSpeed(speed), laneMaxSpeed, vSafe); return (vNext>=getSpeedAfterMaxDecel(speed) && gap>= SPEED2DIST(speed)); }
SUMOReal MSCFModel_SmartSK::stopSpeed(const MSVehicle* const veh, const SUMOReal speed, SUMOReal gap) const { SSKVehicleVariables* vars = (SSKVehicleVariables*)veh->getCarFollowVariables(); // if (((gap - vars->gOld) < maxDeltaGap) && (speed>=5.0) && gap>=5.0) { if ((gap - vars->gOld) < maxDeltaGap) { SUMOReal tTauTest = gap / speed; // allow headway only to decrease only, never to increase. Increase is handled automatically by the headway dynamics in moveHelper()!!! if ((tTauTest < vars->myHeadway) && (tTauTest > TS)) { vars->myHeadway = tTauTest; } } return MAX2(getSpeedAfterMaxDecel(speed), MIN2(_vsafe(veh, gap, 0), maxNextSpeed(speed, veh))); }
SUMOReal MSCFModel_SmartSK::followSpeed(const MSVehicle* const veh, SUMOReal speed, SUMOReal gap, SUMOReal predSpeed, SUMOReal /*predMaxDecel*/) const { SSKVehicleVariables* vars = (SSKVehicleVariables*)veh->getCarFollowVariables(); // if (((gap - vars->gOld) < maxDeltaGap) && (speed>=5.0) && gap>=5.0) { if ((gap - vars->gOld) < maxDeltaGap) { SUMOReal tTauTest = gap / speed; // allow headway only to decrease only, never to increase. Increase is handled automatically by the headway dynamics in moveHelper()!!! if ((tTauTest < vars->myHeadway) && (tTauTest > TS)) { vars->myHeadway = tTauTest; } } SUMOReal vsafe = _vsafe(veh, gap, predSpeed); if ((speed <= 0.0) && (vsafe < myS2Sspeed)) { vsafe = 0; } SUMOReal vNew = MAX2(getSpeedAfterMaxDecel(speed), MIN2(vsafe, maxNextSpeed(speed, veh))); // there must be a better place to do the following assignment!!! vars->gOld = gap; vars->ggOld[(int)vNew] = gap; return vNew; }
SUMOReal MSCFModel_Daniel1::stopSpeed(const MSVehicle* const veh, SUMOReal gap) const { return MIN2(_vsafe(gap, 0), maxNextSpeed(veh->getSpeed(), veh)); }
SUMOReal MSCFModel_Daniel1::followSpeed(const MSVehicle* const veh, SUMOReal speed, SUMOReal gap, SUMOReal predSpeed, SUMOReal /*predMaxDecel*/) const { return MIN2(_vsafe(gap, predSpeed), maxNextSpeed(speed, veh)); }
SUMOReal MSCFModel_Krauss::stopSpeed(const MSVehicle* const veh, const SUMOReal speed, SUMOReal gap) const { return MIN2(_vsafe(gap, 0, 0), maxNextSpeed(speed, veh)); }
SUMOReal MSCFModel_Krauss::followSpeed(const MSVehicle* const veh, const SUMOReal speed, SUMOReal gap, SUMOReal predSpeed, SUMOReal predMaxDecel) const { return MIN2(_vsafe(gap, predSpeed, predMaxDecel), maxNextSpeed(speed, veh)); }
SUMOReal MSCFModel_KraussOrig1::stopSpeed(const MSVehicle* const veh, SUMOReal gap) const { return MIN2(_vsafe(gap, 0), maxNextSpeed(veh->getSpeed())); }
SUMOReal MSCFModel_KraussOrig1::followSpeed(const MSVehicle* const /*veh*/, SUMOReal speed, SUMOReal gap, SUMOReal predSpeed, SUMOReal /*predMaxDecel*/) const { return MIN2(_vsafe(gap, predSpeed), maxNextSpeed(speed)); }
SUMOReal MSCFModel_KraussOrig1::ffeV(const MSVehicle * const veh, const MSVehicle *pred) const throw() { return MIN2(_vsafe(veh->gap2pred(*pred), pred->getSpeed()), maxNextSpeed(veh->getSpeed())); }
SUMOReal MSCFModel_KraussOrig1::ffeV(const MSVehicle * const veh, SUMOReal speed, SUMOReal gap, SUMOReal predSpeed) const throw() { return MIN2(_vsafe(gap, predSpeed), maxNextSpeed(speed)); }