2015-07-12 217 views
0

我使用Veins框架和OMNET ++来模拟公路场景。OMNET ++中的结果分析

我使用cOutVector从我的实验中收集结果。

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

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

回答

5

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

  1. 标量(*.sca) - 包含摘要数据(平均值,求和,计数,最大值,最小值)为整个模拟运行
  2. 载体(*.vec) - 包含用于模拟运行

的每个第二输出文件格式是紧耦合的与statistic mechani细粒度的数据(时间序列的形式)短信OMNeT ++。统计数据允许您存储不同的结果记录模式,如:count,sum,mean,vector。

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

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

这些的OMNeT ++机制看似复杂的开始,但他们是相当容易的,一旦你绕到你的头。而且,它们非常强大,可以为您的模拟的许多方面提供见解。

  • 要理解标量和矢量之间的差异,请阅读this
  • 要了解使用信号读取结果记录this
  • 有关如何使用信号并记录特定统计量&指标的具体示例,请查看我的详细解答here

不幸的是,这是不可能为你的情况下,“准备使用”解不知道你的代码。

1

问:你的意思是你想收集所有节点的汇总统计?

如果是的话我建议你使用R,它提供了更多的功能和定制。虽然,你需要时间来学习基本操作。 在omnetpp-resultfile Github页面有教程。

0

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

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

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