SUMO新手求助:使用duaIterate.py加--MSA参数触发IndexError问题
问题原因分析与解决方法
错误原因
你遇到的IndexError: list index out of range是SUMO 1.18.0版本中sumolib/options.py的参数解析逻辑bug导致的:当使用--MSA这类布尔型开关参数时,程序试图访问空的剩余参数列表,引发索引越界。
解决步骤
- 修正参数写法:部分旧版本SUMO中,布尔参数需要显式指定值,将
--MSA改为--MSA true,避免参数解析逻辑出错。 - 补充必填参数:
duaIterate.py需要明确指定迭代次数或输出路径等核心参数,否则可能触发参数解析异常。示例完整命令:python /opt/homebrew/opt/sumo/share/sumo/tools/assign/duaIterate.py -n SUMO/basic/basic.net.xml -r SUMO/basic/test.rou.xml --MSA true --iterations 10 --output assigned_result.xml - 升级SUMO版本:1.18.0是较旧的版本,后续SUMO版本已修复该参数解析bug,升级到最新稳定版可彻底解决此类问题。
- 验证输入文件:确认
basic.net.xml和test.rou.xml路径正确,文件格式符合SUMO规范(比如路由文件需包含<routes>根节点,流量定义正确)。
带MSA的仿真示例流程
- 准备路网文件
basic.net.xml和路由文件test.rou.xml(路由文件需包含OD流量或车辆路径定义)。 - 执行迭代分配命令(包含MSA算法):
python $SUMO_HOME/tools/assign/duaIterate.py -n basic.net.xml -r test.rou.xml --MSA --iterations 20 --output final_flows.xml - 查看输出文件
final_flows.xml,里面包含经过MSA迭代后的分配流量结果。
内容的提问来源于stack exchange,提问作者Kistref
相关产品推荐
相关产品推荐

