Cómo codificar glorietas: parte 2
Diciembre 2019: Tessa Hayman explica cómo ajustar parámetros en glorietas para garantizar una calibración y comportamiento precisos en modelos dinámicos.
En los modelos macroscópicos, el tiempo de viaje de un vehículo (y por lo tanto su velocidad) se especifica mediante la función de retraso de volumen, la función de penalización de giro y la función de retraso de cruce. Estas funciones pueden leer parámetros como el límite de velocidad para estimar el tiempo de viaje a lo largo de una sección o giro. Por lo tanto, para alterar la velocidad por tipo de vehículo, debes hacer ediciones dentro de estas funciones.
Para esta nota técnica, codificaremos las reglas del Reino Unido en carreteras de una sola calzada para una función de retraso de volumen. Se adoptaría un enfoque similar en las funciones de penalización de giro. Tendremos que comprobar el tipo de carretera, el tipo de vehículo y el número de carriles.
Para averiguar el tipo de vehículo que se está considerando, utiliza:
vehicle = context.userClass.getVehicle()
Para saber el límite de velocidad que se está considerando, utiliza:
SectionSpeed=section.getSpeed()
Para saber el número de carriles que se están considerando, utiliza:
NbLanes=section.getNbFullLanes()
La velocidad a lo largo de una sección puede entonces ser especificada usando la siguiente función:
def freeFlowTravelTime(context, section, funcVolume):
model = context.experiment.getModel()
vehicleName = context.userClass.getVehicle().getName()
SectionSpeed=section.getSpeed()
NbLanes=section.getNbFullLanes()
if vehicleName==”HGV” and SectionSpeed==96 and NbLanes==1: #If its a HGV on a single carriageway road with a 96kph/60mph limit
speed=80
else:
speed=SectionSpeed
distance=section.length3D() / 1000.0 # Km
t0 = distance/speed # hour
return t0
Esto podría ampliarse con otros tipos de vehículos, como los vehículos con remolque, si fuera necesario.
Esta función freeflowspeed debería entonces ser integrada en el VDF. Por ejemplo, usando la función BPR. Sin embargo, es importante tener en cuenta la demora dentro del tiempo total del viaje. Por lo tanto, calcularemos el tiempo de viaje como el máximo del tiempo de viaje específico del volumen y el límite de velocidad del vehículo)
def freeFlowVehicleTravelTime(context, section, funcVolume):
model = context.experiment.getModel()
vehicleName = context.userClass.getVehicle().getName()
SectionSpeed=section.getSpeed()
NbLanes=section.getNbFullLanes()
if vehicleName==”HGV” and SectionSpeed==96 and NbLanes==1: #If its a HGV on a single carriageway road with a 96kph/60mph limit
speed=80
else:
speed=SectionSpeed
distance=section.length3D() / 1000.0 # Km
t0 = distance/speed # hour
return t0
def freeFlowTravelTime(context, section, funcVolume):
model = context.experiment.getModel()
speed=SectionSpeed
distance=section.length3D() / 1000.0 # Km
t0 = distance/speed # hour
return t0
def vdf( context, section, funcVolume ):
#coefficients alpha and beta must be modified accordingly
alpha = 0.15
beta = 4.0
freeFlowVehicleTravelTime = freeFlowVehicleTravelTime(context, section, funcVolume)
freeFlowTravelTime=freeFlowTravelTime(context, section, funcVolume)
volume = funcVolume.getVolume()
addVolume = section.getAdditionalVolume()
capacity = section.getCapacity()
cost = max(freeFlowTravelTime * (1 + alpha * ((volume + addVolume) / capacity ) ** beta), freeFlowVehicleTravelTime)
return cost
No olvides que puedes usar la vista de tabla para aplicar la función a todas las secciones de la red. Esto se puede encontrar en Window > Windows > Table View. Al ir a la columna de la función de retraso de volumen y cambiar la fila inferior, se pueden actualizar todas las secciones.
Para obtener más información sobre los scripts y las funciones, consulta qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/ScriptIntro.html
o asiste a uno de nuestros cursos de Scripting.
Diciembre 2019: Tessa Hayman explica cómo ajustar parámetros en glorietas para garantizar una calibración y comportamiento precisos en modelos dinámicos.
Enero de 2020: Hay varios scripts disponibles en la plantilla: Margarida Delgado explica cómo el Script nº 10 puede acelerar el proceso de filtrado y visualización de los nodos señalizados.
SHARE
Aimsun Next 23
Aimsun Next 20.0.5
Aimsun Next 23
@manual {AimsunManual,
título = {Aimsun Next 23 User’s Manual},
autor = {Aimsun},
edición = {Aimsun Next 23.0.0},
domicilio = {Barcelona, Spain},
año = {2023. [Online]},
mes = {Accessed on: Month, Day, Year},
url = {https://docs.aimsun.com/next/23.0.0/},
}
Aimsun Next 20.0.5
@manual {AimsunManual,
título = {Aimsun Next 20.0.5 User’s Manual},
autor = {Aimsun},
edición = {Aimsun Next 20.0.5},
domicilio = {Barcelona, Spain},
año = {2021. [En software]},
mes = {Accessed on: Month, Day, Year},
url = {qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/Intro.html},
}
Aimsun Next 23
TY – COMP
T1 – Manual del usuario de Aimsun Next 23
A1 – Aimsun
ET – Aimsun Next Version 23.0.0
Y1 – 2023
Y2 – Acceso: Mes, Día, Año
CY – Barcelona, España
PB – Aimsun
UR – [En software]. Disponible en: https://docs.aimsun.com/next/23.0.0/
Aimsun Next 20.0.5
TY – COMP
T1 – Manual del usuario de Aimsun Next 20.0.5
A1 – Aimsun
ET – Aimsun Next Version 20.0.5
Y1 – 2021
Y2 – Acceso: Mes, Día, Año
CY – Barcelona, España
PB – Aimsun
UR – [In software]. Available: qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/Intro.html