我正在使用NS2创建无线传感器网络。节点在x-y平面上随机分布,并使用距离计算找到邻居。我正在使用tcl建立网络,但是我愿意翻译其他语言,因此我乐于接受-我的大部分问题来自陷入困境。
下面是我的计算邻居的脚本。这部分有效,并且我已经在模拟器中对其进行了验证。现在,我需要获取节点并对其进行群集而不重叠。例如,从节点0开始作为簇头,我们将得到如下输出:
Cluster for Node 0 contains:
1
3
8
从此处移至其中不包含的下一个节点,这样:
Cluster for Node 2 contains:
5
6
7
这是我到目前为止所拥有的。 Tcl(至少是我发现的)不支持bool函数,所以我搞砸了bool=1 or 0
策略。我也尝试了一些二维数组。就像我说的那样,我愿意接受其他语言的解决方案,也可以只是概述—对事情进展的方向感到困惑。
注意-nd1和nd2是'identifier'变量-它们不包含实际的节点信息;我必须使用它们来打印实际的节点号。
global cluster
global bool
set bool 0
proc neighbors {n1 n2 nd1 nd2} {
global bool cluster
set x1 [expr int([$n1 set X_])]
set y1 [expr int([$n1 set Y_])]
set x2 [expr int([$n2 set X_])]
set y2 [expr int([$n2 set Y_])]
set d [expr int(sqrt(pow(($x2-$x1),2)+pow(($y2-$y1),2)))]
if {$d<40} {
if {$nd2!=$nd1} {
puts "$nd1 Neighrbor: $nd2"
# Set the clusters
array set cluster {}
for {set i 0} {$i < 20} {incr i} {
set cluster($i) $nd2
parray cluster
}
}
}}
for {set i 0} {$i < $val(nn)} {incr i} {
for {set j 0} {$j < $val(nn)} {incr j} {
$ns at 0.0 "neighbors $node($i) $node($j) $i $j"
}}