Цикл кластеризации узлов в Tcl (или любом другом языке) - PullRequest
0 голосов
/ 25 июня 2019

Я нахожусь в процессе создания беспроводной сенсорной сети с использованием NS2.Узлы распределены случайным образом по плоскости xy, и с помощью вычисления расстояния найдены соседи.Я использую tcl для построения сети, но я открыт для ответов с других языков, так как я чувствую, что могу перевести - большая часть моей проблемы связана с увязанием в циклах.

Ниже приведен мой скрипт, который вычисляетсоседи.Эта часть работает, и я проверил это в симуляторе.Теперь мне нужно взять узлы и кластеризовать их без перекрытия.Например, начиная с узла 0 в качестве заголовка кластера, мы получим вывод, подобный следующему:

Cluster for Node 0 contains: 
1
3
8

Оттуда перейдем к следующему узлу, НЕ содержащемуся в нем, так:

Cluster for Node 2 contains: 
5
6
7

Здесьэто то, что я до сих порTcl (по крайней мере, я обнаружил) не поддерживает функции bool, поэтому я возился со стратегией bool=1 or 0.Я также попробовал несколько 2-мерных массивов.Как я уже сказал, я открыт для решений на других языках или просто для общего описания - я запутался в том, что происходит.

Примечание - nd1 и nd2 являются переменными «идентификатора» - они не содержат фактической информации об узле;Я должен был использовать их, чтобы напечатать фактический номер узла.

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"
}}
...