Idm.java

  1. package org.opentrafficsim.road.gtu.lane.tactical.following;

  2. import org.djunits.value.vdouble.scalar.Acceleration;
  3. import org.djunits.value.vdouble.scalar.Length;
  4. import org.djunits.value.vdouble.scalar.Speed;
  5. import org.opentrafficsim.base.parameters.ParameterException;
  6. import org.opentrafficsim.base.parameters.Parameters;
  7. import org.opentrafficsim.road.gtu.lane.perception.PerceptionIterable;
  8. import org.opentrafficsim.road.gtu.lane.perception.headway.Headway;

  9. /**
  10.  * Implementation of the IDM. See <a
  11.  * href=https://en.wikipedia.org/wiki/Intelligent_driver_model>https://en.wikipedia.org/wiki/Intelligent_driver_model</a>
  12.  * <p>
  13.  * Copyright (c) 2013-2023 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  14.  * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
  15.  * </p>
  16.  * @author <a href="https://dittlab.tudelft.nl">Wouter Schakel</a>
  17.  */
  18. public class Idm extends AbstractIdm
  19. {

  20.     /**
  21.      * Default constructor using default models for desired headway and desired speed.
  22.      */
  23.     public Idm()
  24.     {
  25.         super(HEADWAY, DESIRED_SPEED);
  26.     }

  27.     /**
  28.      * Constructor with modular models for desired headway and desired speed.
  29.      * @param desiredHeadwayModel DesiredHeadwayModel; desired headway model
  30.      * @param desiredSpeedModel DesiredSpeedModel; desired speed model
  31.      */
  32.     public Idm(final DesiredHeadwayModel desiredHeadwayModel, final DesiredSpeedModel desiredSpeedModel)
  33.     {
  34.         super(desiredHeadwayModel, desiredSpeedModel);
  35.     }

  36.     /** {@inheritDoc} */
  37.     @Override
  38.     public final String getName()
  39.     {
  40.         return "IDM";
  41.     }

  42.     /** {@inheritDoc} */
  43.     @Override
  44.     public final String getLongName()
  45.     {
  46.         return "Intelligent Driver Model";
  47.     }

  48.     /** {@inheritDoc} */
  49.     @Override
  50.     protected final Acceleration combineInteractionTerm(final Acceleration aFree, final Parameters parameters,
  51.             final Speed speed, final Speed desiredSpeed, final Length desiredHeadway,
  52.             final PerceptionIterable<? extends Headway> leaders) throws ParameterException
  53.     {
  54.         Acceleration a = parameters.getParameter(A);
  55.         Headway leader = leaders.first();
  56.         double sRatio =
  57.                 dynamicDesiredHeadway(parameters, speed, desiredHeadway, leader.getSpeed()).si / leader.getDistance().si;
  58.         double aInt = -a.si * sRatio * sRatio;
  59.         return Acceleration.instantiateSI(aFree.si + aInt);
  60.     }

  61. }