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.
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
Passo 4: Selecione os parâmetros de redução de velocidade.
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.
Ativando a condição de tráfego no Cenário