在彼此附近创造1000只乌龟

时间:2018-03-28 09:55:54

标签: netlogo

我必须创造很多海龟形成任何形状的紧凑组,一个简单的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 我正在使用像文章机器人这样的圆龟。

1 个答案:

答案 0 :(得分:2)

在学习NetLogo时,其他语言程序员要做的最棘手的事情之一是摆脱所有循环。迭代代理或补丁嵌入在ask原语中,您不需要对迭代进行编码。 ask也会以随机顺序进行迭代,这样重复的过程就不会对循环中首先出现的任何代理产生任何好处。

另外,当你创建海龟时,你可以立即给他们指示。您也可以将它们放在任意位置而不是将它们移动到那里。这是一个解决方案,将它们全部放置在一个矩形中,该矩形是中心左侧/右侧(0,0)的5个补丁,占据世界高度的一半。

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

从编辑开始,我认为您希望在网格点创建它们而不是在空间内随机创建它们。如果是这样,那么选择你想要的patches并要求他们sprout一只乌龟。

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

您需要制定自己的价值观,并确保它们属于世界范围。