我想创建一个带有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}
如果您以后也想添加随机连接,请查看neddemo
OMNeT ++示例中的文件夹。它有一个很好的随机连接示例,《 OMNeT ++仿真手册》也对此进行了说明。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句