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.

How to define speed limits by vehicle class in static models

Set the bottom row to your desired VDF
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.