创造海龟并移动到另一个品种代理半径的位置

时间:2017-11-19 20:58:40

标签: netlogo

我想在另一个品种代理的半径范围内创造一些海龟。

我有这个示例代码:

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原语没有很好的结果。 我想要的是在每个阅读器的半径范围内有一组标签,如果可能的话,选择每个阅读器的标签数量是不同的。

1 个答案:

答案 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-populationnum-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)。请注意,在两种情况下,当两个阅读器共享补丁/标签时,您可以获得重叠 - 您必须考虑到这一点。