omn​​et++ 中的正确索引

Proper indexing in omnet++

在 omnet++ 中,omnetpp.ini 文件中的索引可以这样吗:

*.Member[0].numTcpApps = 2
*.Member[1..numberOfMembers].numTcpApps = 1

参数 numberOfMembers 已在 .ned 文件中指定为普通整型变量。它被初始化为某个值,例如10.

如果我的 numberOfMembers 变量仅设置为 1,会发生什么情况。在这种情况下,我应该只有一个成员 (Member[0])。那么 .ini 文件的第二个条目会发生什么?

不能在 omnetpp.ini 中使用 NED 参数的值。但是,您可以在 omnetpp.ini.

中使用 wildcard patterns 来实现您的目标

假设网络在 .ned 中定义为:

network ExampleNetwork
{
    parameters:
        int numberOfMembers;
    submodules:
        Member[numberOfMembers] : SomeMemberType;
    // ...
}

那么在omnetpp.ini中就可以控制网络了。例如,要为 Member[0] 设置 numTcpApps = 2,为所有其他子模块设置 numTcpApps = 1,应该这样写:

*.numberOfMembers = 10
*.Member[0].numTcpApps = 2
*.Member[*].numTcpApps = 1   # i.e. Member[1], Member[2], ..., Member[9]

注意 omnetpp.ini 中条目的顺序,因为:

The order of entries is very important with wildcards. When a key matches several wildcard patterns, the first matching occurrence is used.

因此,条目顺序如下:

*.numberOfMembers = 10
*.Member[*].numTcpApps = 1   # i.e. Member[0], Member[1], Member[2], ..., Member[9]
*.Member[0].numTcpApps = 2   

将为所有子模块设置 numTcpApps = 1。不考虑最后一行,因为条目 Member[*].

已经设置了 Member[0]