OMNET ++中的结果分析

时间:2015-07-12 14:05:02

标签: simulation omnet++

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

  1. 标量(*.sca) - 包含整个模拟运行的摘要数据(平均值,总和,计数,最大值,最小值)
  2. 向量(*.vec) - 包含模拟运行每一秒的细粒度数据(以时间序列的形式)
  3. 输出文件格式与OMNeT ++的statistic机制紧密结合。统计数据允许您存储不同的结果记录模式,例如:count,sum,mean,vector。

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

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

    这些OMNeT ++机制在开始时看起来很复杂,但是一旦你绕开它们它们就相当容易了。此外,它们非常强大,可以为您的模拟的许多方面提供见解。

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

    不幸的是,在不知道您的代码的情况下,无法为您的案例提供“随时可用”的解决方案。

答案 1 :(得分:1)

问:你的意思是你想收集所有节点的聚合统计数据吗?

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

答案 2 :(得分:1)

  

例如,所有节点都收到了多少个信标?在那儿   无论如何收集这样的结果?

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

例如: (在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
}

在此之后,您可以在功能完成()中打印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;
  }
}