Tcl(或任何语言)中的节点群集循环

时间:2019-06-25 17:47:25

标签: c++ tcl ns2

我正在使用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"
}}

0 个答案:

没有答案