Nota Técnica #53
Novembro 2020
Por Tessa Hayman
Em certas situações, o limite de velocidade pode diferir de acordo com o tipo de veículo; por exemplo, em uma estrada de uma única faixa de rodagem 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 dentro das funções de atraso para modelos macroscópicos ou através do uso do gerenciamento de tráfego para modelos microscópicos e mesoscópicos, como explicado na parte 1.
Para modelos macroscópicos, o tempo de viagem de um veículo (e portanto a velocidade) é especificada pela função de atraso de volume, função de penalidade de movimento e função de atraso de junção. Estas funções podem ler parâmetros tais como limite de velocidade para estimar um tempo de viagem ao longo de uma seção ou manobra. Para alterar a velocidade por tipo de veículo, você deve, portanto, fazer edições dentro destas funções.
Para esta dica profissional, vamos codificar as regras do Reino Unido em estradas de uma única faixa de rodagem para uma função de atraso de volume. Uma abordagem semelhante seria adotada para as funções de penalidade de movimentos. Precisaremos verificar o tipo de estrada, o tipo de veículo e o número de faixas de circulação.
Para saber o tipo de veículo a ser considerado, use:
vehicle = context.userClass.getVehicle()
Para descobrir o limite de velocidade que está sendo considerado, use:
SectionSpeed=section.getSpeed()
Para saber o número de faixas que estão sendo consideradas, use:
NbLanes=section.getNbFullLanes()
A velocidade ao longo de uma seção pode então ser especificada usando a seguinte função:
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
Isto poderia ser expandido com outros tipos de veículos, tais como reboques, se necessário.
Esta função de freeflowspeed deve então ser integrada no VDF. Por exemplo, utilizando a função BPR. Entretanto, é importante ainda levar em conta o atraso dentro do tempo total de viagem. Portanto, calcularemos o tempo de viagem como o máximo do tempo de viagem específico do volume e o limite de velocidade do veí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
Não esqueça que você pode então usar a visão de tabela para aplicar a função a todas as seções da rede. Isto pode ser encontrado em Janela > Janelas > Visualização de tabela. Ao ir para a coluna da função de atraso de volume e mudar a linha inferior, todas as seções podem ser atualizadas.
Ajuste a linha inferior para seu VDF desejado
Para mais informações sobre scripts e funções, consulte qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/ScriptIntro.html ou assista a um de nossos cursos de Scripting.