【发布时间】:2015-09-30 20:19:30
【问题描述】:
我正在使用带有 OMNET++ 的 Veins 框架来模拟高速公路场景。
我正在使用cOutVector 来收集我的实验结果。
我有超过 1000 个节点(车辆),cOutVector 为每个模块(节点)单独收集结果。但是,我需要收集整体结果。
例如,所有节点收到多少信标?有没有收集这样的结果?
【问题讨论】:
标签: simulation omnet++
我正在使用带有 OMNET++ 的 Veins 框架来模拟高速公路场景。
我正在使用cOutVector 来收集我的实验结果。
我有超过 1000 个节点(车辆),cOutVector 为每个模块(节点)单独收集结果。但是,我需要收集整体结果。
例如,所有节点收到多少信标?有没有收集这样的结果?
【问题讨论】:
标签: simulation omnet++
在 OMNeT++ 中,输出结果可以保存为两种不同的类型,即文件格式:
*.sca) - 包含整个模拟运行的汇总数据(平均值、总和、计数、最大值、最小值)*.vec) - 包含模拟运行的每一秒的细粒度数据(以时间序列的形式)输出文件格式与 OMNeT++ 的statistic 机制紧密结合。统计数据允许您存储不同的结果记录模式,例如:count、sum、mean、vector。
在您的情况下,您需要查看每个节点的 sum。
@statistic[foo](record=count,mean,vector);
这些 OMNeT++ 机制一开始看起来很复杂,但是一旦你把头转过来,它们就相当容易了。此外,它们非常强大,可以让您深入了解模拟的许多方面。
很遗憾,在不了解您的代码的情况下,不可能为您的案例提供“即用型”解决方案。
【讨论】:
问:您的意思是要收集所有节点的汇总统计信息?
如果是这样,那么我建议您使用 R,它提供了更多的功能和自定义。不过,您需要时间来学习基本操作。 omnetpp-resultfile Github 页面有教程。
【讨论】:
例如,所有节点收到多少信标?有没有 无论如何收集这样的结果?
您可以创建一个静态变量,并且每次节点收到一个信标时,您都会增加该变量的值。
例如: (在 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;
}
}
【讨论】: