创建海龟并移动到另一个繁殖代理半径内的位置
create turtles and move to a position in a radius of another breed agent
我想在另一个品种代理的半径内创建一些海龟。
我有这个示例代码:
breed [ readers reader ]
undirected-link-breed [ rris rri ]
breed [ tags tag ]
to setup
clear-all
set xy-file "locations.txt"
setup-readers
setup-tags
end
to setup-readers
create-readers num-readers [
set shape "circle"
set color white ; means idle state 'red' is active
setxy random-xcor random-ycor
]
end
to setup-tags
create-tags tag-population [
setxy random-xcor random-ycor in-radius 6 of one-of readers
]
end
行 setxy...
将标签放置在距 reader 之一的距离为 6 的圆中它不起作用,但我不知道如何修复它。我也测试了 move-to
原语,但没有很好的结果。
我想要的是在每个 reader 的半径内有大量标签,如果可能 select 每个 reader 的标签数量不同。
sprout
原语可能会满足您的需求 - 无需创建标签然后移动它们,只需让适当的补丁直接生成它们即可。例如,使用此设置:
breed [ readers reader ]
breed [ tags tag ]
to setup
clear-all
setup-readers
setup-tags
reset-ticks
end
to setup-readers
create-readers 5 [
set shape "circle"
set color white
setxy random-xcor random-ycor
]
end
您可以在 readers
的半径范围内制作大量补丁,并根据需要添加任意数量的 sprout
标签:
to setup-tags
let radii-patches patch-set []
ask readers [
set radii-patches ( patch-set radii-patches patches in-radius 6 )
]
; Code above defines the patch-set of patches within 6 of readers
; Then, just ask 10 of those radii patches to sprout a tag
ask n-of 10 radii-patches [
sprout-tags 1
]
end
如果您在每个 reader 基础上执行此操作并且您希望每个标签都有不同数量的标签,您可以尝试类似的方法:
to setup-tags-reader
let n-tag random 5
ask readers [
ask n-of n-tag patches in-radius 6 [
sprout-tags 1
]
]
end
但随后以其他方式设置 n-tag
值(例如,从另一个 .csv 文件设置 reader 位置)。
旁注-当您在此处 post 尝试删除任何无法被其他用户直接复制并粘贴到 Netlogo 中的代码时(例如 'xy-file' 行,tag-population
和 num-readers
个变量)- 它让事情变得超级简单!
编辑
根据 - 试试这个选项(使用与上面相同的设置)
to setup-tags
create-tags 10 [
move-to one-of readers
rt random-float 360
fd random-float 6
]
end
这只是创建标签,将它们移动到 reader,让它们随机 select 一个方向,然后让它们从 0 到 6 随机前进。
至于如何为每个 reader 分配补丁 - 只需制作一个 readers-own
变量,然后让他们在他们的设置中为该变量分配补丁(例如,set my-patches patches in-radius 6
)。您可以对标签做类似的事情来定义一组特定于 reader 的标签(例如,`set my-tags tags in-radius 6)。请注意,在这两种情况下,您可能会在两个 reader 共享 patches/tags 的地方出现重叠 - 您必须考虑到这一点。
我想在另一个品种代理的半径内创建一些海龟。
我有这个示例代码:
breed [ readers reader ]
undirected-link-breed [ rris rri ]
breed [ tags tag ]
to setup
clear-all
set xy-file "locations.txt"
setup-readers
setup-tags
end
to setup-readers
create-readers num-readers [
set shape "circle"
set color white ; means idle state 'red' is active
setxy random-xcor random-ycor
]
end
to setup-tags
create-tags tag-population [
setxy random-xcor random-ycor in-radius 6 of one-of readers
]
end
行 setxy...
将标签放置在距 reader 之一的距离为 6 的圆中它不起作用,但我不知道如何修复它。我也测试了 move-to
原语,但没有很好的结果。
我想要的是在每个 reader 的半径内有大量标签,如果可能 select 每个 reader 的标签数量不同。
sprout
原语可能会满足您的需求 - 无需创建标签然后移动它们,只需让适当的补丁直接生成它们即可。例如,使用此设置:
breed [ readers reader ]
breed [ tags tag ]
to setup
clear-all
setup-readers
setup-tags
reset-ticks
end
to setup-readers
create-readers 5 [
set shape "circle"
set color white
setxy random-xcor random-ycor
]
end
您可以在 readers
的半径范围内制作大量补丁,并根据需要添加任意数量的 sprout
标签:
to setup-tags
let radii-patches patch-set []
ask readers [
set radii-patches ( patch-set radii-patches patches in-radius 6 )
]
; Code above defines the patch-set of patches within 6 of readers
; Then, just ask 10 of those radii patches to sprout a tag
ask n-of 10 radii-patches [
sprout-tags 1
]
end
如果您在每个 reader 基础上执行此操作并且您希望每个标签都有不同数量的标签,您可以尝试类似的方法:
to setup-tags-reader
let n-tag random 5
ask readers [
ask n-of n-tag patches in-radius 6 [
sprout-tags 1
]
]
end
但随后以其他方式设置 n-tag
值(例如,从另一个 .csv 文件设置 reader 位置)。
旁注-当您在此处 post 尝试删除任何无法被其他用户直接复制并粘贴到 Netlogo 中的代码时(例如 'xy-file' 行,tag-population
和 num-readers
个变量)- 它让事情变得超级简单!
编辑
根据
to setup-tags
create-tags 10 [
move-to one-of readers
rt random-float 360
fd random-float 6
]
end
这只是创建标签,将它们移动到 reader,让它们随机 select 一个方向,然后让它们从 0 到 6 随机前进。
至于如何为每个 reader 分配补丁 - 只需制作一个 readers-own
变量,然后让他们在他们的设置中为该变量分配补丁(例如,set my-patches patches in-radius 6
)。您可以对标签做类似的事情来定义一组特定于 reader 的标签(例如,`set my-tags tags in-radius 6)。请注意,在这两种情况下,您可能会在两个 reader 共享 patches/tags 的地方出现重叠 - 您必须考虑到这一点。