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

时间:2018-04-04 09:35:22

标签: omnet++

我想创建一个网络,其中包含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");
            }
        }

1 个答案:

答案 0 :(得分:2)

通常,通过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```是必要的,允许多次评估参数表达式(Update test results for a test run)。

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

重要提示: check the OMNeT Simulation Manual for additional infos(以及一般的模拟框架)只是伪随机性。随机数生成器使用种子值来开始计算随机数流。如果种子相同,则绘制的随机数相同。因此,每次开始模拟时,您都会看到相同的随机节点位置。这不是一个错误,而是一个重要的功能,可以实现重复的模拟运行和一般的实验的可重复性。如果您想在NED或INI变量中使用不同的随机值,那么您可以修改种子起始值,使其在每次运行时都不同。

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

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

seed-set = ${processid}

如果您想在之后添加随机连接,请查看OMNeT ++示例中的neddemo文件夹。它有一个很好的随机连接示例,也解释了Randomness in OMNeT++