Omnet++ 使用Omnet+;迭代随机设置节点位置+;

Omnet++ 使用Omnet+;迭代随机设置节点位置+;,omnet++,Omnet++,我想用ned文件中节点的随机位置(x,y)创建一个网络。首先,我不想在节点之间创建任何链接。我知道设置参数x,y和写入每个节点的硬编码将起作用。但我想自动完成 network Network { submodules: node1:Node { @display("p=250,300"); } node2:Node { @display("p=591,450"); }

我想用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``是允许对参数表达式()进行多次求值所必需的

如果需要,还可以参数化intuniform分布的最小值和最大值

重要提示:(以及一般的模拟框架)只是伪随机性。随机数生成器使用种子值开始计算随机数流。如果种子相同,则绘制的随机数相同。因此,每次启动模拟时都会看到相同的随机节点放置。这不是一个bug,而是一个重要的特性,可以实现重复的模拟运行和实验的重复性。如果希望在NED或INI变量中使用不同的随机值,则可以修改种子开始值,使其在每次运行时都不同

您可以(例如)使用进程ID作为种子开始值。每次启动模拟(运行OMNETGUI)时,都会生成一个(希望是不同的)进程ID,并将其用作种子启动值

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

seed-set = ${processid}
如果您还想在之后添加随机连接,请查看OMNeT++示例中的
nedemo
文件夹。它有一个很好的随机连接的例子,也解释了这个例子