【问题标题】:Results Analysis in OMNET++OMNET++ 中的结果分析
【发布时间】:2015-09-30 20:19:30
【问题描述】:

我正在使用带有 OMNET++ 的 Veins 框架来模拟高速公路场景。

我正在使用cOutVector 来收集我的实验结果。

我有超过 1000 个节点(车辆),cOutVector 为每个模块(节点)单独收集结果。但是,我需要收集整体结果。

例如,所有节点收到多少信标?有没有收集这样的结果?

【问题讨论】:

    标签: simulation omnet++


    【解决方案1】:

    在 OMNeT++ 中,输出结果可以保存为两种不同的类型,即文件格式:

    1. 标量 (*.sca) - 包含整个模拟运行的汇总数据(平均值、总和、计数、最大值、最小值)
    2. 向量 (*.vec) - 包含模拟运行的每一秒的细粒度数据(以时间序列的形式)

    输出文件格式与 OMNeT++ 的statistic 机制紧密结合。统计数据允许您存储不同的结果记录模式,例如:count、sum、mean、vector。

    在您的情况下,您需要查看每个节点的 sum

    @statistic[foo](record=count,mean,vector);
    

    这些 OMNeT++ 机制一开始看起来很复杂,但是一旦你把头转过来,它们就相当容易了。此外,它们非常强大,可以让您深入了解模拟的许多方面。

    • 要了解标量和向量之间的区别,请阅读this
    • 了解使用读取信号的结果记录this
    • 有关如何使用信号和记录特定统计数据和指标的具体示例,请查看我的详细回答 here

    很遗憾,在不了解您的代码的情况下,不可能为您的案例提供“即用型”解决方案。

    【讨论】:

      【解决方案2】:

      问:您的意思是要收集所有节点的汇总统计信息?

      如果是这样,那么我建议您使用 R,它提供了更多的功能和自定义。不过,您需要时间来学习基本操作。 omn​​etpp-resultfile Github 页面有教程。

      【讨论】:

        【解决方案3】:

        例如,所有节点收到多少信标?有没有 无论如何收集这样的结果?

        您可以创建一个静态变量,并且每次节点收到一个信标时,您都会增加该变量的值。

        例如: (在 app_name.h 上)

        static int beaconCount; // in protected

        int app_name::beaconCount = 0; // in the and of app_name.h, before #endif.

        (在 app_name.cc 上)

        void app_name::onBeacon(WaveShortMessage* wsm) {
            app_name::beaconCount++; // received one beacon
        }
        

        之后,您可以在函数finish() 中打印beaconCount 或保存到保存文件中。

        void app_name:: finish(){
          if(strcmp(findHost()->getFullName(), "car[0]") == 0){ // For only the car[0] print the final value
             cout << "Count of beacons received by all node:" << beaconCount << endl;
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-05-07
          • 2023-03-30
          • 1970-01-01
          • 2016-03-12
          • 1970-01-01
          • 2018-05-01
          • 2021-08-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多