Cómo establecer diferentes límites de velocidad para diferentes tipos de vehículos en Aimsun Next

Nota Técnica #52

October 2020

Por Tessa Hayman

Muchos modelistas no conocen esta característica increíblemente útil en Aimsun Next. En esta nota técnica, Tessa Hayman explica cómo establecer diferentes límites de velocidad para diferentes tipos de vehículos en los modelos dinámicos.

En ciertas situaciones, el límite de velocidad para cada tipo de vehículo es diferente. 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. Puedes programar esto en Aimsun Next mediante el uso de la gestión del tráfico para modelos microscópicos y mesoscópicos, o dentro de las funciones de delay para modelos macroscópicos.

En los modelos microscópicos y mesoscópicos, la velocidad para una carretera se establece por el parámetro “Límite de velocidad”. Esto puede reducirse para una clase de vehículo mediante el uso de una acción de gestión del tráfico llamada “Reducción de la velocidad”, que también puede utilizarse para reducir la velocidad de giro de los vehículos más grandes.

Cómo añadir una acción de reducción de velocidad a una sección/giro

Paso 1: Agrega una condición de tráfico yendo al Menú del Proyecto > Gestión del Tráfico > Nuevo > Condición del Tráfico

Paso 2: Haz doble clic en la Condición de Tráfico para abrirla. Selecciona la Condición de Activación: Siempre y Aplicar para Warm Up.

Parámetros de la Condición del Tráfico
Parámetros de la Condición del Tráfico

Paso 3: Añade una acción de reducción de velocidad haciendo clic con el botón derecho del ratón en el apartado Condición del tráfico > Nuevo > Reducción de velocidad

Cómo establecer diferentes límites de velocidad para diferentes tipos de vehículos en Aimsun Next

Paso 4: Selecciona los parámetros de reducción de la velocidad.

Cómo establecer diferentes límites de velocidad para diferentes tipos de vehículos en Aimsun Next

En el menú de reducción de velocidad, puedes especificar a qué sección/vuelta se aplica la acción, cuál será la nueva velocidad y elegir aplicar la acción sólo a una determinada clase de vehículos. En el ejemplo anterior, se ha elegido la clase Pesada que incluye todos los tipos de vehículos con vehículos de más de 7,5t.

El método anterior es válido para una sección o un giro a la vez; esto supondría una tarea ardua para un modelo con un gran número de carreteras en las que los vehículos pesados tienen diferentes límites de velocidad. Sin embargo, también puedes elegir aplicar un cambio de velocidad a un grupo de secciones, un grupo de giros o un tipo de carretera.

Aplicar la reducción de la velocidad en todos los tramos de un tipo de carretera con un número determinado de carriles utilizando un script

Sin embargo, puede darse el caso de que se desee aplicar una reducción de la velocidad a un subconjunto de secciones de un tipo de carretera, como las carreteras de una sola calzada con un límite de velocidad de 60 millas por hora, sin que éstas sean un tipo de carretera independiente.

El siguiente script puede utilizarse para aplicar una acción de reducción de la velocidad para un tipo de carretera determinado, al tiempo que se comprueba el número de carriles de la sección. Es necesario especificar el nombre de la condición de tráfico, la nueva velocidad, la clase de vehículo y el tipo de carretera y el número de carriles a los que se aplicaría la nueva velocidad. El script entonces iterará sobre todas las secciones del modelo del tipo de carretera especificado y añadirá una acción de reducción de velocidad para cada una.

El pseudocódigo para esto es:
Get/Create Traffic Condition
Get vehicle class
For all sections:

If section.roadtype==roadtype and section.numberoflanes:

Create speed reduction action
Add speed reduction to Traffic Condition

				
					'''This script applies a speed reduction for all sections in a road type. The User must specify the road type and the new speed'''

TrafficConditionName="Speed Reduction"
RoadTypeName="SingleCarriageway60" #96kph
VehicleClassName="Heavy Class"
NewSpeed=80 #50mph
NumberofLanes=1

def createSpeedReduction(section,Speed, VehicleClassname): #Add a speed reduction action
	change = GKSystem.getSystem().newObject("GKSpeedChange", model)
	change.setSection(section)
	change.setSpeed(str(Speed)) #set the new speed
	VehicleClassType=model.getType("GKVehicleClass")
	VehicleClass=model.getCatalog().findByName(VehicleClassname,VehicleClassType)
	change.setVehicleClass(VehicleClass) #add a filter for the vehicle class 
	return change

def NewTrafficCondition():#add a new TrafficConditionName
	cmd = model.createNewCmd( model.getType( "GKTrafficCondition" ))
	model.getCommander().addCommand( cmd )
	res = cmd.createdObject()
	res.setActivationType(GKSimulationEvent.eAlways) #set it to be active throughout the modelled period
	applyToWarmUpAtt = model.getColumn("GKPolicy::applyOnWarmupAtt") #set it to be active in the warm up
	res.setDataValue(applyToWarmUpAtt, QVariant(True))
	return res

def GetVehicleClass( model, name): # get the vehicle class object
	vehicleClassType=model.getType("GKVehicleClass")
	vehicleClass = model.getCatalog().findByName(name, vehicleClassType)
	if vehicleClass == None:
		print ("No Vehicle Class Found")
		return None
	return vehicleClass

condition=model.getCatalog().findByName(TrafficConditionName, model.getType("GKTrafficCondition"))

if condition==None: #find condition or add new one
	condition=NewTrafficCondition()
	condition.setName(TrafficConditionName)

sections=model.getCatalog().getObjectsByType(model.getType("GKSection")) 
for section in sections: #for all sections in road type, if the section has x lanes, make a new speed change in the given Traffic Condition
	section=sections[section]
	nooflanes=section.getNbFullLanes() #get the number of full lanes for this section 
	if section.getRoadType().getName()==RoadTypeName and nooflanes==NumberofLanes:
		speedreductionaction=createSpeedReduction(section,NewSpeed,VehicleClassName)
		speedreductionaction.setName("Speed reduction for section %s" %(section.getId()))
		condition.addChange(speedreductionaction)
		print ("new change")

print ("done")
				
			

Applying the Traffic Condition

Por último, es necesario aplicar la Condición del Tráfico al Escenario, ya sea que se haya añadido mediante un script o manualmente; abre el objeto del escenario y ve a la pestaña Estrategias y Condiciones. Marca la nueva condición de tráfico.

Activando la condición de tráfico en el escenario
Activando la condición de tráfico en el escenario

Más notas técnicas

Python: from function to attribute

August 2016: Most users are familiar with creating their own attributes within objects within an Aimsun model. Grant MacKinnon explains how you can also add a column to an object where a value is returned based on some Python Code, allowing you to calculate a value on the fly.

Componentes de función macro

Marzo 2016: Marga Delgado explica cómo usar los componentes de función macro para crear elementos de salida adicionales a la hora de llevar a cabo una asignación.

  • ¿Tienes alguna pregunta? Ponte en contacto.

    ¡Estamos aquí para ayudarte!

  • ¿Tienes alguna pregunta? Ponte en contacto.

    ¡Estamos aquí para ayudarte!

SHARE

Citar Aimsun Next

Aimsun Next 23

Aimsun (2023). Aimsun Next 23 Manual del usuario, Aimsun Next Versión 23.0.0, Barcelona, España. Acceso: 19, 2023. [Online].
Disponible en: https://docs.aimsun.com/next/23.0.0/


Aimsun Next 20.0.5

Aimsun (2021). Aimsun Next 20.0.5 Manual del usuario, Aimsun Next Versión 20.0.3, Barcelona, España. Acceso: May. 1, 2021. [En software].
Disponible: qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/Intro.html

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