ToledoLaneChangeParameters.java
package org.opentrafficsim.road.gtu.lane.tactical.toledo;
import static org.opentrafficsim.core.gtu.behavioralcharacteristics.AbstractParameterType.Check.NEGATIVE;
import static org.opentrafficsim.core.gtu.behavioralcharacteristics.AbstractParameterType.Check.POSITIVE;
import static org.opentrafficsim.core.gtu.behavioralcharacteristics.AbstractParameterType.Check.UNITINTERVAL;
import java.lang.reflect.Field;
import org.djunits.unit.TimeUnit;
import org.djunits.value.vdouble.scalar.Duration;
import org.opentrafficsim.core.gtu.behavioralcharacteristics.BehavioralCharacteristics;
import org.opentrafficsim.core.gtu.behavioralcharacteristics.ParameterException;
import org.opentrafficsim.core.gtu.behavioralcharacteristics.ParameterTypeDouble;
import org.opentrafficsim.core.gtu.behavioralcharacteristics.ParameterTypeDuration;
/**
* List of parameters for the model of Toledo (2003).<br>
* <br>
* Tomer Toledo (2003) "Integrated Driving Behavior Modeling", Massachusetts Institute of Technology.
* <p>
* Copyright (c) 2013-2016 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
* BSD-style license. See <a href="http://opentrafficsim.org/docs/current/license.html">OpenTrafficSim License</a>.
* <p>
* @version $Revision$, $LastChangedDate$, by $Author$, initial version Jun 21, 2016 <br>
* @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
* @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
* @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
*/
public final class ToledoLaneChangeParameters
{
/** Fixed model time step. */
public static final ParameterTypeDuration DT = new ParameterTypeDuration("dt", "Fixed model time step.", new Duration(
0.5, TimeUnit.SI), POSITIVE);
/** */
public static final ParameterTypeDouble C_CL = new ParameterTypeDouble("C_CL", "Current lane constant.", 2.128);
/** */
public static final ParameterTypeDouble C_RL = new ParameterTypeDouble("C_RL", "Right lane constant.", -0.369);
/** */
public static final ParameterTypeDouble BETA_RIGHT_MOST = new ParameterTypeDouble("Beta_right-most",
"Factor on right-most dummy variable.", -1.039);
/** */
public static final ParameterTypeDouble BETA_VFRONT = new ParameterTypeDouble("Beta_Vfront",
"Factor on speed of front vehicle.", 0.0745);
/** */
public static final ParameterTypeDouble BETA_SFRONT = new ParameterTypeDouble("Beta_Sfront",
"Factor on spacing of front vehicle.", 0.0225);
/** */
public static final ParameterTypeDouble BETA_DENSITY = new ParameterTypeDouble("Beta_density", "Factor on density.",
-0.0018);
/** */
public static final ParameterTypeDouble BETA_HEAVY_NEIGHBOUR = new ParameterTypeDouble("Beta_heavy_neighbour",
"Factor on heavy neighbour dummy variable.", -0.218);
/** */
public static final ParameterTypeDouble BETA_TAILGATE = new ParameterTypeDouble("Beta_tailgate",
"Factor on tailgate dummy variable.", -3.793);
/** */
public static final ParameterTypeDouble THETA_MLC = new ParameterTypeDouble("Theta_MLC", "Mandatory lane change power.",
-0.358);
/** */
public static final ParameterTypeDouble BETA1 = new ParameterTypeDouble("Beta1",
"Factor on 1 lane change dummy variable.", -2.269);
/** */
public static final ParameterTypeDouble BETA2 = new ParameterTypeDouble("Beta2",
"Factor on 2 lane change dummy variable.", -4.466);
/** */
public static final ParameterTypeDouble BETA3 = new ParameterTypeDouble("Beta3",
"Factor on 3 lane change dummy variable.", -7.265);
/** */
public static final ParameterTypeDouble BETA_NEXT_EXIT = new ParameterTypeDouble("Beta_next_exit",
"Factor on next exit dummy variable.", -1.264);
/** */
public static final ParameterTypeDouble BETA_ADD = new ParameterTypeDouble("Beta_add", "Factor on add dummy variable.",
-0.252);
/** */
public static final ParameterTypeDouble ALPHA_CL = new ParameterTypeDouble("Alpha_cl",
"Factor on individual error term in current lane.", 0.539);
/** */
public static final ParameterTypeDouble ALPHA_RL = new ParameterTypeDouble("Alpha_rl",
"Factor on individual error term in right lane.", 1.035);
/** */
public static final ParameterTypeDouble ERROR_TERM = new ParameterTypeDouble("Error term", "Individual error term.", 0);
/** */
public static final ParameterTypeDouble BETA_EMU_GA = new ParameterTypeDouble("Beta_EMU_GA",
"Factor on expected utility maximization of gap acceptance.", 0.0052);
/** */
public static final ParameterTypeDouble SIGMA_LEAD = new ParameterTypeDouble("Sigma_lead",
"Standard deviation in gap acceptance error term for lead gap.", 1.217);
/** */
public static final ParameterTypeDouble SIGMA_LAG = new ParameterTypeDouble("Sigma_lag",
"Standard deviation in gap acceptance error term for lead gap.", 0.622);
/** */
public static final ParameterTypeDouble C_LEAD = new ParameterTypeDouble("C_lead", "Constant in lead critical gap.",
1.127);
/** */
public static final ParameterTypeDouble C_LAG = new ParameterTypeDouble("C_lag", "Constant in lag critical gap.", 0.968);
/** */
public static final ParameterTypeDouble BETA_POS_LEAD = new ParameterTypeDouble("Beta_pos_lead",
"Factor on positive lead speed difference.", -2.178);
/** */
public static final ParameterTypeDouble BETA_NEG_LEAD = new ParameterTypeDouble("Beta_neg_lead",
"Factor on negative lead speed difference.", -0.153);
/** */
public static final ParameterTypeDouble BETA_POS_LAG = new ParameterTypeDouble("Beta_pos_lag",
"Factor on positive lag speed difference.", 0.491);
/** */
public static final ParameterTypeDouble BETA_EMU_LEAD = new ParameterTypeDouble("Beta_EMU_lead",
"Factor on EMU target lead gap.", 0.0045);
/** */
public static final ParameterTypeDouble BETA_EMU_LAG = new ParameterTypeDouble("Beta_EMU_lag",
"Factor on EMU target lag gap.", 0.0152);
/** */
public static final ParameterTypeDouble ALPHA_TL_LEAD = new ParameterTypeDouble("Alpha_tl_lead",
"Factor on individual error term in target lane lead gap.", 0.789);
/** */
public static final ParameterTypeDouble ALPHA_TL_LAG = new ParameterTypeDouble("Alpha_tl_lag",
"Factor on individual error term in target lane lag gap.", 0.107);
/** */
public static final ParameterTypeDouble C_FWD_TG = new ParameterTypeDouble("C_fwd_tg", "Constant forward gap utility.",
-0.837);
/** */
public static final ParameterTypeDouble C_BCK_TG = new ParameterTypeDouble("C_bck_tg", "Constant forward gap utility.",
0.913);
/** */
public static final ParameterTypeDouble BETA_DTG = new ParameterTypeDouble("Beta_dtg", "Factor on distance to gap.",
-2.393);
/** */
public static final ParameterTypeDouble BETA_EG = new ParameterTypeDouble("Beta_eg", "Factor on effective gap length.",
0.816);
/** */
public static final ParameterTypeDouble BETA_FV = new ParameterTypeDouble("Beta_fv",
"Factor on front vehicle dummy variable.", -1.662);
/** */
public static final ParameterTypeDouble BETA_RGS = new ParameterTypeDouble("Beta_rgs", "Factor on relative gap speed.",
-1.218);
/** */
public static final ParameterTypeDouble ALPHA_ADJ = new ParameterTypeDouble("Alpha_adj",
"Factor on individual error term in adjacent gap.", 0.675);
/** */
public static final ParameterTypeDouble ALPHA_BCK = new ParameterTypeDouble("Alpha_bck",
"Factor on individual error term in backward gap.", 0.239);
/** */
public static final ParameterTypeDouble BETA_DP = new ParameterTypeDouble("BETA_DP",
"Factor on target gap for desired position.", 0.604, UNITINTERVAL);
/** */
public static final ParameterTypeDouble C_FWD_ACC = new ParameterTypeDouble("C_fwd_acc",
"Constant forward gap acceleration.", 0.385, POSITIVE);
/** */
public static final ParameterTypeDouble BETA_FWD = new ParameterTypeDouble("BETA_fwd",
"Power on desired relative position forward.", 0.323);
/** */
public static final ParameterTypeDouble LAMBDA_FWD_POS = new ParameterTypeDouble("LAMBDA_fwd_pos",
"Factor on positive relative speed forward.", 0.0678);
/** */
public static final ParameterTypeDouble LAMBDA_FWD_NEG = new ParameterTypeDouble("LAMBDA_fwd_neg",
"Factor on negative relative speed forward.", 0.217);
/** */
public static final ParameterTypeDouble SIGMA_FWD = new ParameterTypeDouble("SIGMA_fwd",
"Standard deviation on forward gap acceleration error.", Math.exp(-0.540));
/** */
public static final ParameterTypeDouble C_BCK_ACC = new ParameterTypeDouble("C_bck_acc",
"Constant backward gap acceleration.", -0.596, NEGATIVE);
/** */
public static final ParameterTypeDouble BETA_BCK = new ParameterTypeDouble("BETA_bck",
"Power on desired relative position backward.", -0.219);
/** */
public static final ParameterTypeDouble LAMBDA_BCK_POS = new ParameterTypeDouble("LAMBDA_bck_pos",
"Factor on positive relative speed backward.", -0.0832);
/** */
public static final ParameterTypeDouble LAMBDA_BCK_NEG = new ParameterTypeDouble("LAMBDA_bck_neg",
"Factor on negative relative speed backward.", -0.170);
/** */
public static final ParameterTypeDouble SIGMA_BCK = new ParameterTypeDouble("SIGMA_bck",
"Standard deviation on backward gap acceleration error.", Math.exp(0.391));
/** */
public static final ParameterTypeDouble C_ADJ_ACC = new ParameterTypeDouble("C_adj_acc",
"Constant adjacent gap acceleration.", 0.131);
/** */
public static final ParameterTypeDouble SIGMA_ADJ = new ParameterTypeDouble("SIGMA_adj",
"Standard deviation on adjacent gap acceleration error.", Math.exp(-1.202));
/**
*
*/
private ToledoLaneChangeParameters()
{
}
/**
* Fills behavioral characteristics with default values for all Toledo parameters.
* @param behavioralCharacteristics behavioral characteristics to fill
*/
public static void setDefaultParameters(final BehavioralCharacteristics behavioralCharacteristics)
{
for (Field field : ToledoLaneChangeParameters.class.getDeclaredFields())
{
ParameterTypeDouble p;
try
{
p = (ParameterTypeDouble) field.get(null);
behavioralCharacteristics.setParameter(p, p.getDefaultValue());
}
catch (IllegalArgumentException | IllegalAccessException | ClassCastException exception)
{
// if this occurs, this code should perhaps also support other parameter types, or perform other checks
throw new RuntimeException("A field of ToledoParameters is not a public static ParameterTypeDouble.");
}
catch (ParameterException exception)
{
throw new RuntimeException("A field of ToledoParameters does not have a default value.");
}
}
}
}