You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SUMO中固定文件名生成不同流量分配的随机车流?

在SUMO中生成同名但随机车流不同的.rou.xml文件

问题描述

使用duarouter工具生成随机车流并输出为同名.rou.xml文件时,发现只有修改输出文件名才能得到不同的流量分配。当前使用的代码如下:

import subprocess

def run_duarouter(net_xml_file, input_file, output_file, add_xml):
    command = [
        'duarouter',
        '-n', net_xml_file,
        '--additional-files', add_xml,
        '--route-files', input_file,  
        '--randomize-flows',  
        '--output-file', output_file, 
    ]   
    subprocess.run(command, check=True)

期望在循环中重复调用该函数时,保持输出文件名不变但每次生成不同的流量分配:

for episode in range(num_episodes):
    run_duarouter(net_xml,input_file,output_file,add_xml) 

问题原因

duarouter默认会基于输入参数和输出文件名缓存路由计算结果。当输出文件名相同时,工具会直接复用缓存的结果,而不会重新执行随机化流程,导致流量分配无变化。

解决方案

通过两个关键参数解决该问题:

  • --ignore-cache:强制禁用缓存,每次运行都重新计算路由和随机流量。
  • --seed:指定不同的随机种子,确保每次随机化的结果可预测且不重复。

修改后的代码

更新run_duarouter函数,支持传入随机种子并添加禁用缓存的参数:

import subprocess

def run_duarouter(net_xml_file, input_file, output_file, add_xml, seed=None):
    command = [
        'duarouter',
        '-n', net_xml_file,
        '--additional-files', add_xml,
        '--route-files', input_file,  
        '--randomize-flows',  
        '--output-file', output_file,
        '--ignore-cache'  # 禁用缓存,强制重新计算
    ]   
    # 传入不同的随机种子,确保每次随机结果不同
    if seed is not None:
        command.extend(['--seed', str(seed)])
    subprocess.run(command, check=True)

循环调用示例

在循环中为每次调用传入不同的种子值:

num_episodes = 5
for episode in range(num_episodes):
    # 使用episode编号作为种子,确保每次种子唯一
    run_duarouter(net_xml, input_file, output_file, add_xml, seed=episode + 1)

说明

  • --ignore-cache确保duarouter不会复用之前的缓存结果,必须重新执行计算。
  • --seed参数控制随机化的初始值,相同种子会生成相同的流量分配,不同种子则生成不同结果,适合需要复现或控制随机过程的场景。

内容的提问来源于stack exchange,提问作者Le Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:51:04