Cómo definir límites de velocidad por clase de vehículo en modelos estáticos

Nota Técnica #53
Noviembre de 2020

Por Tessa Hayman

En ciertas situaciones, el límite de velocidad puede diferir según el tipo de vehículo; por ejemplo, en una carretera de una sola vía en el Reino Unido, los vehículos de más de 7,5 toneladas sólo pueden circular a 50 millas por hora, pero otros vehículos pueden circular a 60 millas por hora. Puede codificar esto dentro de las funciones de retardo para los modelos macroscópicos o mediante el uso de la gestión del tráfico para los modelos microscópicos y mesoscópicos como se explica en la parte 1.

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.

Cómo definir límites de velocidad por clase de vehículo en modelos estáticos

Ponga la fila de abajo en su VDF deseado
Ponga la fila de abajo en su VDF deseado

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.

Más notas técnicas

  • ¿Tienes alguna pregunta? Ponte en contacto.

    ¡Estamos aquí para ayudarte!

  • ¿Tienes alguna pregunta? Ponte en contacto.

    ¡Estamos aquí para ayudarte!

SHARE