【问题标题】:Record non-scalar parameter in Omnet++在 Omnet++ 中记录非标量参数
【发布时间】:2015-03-06 11:09:09
【问题描述】:

我在参数研究中使用非标量参数:

*.server.serviceTime = ${B=exponential(20ms), exponential(35ms)}

但是,与其他标量参数相比,B 参数未显示在结果的 Browse Data 部分中,直到现在我一直使用它来导出参数研究的结果:

如何记录我正在使用的指数分布 (B) 的参数?

serviceTime.ned 中声明如下:

volatile double serviceTime @unit(s);

【问题讨论】:

    标签: omnet++


    【解决方案1】:

    如果我没记错的话,您想记录指数分布的平均值。以下是 PureAlohaExperiment 示例如何执行此操作的示例:

    [Config PureAlohaExperiment]
    ...
    Aloha.numHosts = ${numHosts=10,15,20}
    Aloha.host[*].iaTime = exponential(${mean=1,2,3,4,5..9 step 2}s)
    

    即将交互变量放入指数函数中。

    【讨论】:

      【解决方案2】:

      您可以在 NED 模块中放入一个名为 B 的参数。然后,您可以在 omnetpp.ini 中执行以下操作:

      **.B = ${B=exponential(20ms), exponential(35ms)}
      

      最后,在finish()函数中记录B NED参数:

      recordScalar("B", par("B"));
      

      【讨论】:

        【解决方案3】:

        有一个选项param-record-as-scalar 用于将参数保存为标量。使用示例:

        *.server.serviceTime.param-record-as-scalar = true
        

        但是,它不适用于 volatile 参数(完成模拟时出错)。避免注册“无意义”的随机值似乎是一种有意的行为。

        如果你真的需要volatile参数的当前随机值,你应该在读取后将其记录为一个新的标量,例如:

        double serviceTime = par("serviceTime").doubleValue();
        recordScalar("serviceTime 1", serviceTime);
        // ... later
        serviceTime = par("serviceTime").doubleValue();
        recordScalar("serviceTime 2", serviceTime);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-05
          相关资源
          最近更新 更多