通过迭代Omnet ++随机设置节点的位置

塔诺斯·萨基斯(Thanos Sakis)

我想创建一个带有ned文件中节点的随机位置(x,y)的网络。首先,我不想在节点之间创建任何链接。我知道设置参数x,y并写入每个硬编码的节点都可以。但我想自动做

network Network {
    submodules:
        node1:Node {
            @display("p=250,300");
        }
        node2:Node {
            @display("p=591,450");
        }
        node3:Node {
            @display("p=213,150");
        }
}

想要将其变成类似:

network Network {
    submodules:
        for i=0..50 {
            node[i]:Node{
                @display("p=randomX,randomY");
            }
        }
迈克尔·切里

通常,通过NED和INI配置文件配置这种随机放置。但是您也可以仅在NED文件中执行此操作,请看以下示例,该示例将在纯OMNeT ++中运行而无需任何其他框架:

network Random
{
parameters:
    int n @prompt("Number of nodes") = default(10);

    volatile int posX = intuniform (0,100);
    volatile int posY = intuniform (0,100);
submodules:
    node[n]: Node{
        parameters:
            @display("p=$posX,$posY");
    }
}

每次定位节点时,将从0到100之间的均匀分布中绘制一个整数。``volatile''是允许对参数表达式进行多次评估所必需的(有关其他信息,请参阅《 OMNeT仿真手册》)。

如果需要,还可以参数化不均匀分布的最小值和最大值。

重要信息: OMNeT ++(和一般的模拟框架)中的随机性只是伪随机性。随机数生成器使用种子值开始计算随机数流。如果种子相同,则抽取的随机数相同。因此,每次启动仿真时,您将看到相同的随机节点放置。这不是错误,而是重要的功能,可实现重复的模拟运行和一般的实验可重复性。如果要在NED或INI变量中使用不同的随机值,则可以修改种子起始值,以使其在每次运行时都不同。

您可以(例如)使用进程ID作为种子起始值。每次启动仿真(运行OMNeT GUI)时,都会生成(希望是不同的)进程ID,并将其用作种子起始值。

将以下行插入相应的omnetpp.ini文件中:

seed-set = ${processid}

如果您以后也想添加随机连接,请查看neddemoOMNeT ++示例中的文件夹。它有一个很好的随机连接示例,《 OMNeT ++仿真手册》对此进行了说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章