我正在使用带有OMNET ++的Veins框架来模拟高速公路场景。
我正在使用cOutVector
收集我的实验结果。
我有超过1000个节点(车辆),cOutVector
分别为每个模块(节点)收集结果。但是,我需要收集整体结果。
例如,所有节点都收到了多少个信标?无论如何收集这样的结果?
答案 0 :(得分:5)
在OMNeT ++中,输出结果可以保存为两种不同的类型,因此文件格式为:
*.sca
) - 包含整个模拟运行的摘要数据(平均值,总和,计数,最大值,最小值)*.vec
) - 包含模拟运行每一秒的细粒度数据(以时间序列的形式)输出文件格式与OMNeT ++的statistic
机制紧密结合。统计数据允许您存储不同的结果记录模式,例如:count,sum,mean,vector。
在您的情况下,您需要查看每个节点的sum
。
@statistic[foo](record=count,mean,vector);
这些OMNeT ++机制在开始时看起来很复杂,但是一旦你绕开它们它们就相当容易了。此外,它们非常强大,可以为您的模拟的许多方面提供见解。
不幸的是,在不知道您的代码的情况下,无法为您的案例提供“随时可用”的解决方案。
答案 1 :(得分:1)
问:你的意思是你想收集所有节点的聚合统计数据吗?
如果是这样,那么我建议您使用R,它提供更多功能和自定义。但是,您需要时间来学习基本操作。 omnetpp-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;
}
}