2015-07-12 163 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; 
    } 
}