1 package org.opentrafficsim.road.gtu.lane.tactical.following;
2
3 import org.djunits.value.vdouble.scalar.Acceleration;
4 import org.djunits.value.vdouble.scalar.Length;
5 import org.djunits.value.vdouble.scalar.Speed;
6 import org.opentrafficsim.base.parameters.ParameterException;
7 import org.opentrafficsim.base.parameters.Parameters;
8 import org.opentrafficsim.road.gtu.lane.perception.PerceptionIterable;
9 import org.opentrafficsim.road.gtu.lane.perception.object.PerceivedObject;
10
11
12
13
14
15
16
17
18
19
20 public class Idm extends AbstractIdm
21 {
22
23
24
25
26 public Idm()
27 {
28 super(HEADWAY, DESIRED_SPEED);
29 }
30
31
32
33
34
35
36 public Idm(final DesiredHeadwayModel desiredHeadwayModel, final DesiredSpeedModel desiredSpeedModel)
37 {
38 super(desiredHeadwayModel, desiredSpeedModel);
39 }
40
41 @Override
42 public final String getName()
43 {
44 return "IDM";
45 }
46
47 @Override
48 public final String getLongName()
49 {
50 return "Intelligent Driver Model";
51 }
52
53 @Override
54 protected final Acceleration combineInteractionTerm(final Acceleration aFree, final Parameters parameters,
55 final Speed speed, final Speed desiredSpeed, final Length desiredHeadway,
56 final PerceptionIterable<? extends PerceivedObject> leaders) throws ParameterException
57 {
58 Acceleration a = parameters.getParameter(A);
59 PerceivedObject leader = leaders.first();
60 double sRatio =
61 dynamicDesiredHeadway(parameters, speed, desiredHeadway, leader.getSpeed()).si / leader.getDistance().si;
62 double aInt = -a.si * sRatio * sRatio;
63 return Acceleration.ofSI(aFree.si + aInt);
64 }
65
66 }