我想查找与给定生成列表中的至少两个成员相邻的节点列表(即,具有链接)。代理人例如,生成列表包含[turtle2,turtle11,turtle9,turtle10,turtle7]。如果turtle13与turtle2和turtle9都有链接,那么它应该在返回的列表中。但是,不应返回仅包含列表中一个成员的link-neighbors
节点。
以下代码设置生成列表(称为maxDegList)。但我没有任何代码(或算法)来查找所需的列表。该网络有大约14,000个节点和26,000个链接,因此效率是一个问题。但是,生成列表很小(少于20个节点)。
to setup
ca
crt 60 [fd random 15]
ask turtles with [color = red] [create-links-to other turtles with [color = blue]]
ask turtles with [color = blue] [create-links-from other turtles with [color = yellow]]
maxdeg
end
to maxdeg
let maxDegList reverse sort-on [ count my-links ] max-n-of 4 turtles [ count my-links ]
show-inf maxDegList "Top ten turtles using max-n-of:"
foreach maxDegList [
ask myself [
ask other nw:turtles-in-radius 2 [set shape "circle"]
]]
end
to show-inf [ turtle-list maxD ]
print maxD
foreach turtle-list [ t -> ask t [ show count my-links ] ]
end
答案 0 :(得分:2)
好的,这是一个完整的程序,可以帮助您入门。我已将其作为代理集而非列表完成,但如果您真的需要列表,则可以foreach
而不是ask
进行其他更改,逻辑将是相同的。如果您正在使用定向网络,还需要进行一些更改。
您要求的位是common-neigbors
程序,它接受生成代理程序集和数字。在你的情况下,数字是2,但是以这样的方式编写它也很容易,你也可以要求不同数量的相邻节点。
我利用了生成代理集很小的事实,因此迭代发生的地方。首先,它构造生成代理集的link-neighbors
的代理集(称为邻接集),因为具有至少2个作为集合成员的邻居的任何节点显然必须是该集合的邻居的成员。然后,它查看邻接集中的每个代理,并简单地计算其原始生成集中有多少网络邻居。如果该计数足够高,则将代理添加到最终报告的代理集中。
extensions [nw]
to setup
clear-all
nw:generate-random turtles links 40 0.1 [ set color red ]
repeat 10 [ layout-spring turtles links 0.2 15 1 ]
let maxDegNodes max-n-of 4 turtles [ count my-links ]
show-inf maxDegNodes "Central turtles using max-n-of:"
print "Relevant nodes:"
let wanted common-neighbors maxDegNodes 2
ask wanted
[ set color blue
show link-neighbors
]
end
to-report common-neighbors [ in-turtles min-links ]
let adjacents nobody
ask in-turtles [ set adjacents (turtle-set adjacents link-neighbors) ]
let out-set nobody
let intersection nobody
ask adjacents
[ set intersection link-neighbors with [ member? self in-turtles ]
if count intersection >= min-links [ set out-set (turtle-set out-set self) ]
]
report out-set
end
to show-inf [ in-turtles title ]
print title
ask in-turtles
[ show count my-links
set size 2
set color yellow
]
end