netlogo - 如何获得按逆入度中心性排序的前10名海龟?

标签 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

最佳答案

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

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”。

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

关于netlogo - 如何获得按逆入度中心性排序的前10名海龟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48005320/

相关文章:

netlogo - 查找给定方向上一定距离内是否存在其他海龟

java - super 计算机提交脚本以运行 NetLogo 的问题

netlogo - 如何要求海龟在 patch-ahead 1 处避开具有特定颜色的补丁,但海龟在 NetLogo 中一步向前移动更大的数字(而不是 fd 1)

NetLogo:如何找到每个补丁中海龟的平均/总数量?

Netlogo 存储多轮结果

algorithm - 根据补丁特征要求乌龟转向其他目标

netlogo - 如何更改代理角色

netlogo - 多变量海龟运动

netlogo - 如何让不同的品种一起以随机顺序被 `ask` 编辑

simulation - 比较两个应该执行相同操作的代码括号