如何通过反向度中心性排序前10名海龟?

时间:2017-12-28 09:57:25

标签: netlogo

我想从学位中心性方面获得十大海龟的名单。我已经尝试但是我没有得到所需的结果。 在下面的代码中,我将中心性存储在列表中,然后对其进行反向排序。但是,它只存储中心。我希望乌龟的中心地位是有序的。我也尝试在列表中保存海龟并使用了排序但是出现了错误。 我也尝试使用具有最大度中心性的海龟获得代理,但是当几个节点具有相同的中心性时会出现问题。我想以有效的方式做到这一点。

    globals [indeg]
    turtles-own [centrality]
    to setup
      ca
      crt 160

      ask turtles [ 
        set indeg [] 
        fd random 15
      ]
      ask turtles with [color = red] [create-links-to other turtles with [color = blue]]
      ask turtles with [color = green] [create-links-from other turtles with [color = yellow]]
      inf
    end

    to inf
      ask turtles [
        set centrality count my-in-links
        set indeg lput centrality indeg
      ]
      set indeg sort(indeg)
      print "indeg"
      print reverse(indeg)
      print max(indeg)
    end

1 个答案:

答案 0 :(得分:3)

以下是获取该信息的三种不同方式,可能会略有不同的性能和结果:

to setup
  clear-all
  create-turtles 160 [ forward random 15 ]
  ask turtles with [color = red] [create-links-to other turtles with [color = blue]]
  ask turtles with [color = green] [create-links-from other turtles with [color = yellow]]

  let top-10-a reverse sort-on [ count my-in-links ] max-n-of 10 turtles [ count my-in-links ]
  show-results top-10-a "Top ten turtles using max-n-of:"

  let sorted-turtles reverse sort-on [ count my-in-links ] turtles

  let top-10-b sublist sorted-turtles 0 9
  show-results top-10-b "Top ten turtles from sorted list:"

  let top-10-c filter [ t ->
    [ count my-in-links ] of t >= [ count my-in-links ] of item 9 sorted-turtles
  ] sorted-turtles 
  show-results top-10-c "Turtles with top ten centrality:"

end

to show-results [ turtle-list title ]
  print title
  foreach turtle-list [ t -> ask t [ show count my-in-links ] ]
end

第一种(方法" a")最明显的是使用NetLogo的max-n-of原语。该原语返回一个代理集(而不是列表),因此如果你想要一个代理集,那就是你要走的路。

您的问题似乎表明您最终想要通过降低中心性排序的海龟列表,因此您必须对reverse sort-on [ count my-in-links ]的结果使用max-n-of,这就是我正在做的事情上方。

另一种方法(方法" b")将按照它们的中心性对所有海龟进行排序,将结果列表存储在sorted-turtles个变量中,然后取其中的前10个。该方法更直观,但可能比max-n-of方法慢,因为它必须对整个列表进行排序。但是,根据您拥有的海龟数量,差异可以忽略不计。

前两种方法的一个共同点是关系是随机打破的。这意味着,如果你有,比如说,三只龟在你的前十名中具有十分位置的中心位置,那么你只会得到其中一只。 (根据您在问题示例中构建网络的方式,很可能会发生这种情况。)如果您希望前十名可能包含10个以上的海龟,则需要使用方法" C"

最后一种方法对整体进行排序,查看该列表中第十只乌龟的中心位置,并过滤该列表以仅保留中心性大于或等于该中心的海龟。