在彼此附近创造 1000 只海龟

Create 1000 turtles near each others

我必须创建很多海龟,形成一个任意形状的紧凑组,一个简单的 10x100 矩形就足够了。重要的是他们必须彼此靠近。 在 c 中我会做这样的事情:

for(x = 1; x <= rows; x++)
{
    for(y = 1; y <= columns; y++)
    {
        create_turtle(x,y);
    }
}

而 netlogo 中的等价物是:

crt 1000
let n 0
let x 1
let y 1
while[y <= 10]
[
  set x 1
  while[x <= 100]
  [
    ask turtle n
    [move-to patch x y]  
    set x x + 1
    set n n + 1      
  ]
  set y y + 1    
]

但这不是一个优雅的解决方案。有什么建议吗?

编辑:更准确地说,我必须重现这篇文章中所做的事情:http://science.sciencemag.org/content/345/6198/795.full
每只乌龟都是一个小机器人。
在这里你可以看到一种定位海龟的方法 turtles schema
我正在使用像文章中的机器人一样的圆龟。

其他语言的程序员在学习 NetLogo 时最棘手的事情之一就是摆脱所有循环。遍历代理或补丁嵌入在 ask 原语中,您无需编写迭代代码。 ask 也以随机顺序迭代,这样重复的过程不会给循环中最先出现的代理带来任何优势。

此外,当您创建海龟时,您可以立即给它们下达指令。您也可以将它们最初放置在任意位置,而不是将它们移动到那里。这是一个解决方案,将它们全部放置在一个矩形中,该矩形距离中心 (0,0) 的 left/right 有 5 个补丁,并且占据世界高度的一半。

create-turtles 1000 [ setxy random-float 10 - 5 random-ycor * 0.5 ]

根据编辑,我认为您希望它们在网格点处创建,而不是在 space 内随机创建。如果那是真的,那么 select 你想要的 patches 并要求他们 sprout 一只乌龟。

let in-shape patches with [ pxcor >= -10 and pxcor <= 10 and pycor >= -10 and pycor <= 10 ]
ask in-shape [ sprout 1 ]

你需要制定出自己的价值观,并确保它们在世界维度内。