我使用以下脚本在PTV Vissim的一个交叉口从链接1和链接3获取所有车辆对象。
def main():
TimeDiff = 1
DistLimit=200.00
SpeedLimit=47.00
DesiredSpeed=50
#Get All the vehicle objects on link 1 and 3.
Vehicles1= Vissim.Net.Links.ItemByKey(1).Vehs.GetAll()
Vehicles3= Vissim.Net.Links.ItemByKey(3).Vehs.GetAll()
#Iterate through every vehicle in link 1.
for Vehicles1 in Vehicles1:
#Get attribute vehicle. (Atime1 = Arrival Time of Vehicle at Intersection)
ArrTime=Vehicles1.AttValue("ATime1")
DesSpeed = Vehicles1.AttValue("DesSpeed")
Current_Speed1=Vehicles1.AttValue("Speed")
#Check if there any Vehicles on link 3.
if len(Vehicles3)>0:
#Iterate through every vehicle in link 3.
for Vehicles3 in Vehicles2:
#Get attribute of vehicles on link 3. (Atime3 = Arrival Time of Vehicle at Intersection
ArrTime3=Vehicles3.AttValue("ATime3")
DesSpeed = Vehicles3.AttValue("DesSpeed")
DistSigHead2=Vehicles3.AttValue("DistanceToSigHead")
OrgDesSpeed = Vehicles3.AttValue("OrgDesSpeed")
if (ArrTime2-ArrTime)<TimeDiff:
Current_Speed1=Vehicles3.AttValue("Speed")
newDesSpeed=Current_Speed1-2
Vehicles3.SetAttValue("DesSpeed", newDesSpeed)
if DistSigHead2 ==0:
Vehicles3.SetAttValue("DesSpeed", DesiredSpeed)
该脚本能够获取所有车辆对象并执行给定的条件。但for循环只在进入链接1或3时检查车辆一次,并将其属性与另一个链接上的车辆进行比较。我想检查链接1和3中每个时间步中的每一辆车,并比较它们的到达时间。我想我没有正确地应用for循环。任何人,请在这方面给我一些建议。
我们将非常感谢您在这方面的帮助和指导。谢谢。
发布于 2019-10-31 03:08:07
这一行看起来在逻辑上是错误的,尽管它不会生成错误:
对于Vehicles1中的Vehicles1:
现在,重写脚本,如下所示:
旧脚本:
遍历链接1中的每个车辆。
#OLD SCRIPT
for Vehicles1 in Vehicles1:
#Get attribute vehicle. (Atime1 = Arrival Time of Vehicle at Intersection)
ArrTime=Vehicles1.AttValue("ATime1")
DesSpeed = Vehicles1.AttValue("DesSpeed")
Current_Speed1=Vehicles1.AttValue("Speed")
#NEW SCRIPT:
for Vehicles1b in Vehicles1:
#Get attribute vehicle. (Atime1 = Arrival Time of Vehicle at Intersection)
ArrTime=Vehicles1b.AttValue("ATime1")
DesSpeed = Vehicles1b.AttValue("DesSpeed")
Current_Speed1=Vehicles1b.AttValue("Speed")```
https://stackoverflow.com/questions/55841353
复制相似问题