我想从学位中心性方面获得十大海龟的名单。我已经尝试但是我没有得到所需的结果。 在下面的代码中,我将中心性存储在列表中,然后对其进行反向排序。但是,它只存储中心。我希望乌龟的中心地位是有序的。我也尝试在列表中保存海龟并使用了排序但是出现了错误。 我也尝试使用具有最大度中心性的海龟获得代理,但是当几个节点具有相同的中心性时会出现问题。我想以有效的方式做到这一点。
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
答案 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"
最后一种方法对整体进行排序,查看该列表中第十只乌龟的中心位置,并过滤该列表以仅保留中心性大于或等于该中心的海龟。