创建海龟并移动到另一个繁殖代理半径内的位置

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-populationnum-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 的地方出现重叠 - 您必须考虑到这一点。