生成网络节点拓扑场景

2010-11-26 wcdj

生成节点场景的方法是,在mit/uAMPS/sims目录下有一个名为genscen的文件,该文件是用来生成节点的场景文件,这个可以在leach_test脚本中找到。
# leach_test
……
#Topology
#  This file is the scenario that we are going to run.
#  This file can be editted manually if you are very careful to create
#  a predefined topology.  To generate a random topology go to the
#  ./mit/uAMPS/sims directory and run 'ns genscen '.
topology_file="mit/uAMPS/sims/100nodes.txt"
……
ns tcl/ex/wireless.tcl  /
-sc mit/uAMPS/sims/nodescen /
-rp $alg /
-x $x /
-y $y /
-nn $nn /
-stop $stop /
-eq_energy $eq_energy /
-init_energy $init_energy /
-filename $filename /
-dirname $dirname /
-topo $topology_file /
-num_clusters $num_clusters /
-bs_x $bs_x /
-bs_y $bs_y 2>$dirname/$filename.err 1>$dirname/$filename.out &

进入mit/uAMPS/sims目录下,发现在运行./test之前就事先存在 一个100nodes.txt 文件,把它删除,我们自己也可以手动运行ns genscen来生成一个新的new100nodes.txt 文件,这个文件里保存的就是随机生成的100个节点的位置信息,内容类似如下:
65.745973803916002    92.581722416254564
21.008649990432268    92.380389195112684
37.201202259027028    40.606367467253641
71.218022131928251    61.297971318148988
35.003944130150579    11.288995440718249
……

【注意】 从leach_test脚本可知,100nodes.txt文件是事先生成好的, 如果这个文件不存在的话,运行./test会在leach.err文件中发现如下错误信息:
# leach.err
INITIALIZE THE LIST xListHead
couldn't open "mit/uAMPS/sims/100nodes.txt": no such file or directory
    while executing
"open $opt(topo) r"
    invoked from within
"set filename [open $opt(topo) r]"
    (file "mit/uAMPS/sims/nodescen" line 3)
    invoked from within
"source.orig mit/uAMPS/sims/nodescen"
    ("uplevel" body line 1)
    invoked from within
"uplevel source.orig [list $fileName]"
    invoked from within
"if [$instance_ is_http_url $fileName] {
set buffer [$instance_ read_url $fileName]
uplevel eval $buffer
} else {
uplevel source.orig [list $fileName]
..."
    (procedure "source" line 8)
    invoked from within
"source $opt(sc)"
    invoked from within
"if { $opt(sc) == "" } {
    puts "*** NOTE: no scenario file specified."
        set opt(sc) "none"
} else {
    puts "Loading scenario file..."
    source $op..."
    (file "tcl/ex/wireless.tcl" line 293)

打开事先存在的100nodes.txt 文件,发现节点的位置信息是在100*100 的范围内,但是从leach_test脚本中,却发现x=1000 y=1000 ,即是在1000*1000 的范围内。所以打开genscen 文件进行修改:
# genscen
set outf [open "new100nodes.txt" w]
set num_nodes 100
set rng [new RNG]
$rng seed 0
# set lim 100
set lim 1000 # modified

for {set i 1} {$i <= $num_nodes} {incr i} {
    set x [$rng uniform 0 $lim]
    set y [$rng uniform 0 $lim]
    puts $outf "$x/t$y"
}
修改后切换到~/ns-allinone-2.27/ns-2.27/mit/uAMPS/sims路径下,重新运行ns genscen来生成一个新的new100nodes.txt文件 ,打开后内容类似如下:
878.56345711209042    853.09648879482245
443.34628593332428    208.33796365574838
31.64275643957907    710.22841646812321
527.89944202075685    348.46698834955089
859.54059840158595    567.67113533228223
……
【注意】 leach_test脚本的设置的文件名为100nodes.txt,所以要将新生成的文件new100nodes.txt重命名为100nodes.txt,然后再./test才能成功。

使用gnuplot工具对修改后的100nodes.txt进行画图显示如下:

生成网络节点拓扑场景_第1张图片

对于1000*1000的网络拓扑,由于距离加大了,相对于100*100 的网络拓扑节点通信消耗的能量更多。
通过对1000*1000的leach.alive分析可以看出,在time=81s的时候,此时网络中仅有4个存活的节点。
0.000000 100
10.000000 91
20.000000 83
30.000000 67
40.000000 67
50.000000 34
60.000000 26
70.000000 14
80.000000 10
81.200000 4
图示如下:
生成网络节点拓扑场景_第2张图片

 

参考:问题

 

 

你可能感兴趣的:(网络,list,File,脚本,Random,buffer)