NS2 仿真参数自动更改和执行,并保存执行结果

内容说明

通常在NS2仿中,是在TCL脚本中设置网络参数进行网络仿真。如果网络参数变化,需要手动修改TCL脚本中设置的参数,然后在重新运行TCL文件获得仿真结果。如此比较麻烦,如何自动修改网络参数并运行仿真,且自动保存运行结果?此处做法是利用Linux的bash脚本,自动修改TCL脚本并执行它,也就实现了上述功能。

举个例子
假设要实现如下功能:每一次仿真网络中的节点是变化的,针对不同的节点数,按比例随机在它们之间产生连接,以发送数据包,并且每次仿真网络中节点都是随机分布和移动的。

实现思路
1. 利用NS2中自带的setdest工具生成一个场景文件,设置每次仿真中的节点的位置、随机移动、移动速度和范围。
Eg:

        ~/ns/ns-2.35/indep-utils/cmu-scen-gen/setdest/setdest -n 20 -p 0 -M 0.5 -t 200 -x 1800 y 1800 > scene

以上代码表示调用NS2中的setdest工具生成一堆指令,这些指令实现:自动设置网络中节点书为20,移动速度0.5m/s,历时200s,移动范围为1800×1800m. 并将结果保存到 scene 文件中。
2. 利用NS2中自带的 cbrgen.tcl 文件随机在节点中生成连接发送数据流。
Eg:

ns cbrgen.tcl -type cbr -nn $20 -seed 1 -mc 8 -rate 10.0 > cbr

以上代码表示调用NS2中的 cbrgen.tcl 文件生成一堆指令,这些指令实现:自动在含有20个节点的网络中产生8对连接,每对连接买秒发送10个分组。并将这些指令保存到cbr文件中。
3. 编写TCL脚本,在其中调用上面生成的文件:scene、cbr,并运行该TCL脚本。
4. 为了达到自动化修改网络参数的目的,还需编写一个Linux的bash脚本进行全局控制,网络中节点每变化一次,都执行上述3个操作,可以在每一次循环中,将第1、2步中的某些参数用变量代替即可。

以上具体实现代码请见资源下载。其中包含:TCL脚本和bash脚本,可以实现上述功能,并用GAWK分析了吞吐量。可以进行蒙特卡罗仿真。

猜你喜欢

转载自blog.csdn.net/sinat_37367944/article/details/79349978