我想在另一个品种代理的半径范围内创造一些海龟。
我有这个示例代码:
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...
将标记放置在距离其中一个读取器不起作用的距离为6的圆圈中,但我不知道如何修复它。我还测试了move-to
原语没有很好的结果。
我想要的是在每个阅读器的半径范围内有一组标签,如果可能的话,选择每个阅读器的标签数量是不同的。
答案 0 :(得分:2)
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
如果您是基于每个阅读器进行此操作并且您希望每个标签都有不同数量的标签,您可以尝试以下内容:
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文件中设置读取器位置)。
旁注 - 当您在此处发帖时,尝试删除任何代码,而不是其他用户无法直接复制并粘贴到Netlogo中的代码(例如' xy-file'行,tag-population
和num-readers
变量) - 它只是让事情变得简单!
修改强>
根据your comment - 尝试此选项(使用与上面相同的设置)
to setup-tags
create-tags 10 [
move-to one-of readers
rt random-float 360
fd random-float 6
]
end
这只是创建标签,将它们移动到阅读器,让它们随机选择一个方向,然后让它们从0到6逐步前进。
至于如何为每个读者分配补丁 - 只需创建一个readers-own
变量,然后让他们在其设置中为该变量分配补丁(例如set my-patches patches in-radius 6
)。你可以用标签做类似的事情来定义一个特定于阅读器的标签集(例如`set my-tags tags in-radius 6)。请注意,在两种情况下,当两个阅读器共享补丁/标签时,您可以获得重叠 - 您必须考虑到这一点。