1 package org.opentrafficsim.road.gtu.lane.perception.mental;
2
3 import static org.opentrafficsim.base.parameters.constraint.NumericConstraint.POSITIVEZERO;
4
5 import org.djunits.value.vdouble.scalar.Duration;
6 import org.opentrafficsim.base.parameters.ParameterException;
7 import org.opentrafficsim.base.parameters.ParameterTypeDouble;
8 import org.opentrafficsim.base.parameters.ParameterTypes;
9 import org.opentrafficsim.base.parameters.Parameters;
10 import org.opentrafficsim.road.gtu.lane.perception.mental.Fuller.BehavioralAdaptation;
11
12
13
14
15
16
17
18
19
20
21
22 public class AdaptationHeadway implements BehavioralAdaptation
23 {
24
25
26 public static final ParameterTypeDouble BETA_T =
27 new ParameterTypeDouble("Beta_T", "max headway scaling", 1.0, POSITIVEZERO);
28
29
30 private Duration t0Min;
31
32
33 private Duration t0Max;
34
35 @Override
36 public void adapt(final Parameters parameters, final double taskSaturation) throws ParameterException
37 {
38 if (this.t0Min == null)
39 {
40 this.t0Min = parameters.getParameterOrNull(ParameterTypes.TMIN);
41 this.t0Max = parameters.getParameterOrNull(ParameterTypes.TMAX);
42 }
43 double eps = parameters.getParameter(Fuller.TS) - parameters.getParameter(Fuller.TS_CRIT);
44 eps = eps < 0.0 ? 0.0 : (eps > 1.0 ? 1.0 : eps);
45 double factor = 1.0 + parameters.getParameter(BETA_T) * eps;
46 Duration tMin = this.t0Min.times(factor);
47 Duration tMax = this.t0Max.times(factor);
48 if (tMax.si <= parameters.getParameter(ParameterTypes.TMIN).si)
49 {
50 parameters.setParameter(ParameterTypes.TMIN, tMin);
51 parameters.setParameter(ParameterTypes.TMAX, tMax);
52 }
53 else
54 {
55 parameters.setParameter(ParameterTypes.TMAX, tMax);
56 parameters.setParameter(ParameterTypes.TMIN, tMin);
57 }
58 }
59
60 }