当前位置:   article > 正文

关于SUMO里如何通过Python进行车流量控制_sumo 流量控制

sumo 流量控制

又称:怎么通过python读取SUMO里生成的lyy.rou.xml文件信息并对其进行修改和保存。
因为觉得每次仿真的时候,想去重新设置flow里的vehsPerHour数值都要打开路由文件进行修改数值,感觉非常麻烦,跑一次仿真之前要打开多个文件进行修改数据,很麻烦,就想都写在py文件里在一个地方进行修改,就可以节省一点步骤了。

不知道为什么,网上找的用python读取xml文件然后进行修改保存的教程,我跟着做,都失败了,而且感觉SUMO生成的这个路由文件的xml格式和常规的xml格式也有点区别。最后我在官网上按照官网的解释和例子跟着做,去理解,然后将其代替成我的这个路由文件来尝试,终于成功了。尝试了很多办法,终于成功了,记录一下。

  1. 首先,这是lyy.rou.xml文件的格式:
<?xml version="1.0" encoding="UTF-8"?>
<routes>

    <vType id="Car_straight" length="5" maxSpeed="33.33" />
    <vType id="Car_enter"    length="5" maxSpeed="33.33" />
   
    <flow id="a11" color="1,1,0"  begin="0" end= "7200" vehsPerHour='100' type="Car_straight" departLane="random" departSpeed="max">
        <route edges="E0 E1 E2"/>
    </flow>

   <flow id="a12" color="1,0,0"  begin="0" end= "7200" vehsPerHour='500' type="Car_enter" departLane="random" departSpeed="max">
        <route edges="E4 E1 E2"/>
    </flow>

</routes>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

其中,flow列的vehsPerHour值是我想修改的数值。
根据xml格式来分析,从这个lyy.rou.xml内容来看,< routes>为这个xml文件的根(root),下一级的 vTypeflow都是 root下的 child。我想修改的是flowid="a11"这个列里面的vehsPerHour值。

  1. 开始编写代码:

(1)导入用到的库:

import xml.etree.ElementTree as ET
  • 1

(2)对xml文件进行解析:

tree = ET.parse('D:\Temp\lyy.rou.xml')   ##这里的路径为放置路由文件的路径
  • 1

(3)获取 root:

root = tree.getroot()
print(root.tag)
print(root.attrib)
  • 1
  • 2
  • 3

打印结果如图:

在这里插入图片描述
(4)先查找一下原数据:

print('查找原数据')
print(root[2].attrib['vehsPerHour'])
  • 1
  • 2

注意这里,我想查找的是flowid="a11"这个列里面的vehsPerHour值。前面分析到 vTypeflow都是 root下的 child,因此id="a11"flow按顺序排第三,从0开始计数,即为[2]因此是root[2],从前面步骤(3)能看出, attrib输出的是 <>里面的内容,因此这里用到 attrib,要查找vehsPerHour的值,因此总的一个查找vehsPerHour值的代码语句即为root[2].attrib[‘vehsPerHour’]
打印结果如图:
在这里插入图片描述
(5)对vehsPerHour值修改成我想要的数值。

new_num='2000'
root[2].attrib['vehsPerHour']=str(new_num)
print('修改后的数据')
print(root[2].attrib['vehsPerHour'])
  • 1
  • 2
  • 3
  • 4

打印结果如图:
在这里插入图片描述
(6)最后将修改好的文件进行保存:

tree.write('lyy.rou.xml')   #如果文件命名为其他名字,即为保存到新建文件里,与源文件同名即为覆盖内容。
  • 1

点击路径里的lyy.rou.xml文件查看是否对xml文件修改成功。
在这里插入图片描述

  1. 调试成功,可将这段代码放入控制sumo仿真的文件里,然后将需要修改的数值设置为全局变量放在一起,就可以节省点功夫一起修改啦。(想要控制修改其他的数据,以此类推)
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/645509
推荐阅读
相关标签
  

闽ICP备14008679号