连接一定半径内的海龟

Connect turtles who are within a certain radius

我使用 NetLogo 中的 nw 扩展来创建网络。

我的目标是:

  1. 检查附近是否有海龟
  2. 如果附近有海龟(我尝试了接下来的 3 个补丁,但这可能会改变),连接到它们 + 可能的上限是 links

我尝试(并且我认为成功了)实现了 中描述的方法。这意味着上限有效。但是,我不能只link到附近的海龟。如果附近没有乌龟,我还需要一些东西来捕获错误。我尝试使用 in-radius 命令,但由于某些原因,它没有按照我的要求执行。

extensions [nw]

breed [ AT1s AT1]

turtles-own [ friends ]

to setup
  ca
  create-AT1s 20 [
   setxy random-xcor random-ycor
   set friends 3
   set color green
   get-radius-friends friends AT1s
  ]
end

to get-radius-friends [ x AgentT]
  let lonely AgentT with [count my-links < x]
  let candidates other AgentT with [ any? AgentT in-radius 3 AND count my-links < x ]
   let new-links x - count my-links
    if new-links > 0 AND any? AgentT in-radius 3
    [ let chosen n-of min (list new-links count other candidates) other candidates
      create-links-with chosen [ hide-link ]
      set candidates other candidates
      ask chosen [ if my-links = x [ set candidates other candidates ] ]
    ] 
end

我还找到了 neighborsdistance 命令,但这些命令只考虑了我需要的周围环境。

实际上,如果您想在空间上限制海龟,这不是最好的问题。在海龟创建块中建立连接存在一个严重的问题,因为首先创建的海龟没有潜在的朋友。除非你有非常多的海龟,否则你可能不需要担心效率。

我还认为变量 'x' 是不必要的,因为您有变量 'friends' 可用(这似乎是您希望乌龟拥有的链接数)。还有一个新的记者 up-to-n-of 这使得整个 listmin 变得不必要了。

我认为这符合您的要求。您可能想在没有 hide-link 的情况下进行测试,以便了解它的作用。

breed [ AT1s AT1]

turtles-own [ friends ]

    to setup
      clear-all
      create-AT1s 100
      [ setxy random-xcor random-ycor
        set friends 3
        set color green
      ]
      get-radius-friends 10 AT1s
    end
    
    to get-radius-friends [ #radius #breed ]
      let linkers turtles with [breed = #breed ]
      ask linkers
      [ let new-links friends - count my-links
        if new-links > 0
        [ let candidates other linkers with [ count my-links < friends ] in-radius #radius
          let chosen up-to-n-of new-links candidates
          create-links-with chosen [ hide-link ]
        ]
      ]
    end