You need to enable JavaScript to run this app. 使用instant veins-4.7.1时如何获取所有或指定节点的指标均值
优惠活动
大模型
产品
解决方案
定价
更多

使用instant veins-4.7.1时如何获取所有或指定节点的指标均值

Veins 4.7.1 聚合统计节点指标平均值操作方法

以下两种方案可适配不同使用场景:

方法1:仿真运行阶段内置聚合统计(推荐,适合固定统计规则的场景)

直接在应用逻辑中加入聚合逻辑,仿真结束后会直接输出平均值结果:

  • 首先在应用层模块的头文件中声明聚合统计变量,可使用OMNeT++自带的cAverage类做全局统计,也可自定义容器存储指定节点的指标数据:
    // 示例:头文件中声明统计变量
    cAverage globalEedAvg; // 存储所有节点端到端延迟的聚合统计
    std::vector<double> targetNodeEedList; // 存储指定节点的延迟值
    int targetNodeIds[] = {2,4,6}; // 按需修改为要统计的指定节点ID
    
  • 在你计算单节点端到端延迟的代码段(一般是handleMessage函数中处理接收数据包的位置),添加聚合统计逻辑:
    // 假设你已经计算得到当前数据包的端到端延迟为endToEndDelay
    // 全局所有节点聚合
    globalEedAvg.collect(endToEndDelay);
    // 指定节点聚合
    int curNodeId = pk->getSenderModuleId(); // 按需替换为你需要匹配的节点ID字段
    for (int id : targetNodeIds) {
        if (curNodeId == id) {
            targetNodeEedList.push_back(endToEndDelay);
            break;
        }
    }
    
  • 在应用层的finish()函数中输出最终聚合结果,结果会自动写入仿真的.sca结果文件:
    recordScalar("全局平均端到端延迟", globalEedAvg.getMean());
    if (!targetNodeEedList.empty()) {
        double targetAvg = std::accumulate(targetNodeEedList.begin(), targetNodeEedList.end(), 0.0) / targetNodeEedList.size();
        recordScalar("指定节点平均端到端延迟", targetAvg);
    }
    

注意:如果是分布式并行运行仿真,需要使用OMNeT++的跨进程全局统计机制,避免统计变量仅在单个进程生效

方法2:仿真结束后处理已有结果文件

如果已经完成仿真无需重新运行,可直接解析生成的结果文件计算平均值:

  • Veins 4.7.1仿真结束后默认生成.sca(标量统计结果)和.vec(时序向量结果)两类文件,可使用OMNeT++自带的opp_scavetool工具批量提取指定指标:
    示例命令(提取所有节点端到端延迟标量值导出为csv):
    opp_scavetool export -f 'name("end-to-end delay")' -F csv 你的仿真结果文件名.sca > eed_all.csv
    
    导出csv后可自行过滤指定节点ID的对应数据,计算平均值即可。如果需要处理.vec格式的时序指标,调整命令中的文件名即可,处理逻辑一致。
  • 若使用OMNeT++ IDE操作,可直接在结果分析的Analysis界面添加Filter规则,勾选需要统计的节点范围,添加Mean统计函数,IDE会自动计算对应平均值。

内容的提问来源于stack exchange,提问作者Dalia Adly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:21:03