Nota Técnica #52

Outubro de 2020

Por Tessa Hayman

Muitos modeladores não estão cientes desta característica incrivelmente útil no Aimsun Next. Nesta nota técnica, Tessa Hayman revela como estabelecer diferentes limites de velocidade para diferentes tipos de veículos em modelos dinâmicos.

Em certas situações, o limite de velocidade para cada tipo de veículo é diferente. Por exemplo, em uma estrada de uma só faixa de tráfego no Reino Unido, veículos com mais de 7,5 toneladas só podem viajar a 50 milhas por hora, mas outros veículos podem viajar a 60 milhas por hora. Você pode codificar isto no Aimsun Next através do uso do gerenciamento de tráfego para modelos microscópicos e mesoscópicos, ou dentro das funções de atraso para modelos macroscópicos.

Para modelos microscópicos e mesoscópicos, a velocidade para uma estrada é definida pelo parâmetro “Limite de velocidade”. Isto pode ser reduzido para uma classe de veículos através de uma ação de gerenciamento de tráfego chamada “Redução de Velocidade”, que também pode ser usada para reduzir a velocidade de curva para veículos maiores.


Como adicionar uma ação de redução de velocidade para uma seção / movimento

Passo 1: Adicione uma condição de tráfego acessando o menu Projeto > Gerenciamento de tráfego > Novo > Condição de tráfego

Passo 2: Clique duas vezes sobre a Condição de Tráfego para abri-la. Selecione a Condição de Ativação: Sempre e Aplicar no Aquecimento.

Traffic Condition parameters
Parâmetros de condição de tráfego

Passo 3: Adicione uma ação de redução de velocidade clicando com o botão direito do mouse na condição de tráfego > Novo > Redução de velocidade

How to set different speed limits for different vehicle types in Aimsun Next

Passo 4: Selecione os parâmetros de redução de velocidade.

How to set different speed limits for different vehicle types in Aimsun Next

No menu de redução de velocidade, você pode especificar em qual seção/movimento a ação é aplicada, qual será a nova velocidade e optar por aplicar a ação somente a uma determinada classe de veículo. No exemplo acima, foi escolhida a classe Heavy que inclui todos os tipos de veículos com veículos acima de 7,5t.

O método acima é válido para uma seção ou um movimento de cada vez; esta seria uma tarefa árdua para um modelo com um grande número de vias onde os veículos pesados têm limites de velocidade diferentes. Entretanto, você também pode optar por aplicar uma mudança de velocidade a um agrupamento de trechos, um agrupamento de movimentos ou um tipo de via.


Aplicação de redução de velocidade para todas as seções de um tipo de via com um número definido de faixas usando um script

Entretanto, pode ser que você queira aplicar uma redução de velocidade a um subconjunto de trechos para um tipo de via, como estradas de pista simples com um limite de velocidade de 60 milhas por hora, sem que estes sejam um tipo de via separado.

O seguinte script pode ser usado para aplicar uma ação de redução de velocidade para um determinado tipo de via, enquanto também verifica o número de faixas no trecho. É necessário especificar o nome da Condição de Trânsito, nova velocidade, classe de veículo e tipo de via e número de faixas às quais a nova velocidade se aplicaria. O roteiro irá então iterar sobre todas as seções do modelo do tipo de via especificado e adicionar uma ação de redução de velocidade para cada uma delas.

O pseudocódigo para isto é:
Obter/Criar Condição de Trânsito
Obtenha a classe do veículo
Para todas as seções:

Se seção.tipodevia=== tipodevia e seção.númerodefaixas:

Criar ação de redução de velocidade
Adicionar redução de velocidade à condição de tráfego

'''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")

Aplicando a condição de tráfego

Finalmente, você precisa aplicar a Condição de Tráfego ao Cenário, quer tenha sido adicionado através de um script ou manualmente; abra o objeto do cenário e vá para a aba Estratégias e Condições. Selecione a nova Condição de Tráfego.

Activating Traffic Condition in the Scenario
Ativando a condição de tráfego no Cenário