首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优先连接到网络

优先连接到网络
EN

Stack Overflow用户
提问于 2018-10-27 15:58:27
回答 1查看 87关注 0票数 1

我正在尝试使用NetLogo为它们创建一些节点和一些函数。我的代码中的节点有一个接受率。这一标准表明,节点在给出链接后,降低了它们的链接接受率。模型中的每个新节点(last-turtle)根据它们的度(计数my- link )检查旧节点和前5个节点的接受率,然后链接到它。

我在这个过程中遇到了一个问题:节点无法检查前5个节点的程度。代码如下:

代码语言:javascript
复制
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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-10-30 23:12:39

我在猜测你所说的“节点不能检查前5名的程度”是什么意思。我想您的意思是,正确的节点正在被识别(具有最高程度的节点),但接受率并不像您预期的那样工作。

下面是代码的一个更干净的版本,去掉了不相关的connection-strategy = "indifferent"代码块,缩进显示了代码块的结构。

代码语言:javascript
复制
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

你还没告诉我们最后一只乌龟是什么。但是,看一下这段代码,我怀疑您的问题出在代码行中:

代码语言:javascript
复制
  if (random-float 1 < acceptance-rate) and (random-float 1 <= prob-of-linkage)
  [ create-link-from top-5 [ set color green ]

测试的接受率是最后一只乌龟的接受率。我怀疑你实际上希望相关的接受率是最后一个海龟想要连接的海龟所拥有的那个海龟。

优先连接算法通常的工作方式是将一个新节点连接到网络,并将其边一起带上。因此,我猜测最后一个海龟是新节点,没有任何链接。这意味着它的接受率为0。

我不打算尝试修复这段代码,因为您还没有真正提供足够的信息来了解我的猜测是否正确。特别是,正在发生什么行为,这与您的预期有何不同?例如,问题是没有创建边,还是始终创建了5条边,或者...?

下面是几个附注:

  • top-5是一个由5个海龟组成的代理集,所以我不知道您希望move-to做什么,因为您似乎要创建top-5两次

请提供一些进一步的信息,我也许能提供一个更好的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53019877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档