连接一定半径内的海龟
Connect turtles who are within a certain radius
我使用 NetLogo 中的 nw 扩展来创建网络。
我的目标是:
- 检查附近是否有海龟
- 如果附近有海龟(我尝试了接下来的 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
我还找到了 neighbors
和 distance
命令,但这些命令只考虑了我需要的周围环境。
实际上,如果您想在空间上限制海龟,这不是最好的问题。在海龟创建块中建立连接存在一个严重的问题,因为首先创建的海龟没有潜在的朋友。除非你有非常多的海龟,否则你可能不需要担心效率。
我还认为变量 'x' 是不必要的,因为您有变量 'friends' 可用(这似乎是您希望乌龟拥有的链接数)。还有一个新的记者 up-to-n-of
这使得整个 list
和 min
变得不必要了。
我认为这符合您的要求。您可能想在没有 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
我使用 NetLogo 中的 nw 扩展来创建网络。
我的目标是:
- 检查附近是否有海龟
- 如果附近有海龟(我尝试了接下来的 3 个补丁,但这可能会改变),连接到它们 + 可能的上限是 links
我尝试(并且我认为成功了)实现了 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
我还找到了 neighbors
和 distance
命令,但这些命令只考虑了我需要的周围环境。
实际上,如果您想在空间上限制海龟,这不是最好的问题。在海龟创建块中建立连接存在一个严重的问题,因为首先创建的海龟没有潜在的朋友。除非你有非常多的海龟,否则你可能不需要担心效率。
我还认为变量 'x' 是不必要的,因为您有变量 'friends' 可用(这似乎是您希望乌龟拥有的链接数)。还有一个新的记者 up-to-n-of
这使得整个 list
和 min
变得不必要了。
我认为这符合您的要求。您可能想在没有 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