如何在静态模型中按车辆类别定义限速

技术注解 #53
2020年11月

作者:Tessa Hayman

在某些情况下,限速可以根据车辆类型而不同;例如,在英国的单车道公路上,7.5吨以上的车辆只能以每小时50英里的速度行驶,但其它车辆可以每小时60英里的速度行驶。 你可以在宏观模型的延迟函数中进行编码,或者通过使用微观和中观模型的交通管理进行编码,如第一部分所解释的。

对于宏观模型,车辆的行驶时间(以及速度)是由流量延误函数、转弯罚函数和路口延误函数指定的。 这些函数可以读取的参数,如限速,以估计一条路段或一个转弯的出行时间。 要按车辆类型改变速度,你必须在这些函数中进行编辑。

 

在这个专业技巧中,我们将对英国单车道道路的规则进行编码,以获得流量延误函数。 对转弯罚函数也会采取类似的方法。 我们需要检查道路类型、车辆类型和车道数量。

 

要找出正在考虑的车辆类型,请使用:

				
					vehicle = context.userClass.getVehicle()
				
			

要找出正在考虑的限速,请使用:

				
					SectionSpeed=section.getSpeed()
				
			

要找出正在考虑的车道数量,请使用:

				
					NbLanes=section.getNbFullLanes()
				
			

然后可以用以下函数指定路段的速度:

				
					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
				
			

如有必要,可将其扩大到其他车辆类型,如拖挂式车辆。

 

然后,这个自由流速函数应该被整合到VDF中。 例如,使用BPR函数。 然而,重要的是,仍然要考虑到总出行时间内的延误。 因此,我们将把出行时间计算为特定流量旅行时间和车辆限速的最大值。

				
					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
				
			

不要忘了,你可以使用表格视图将该函数应用于网络中的所有路段。 可以才这里找到: “窗口”>“窗口”> “表格视图” 进入流量延误函数列,改变最下面一行,所有路段都可以被更新。

 

 

How to define speed limits by vehicle class in static models

 

 

 

 

Set the bottom row to your desired VDF
将底部一行设置为你所需要的VDF

 

 

关于脚本和函数的更多信息,请参见 qthelp://aimsun.com.aimsun.20.0/doc/UsersManual/ScriptIntro.html

或参加我们的编程培训课程

更多技术说明

  • 有问题吗? 请联系我们。

    我们在这里提供帮助!

  • 有问题吗? 请联系我们。

    我们在这里提供帮助!

分享