我正在尝试使用NetLogo为它们创建一些节点和一些函数。我的代码中的节点有一个接受率。这一标准表明,节点在给出链接后,降低了它们的链接接受率。模型中的每个新节点(last-turtle)根据它们的度(计数my- link )检查旧节点和前5个节点的接受率,然后链接到它。
我在这个过程中遇到了一个问题:节点无法检查前5个节点的程度。代码如下:
to make-edge
if connection-strategy = "progressive" [
ask turtles [
if sum [count my-links] of turtles >= 1 [ set acceptance-rate 1 ]
if count my-links >= 10 [ set acceptance-rate 0.8]
if count my-links >= 20 [ set acceptance-rate 0.6]
if count my-links >= 30 [ set acceptance-rate 0.4]
if count my-links >= 40 [ set acceptance-rate 0.2] ]
ask last-turtle [
let top-5 sort-on [ count my-in-links ] max-n-of 5 turtles [ count my-in-links ]
show-results top-5 "Top five turtles using max-n-of:"
let sorted-turtles sort-on [ count my-in-links ] turtles
set top-5 n-of 5 sorted-turtles
if (random-float 1 < acceptance-rate) and (random-float 1 <= prob-of-linkage) [
create-link-from top-5 [ set color green ]
move-to top-5
fd 1] ] ]
if connection-strategy = "indifferent" [
ask last-turtle [
let candidate one-of turtles with [ count my-links > 0 ]
if (random-float 1 <= prob-of-linkage) [
set candidate one-of turtles with [ (count my-links) > 0]
create-link-from candidate [ set color green ]
move-to candidate
fd 1
]]]
end
to show-results [ turtle-list title ]
print title
foreach turtle-list [ t -> ask t [ show count my-in-links ] ]
end谢谢
发布于 2018-10-30 23:12:39
我在猜测你所说的“节点不能检查前5名的程度”是什么意思。我想您的意思是,正确的节点正在被识别(具有最高程度的节点),但接受率并不像您预期的那样工作。
下面是代码的一个更干净的版本,去掉了不相关的connection-strategy = "indifferent"代码块,缩进显示了代码块的结构。
to make-edge
if connection-strategy = "progressive"
[ ask turtles
[ if sum [count my-links] of turtles >= 1 [ set acceptance-rate 1 ]
if count my-links >= 10 [ set acceptance-rate 0.8]
if count my-links >= 20 [ set acceptance-rate 0.6]
if count my-links >= 30 [ set acceptance-rate 0.4]
if count my-links >= 40 [ set acceptance-rate 0.2]
]
ask last-turtle
[ let top-5 sort-on [ count my-in-links ] max-n-of 5 turtles [ count my-in-links ]
show-results top-5 "Top five turtles using max-n-of:"
let sorted-turtles sort-on [ count my-in-links ] turtles
set top-5 n-of 5 sorted-turtles
if (random-float 1 < acceptance-rate) and (random-float 1 <= prob-of-linkage)
[ create-link-from top-5 [ set color green ]
move-to top-5
fd 1
]
]
]
end
to show-results [ turtle-list title ]
print title
foreach turtle-list [ t -> ask t [ show count my-in-links ] ]
end你还没告诉我们最后一只乌龟是什么。但是,看一下这段代码,我怀疑您的问题出在代码行中:
if (random-float 1 < acceptance-rate) and (random-float 1 <= prob-of-linkage)
[ create-link-from top-5 [ set color green ]测试的接受率是最后一只乌龟的接受率。我怀疑你实际上希望相关的接受率是最后一个海龟想要连接的海龟所拥有的那个海龟。
优先连接算法通常的工作方式是将一个新节点连接到网络,并将其边一起带上。因此,我猜测最后一个海龟是新节点,没有任何链接。这意味着它的接受率为0。
我不打算尝试修复这段代码,因为您还没有真正提供足够的信息来了解我的猜测是否正确。特别是,正在发生什么行为,这与您的预期有何不同?例如,问题是没有创建边,还是始终创建了5条边,或者...?
下面是几个附注:
move-to做什么,因为您似乎要创建top-5两次请提供一些进一步的信息,我也许能提供一个更好的答案。
https://stackoverflow.com/questions/53019877
复制相似问题