ExponentialTask.java

  1. package org.opentrafficsim.road.gtu.lane.perception.mental;

  2. import org.djunits.value.vdouble.scalar.Duration;
  3. import org.opentrafficsim.base.parameters.ParameterException;
  4. import org.opentrafficsim.base.parameters.Parameters;
  5. import org.opentrafficsim.core.dsol.OtsSimulatorInterface;
  6. import org.opentrafficsim.core.gtu.GtuException;
  7. import org.opentrafficsim.road.gtu.lane.LaneBasedGtu;
  8. import org.opentrafficsim.road.gtu.lane.perception.LanePerception;

  9. /**
  10.  * Class for exponential demand.
  11.  */
  12. public class ExponentialTask extends AbstractTask
  13. {
  14.     /** Initial level of task demand. */
  15.     private final double initialTaskDemand;

  16.     /** Additional task demand. */
  17.     private final double additionalTaskDemand;

  18.     /** Time scale at which task demand changes from the initial to the final value. */
  19.     private final Duration tau;

  20.     /** Start time of the distraction. */
  21.     private final double start;

  22.     /**
  23.      * Constructor.
  24.      * @param id String; id
  25.      * @param initialTaskDemand double; initial level of task demand
  26.      * @param finalTaskDemand double; final level of task demand
  27.      * @param tau Duration; time scale at which task demand changes from the initial to the final value
  28.      * @param simulator OtsSimulatorInterface; simulator
  29.      */
  30.     public ExponentialTask(final String id, final double initialTaskDemand, final double finalTaskDemand, final Duration tau,
  31.             final OtsSimulatorInterface simulator)
  32.     {
  33.         super(id);
  34.         this.initialTaskDemand = initialTaskDemand;
  35.         this.additionalTaskDemand = finalTaskDemand - initialTaskDemand;
  36.         this.tau = tau;
  37.         this.start = simulator.getSimulatorTime().si;
  38.     }

  39.     /** {@inheritDoc} */
  40.     @Override
  41.     public double calculateTaskDemand(final LanePerception perception, final LaneBasedGtu gtu, final Parameters parameters)
  42.             throws ParameterException, GtuException
  43.     {
  44.         double t = gtu.getSimulator().getSimulatorTime().si - this.start;
  45.         return this.initialTaskDemand + this.additionalTaskDemand * (1.0 - Math.exp(-t / this.tau.si));
  46.     }

  47. }