/************************************************************************************ * Copyright (C) 2008 by Politehnica University of Bucharest and Rutgers University * All rights reserved. * Refer to LICENSE for terms and conditions of use. ***********************************************************************************/ package vnsim.vehicular.simulator; import vnsim.map.object.Globals; import vnsim.map.object.Road; public class AggresivePersonality implements Personality { private double coef1, coef2, coef3, coef4, coef5, coef6, coef7, coef8, coef9, coef10, coef11, coef12; public AggresivePersonality() { coef1=0.0; coef2=1.0-Math.random()*2; coef3=0.1-Math.random()*0.2; coef4=5.0-Math.random()*10; coef5=0.1-Math.random()*0.2; coef6=1.0-Math.random()*2; coef7=1.0-Math.random()*2; coef8=1.0-Math.random()*2; coef9=5.0-Math.random()*10; coef10=0.1-Math.random()*0.2; coef11=0.5-Math.random(); coef12=0.5-Math.random(); } public double getSafetyDistance(double speed) { if(speed<10) return (0.14+coef1)*speed+8.0+coef2; return (0.9/1.8)*speed+coef4; } public double getInfluenceDistance(double speed) { return (1.4+coef3)*speed+30.0+coef4; } public double getDesiredDistance(double speed){ if(speed<10) { return 5.0; } return (0.3+coef5)*speed+10.0+coef6; } public double getAccelerationFreeDriving() { return 8.0+coef7; } public double getAccelerationMaximumBrake() { return -30.0+coef8; } public double getWantedSpeed(int roadIndex) { Road r=Globals.map.roads.get(roadIndex); switch(r.getRoadinfo()[1]) { case 49: return 110+coef9; case 50: return 100+coef9; case 51: return 90+coef9; case 52: return 80+coef9; default: return 60+coef9; } } public double getLaneChangeSafetyDistance(double mySpeed, double folSpeed) { double dif=folSpeed-mySpeed; if(dif<0) return 4.0; if(dif<2 && mySpeed < 10) return 4.0; return (dif)*(0.4+coef10) + (10.0+coef11); } public double getLaneChangeSafetyDistanceInFront(double mySpeed, double precSpeed) { double dif=mySpeed-precSpeed; if(dif<0) return 4.0; if(dif<5) return 6.0; return dif*0.4+8.0; } public double getWantedSpeedInfluenced(double distanceFromIntersection, double requiredSpeed) { //return requiredSpeed+distanceFromIntersection*1000/4.0; double distMeters=distanceFromIntersection*1000; if(distMeters>90) return 100; return requiredSpeed+(-1.0/90.0*distMeters*distMeters+19/9*distMeters); } public double getReactionTimeFreeDriving() { return 0.8+coef12; } public boolean estimateRoadChangePossible(double mySpeed, double otherSpeed, double myDist, double otherDist) { if(otherSpeed<10) { if(otherDist > 0.03 && myDist < 0.03) return true; return false; } if(mySpeed>otherSpeed) { if(otherDist > 0.04 && myDist < 0.03) return true; } if(otherDist > 0.05 && myDist < 0.02) return true; return false; } }