我必须创造很多海龟形成任何形状的紧凑组,一个简单的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
我正在使用像文章机器人这样的圆龟。
答案 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 ]
您需要制定自己的价值观,并确保它们属于世界范围。