Arrays 分拣代理';在NetLogo中使用数组进行坐标
我需要在NetLogo中创建一个模拟代码,其中来自nest的代理在世界各地寻找食物。巢穴中将有10名特工 我现在面临的问题是,我需要安排这些代理在巢穴中的位置,这样它们就不会相互重叠。因此,我计划使用数组对它们的位置进行排序 但我在使用数组指定它们的位置时遇到了问题,因为我仍然在努力理解TSAND NetLogo 下面的代码是我尝试编写数组的代码,但没有成功Arrays 分拣代理';在NetLogo中使用数组进行坐标,arrays,coordinates,netlogo,Arrays,Coordinates,Netlogo,我需要在NetLogo中创建一个模拟代码,其中来自nest的代理在世界各地寻找食物。巢穴中将有10名特工 我现在面临的问题是,我需要安排这些代理在巢穴中的位置,这样它们就不会相互重叠。因此,我计划使用数组对它们的位置进行排序 但我在使用数组指定它们的位置时遇到了问题,因为我仍然在努力理解TSAND NetLogo 下面的代码是我尝试编写数组的代码,但没有成功 to setup ca create-turtles 10 [ set size 2 ] setup-patch
to setup
ca
create-turtles 10
[
set size 2
]
setup-patches
sort-agent
end
to sort-agent
let n turtles
foreach sort turtles [ setup-nest
ask turtles
[
set plabel n
set n n + 1
]
]
end
to setup-patches
ask patches
[ setup-nest]
end
to setup-nest
set nest? (distancexy 0 0) < 6
end
设置
ca
创造海龟10
[
2号套餐
]
安装补丁
分拣代理
结束
分类代理
让我们来看看乌龟
foreach分拣海龟[设置巢穴]
问海龟
[
设置plabel n
集合n+1
]
]
结束
设置修补程序
询问补丁
[设置嵌套]
结束
筑巢
安家?(距离XY 0)<6
结束
有人能帮我吗?非常感谢。我想你说的是
让n只海龟
,你的意思可能是让n只海龟
。通过set plabel n
,我想你的意思可能是set label n
(你想给海龟贴标签,而不是给它们站的地方贴标签,对吧?)
不清楚为什么要在排序代理
内部调用设置嵌套
。我想你只是想把它去掉
同样不清楚的是,为什么要在foreach
循环中调用ask turtles
<代码>询问海龟始终询问所有海龟;我猜你是想问某只乌龟,这里
我怀疑你是否需要在这里使用列表。(NetLogo称之为列表,而不是数组。)如果我能更好地理解您试图解决的问题,也许我会认为涉及列表是有意义的,但就目前而言,我持怀疑态度
如果您只是想根据海龟的创建顺序给它们贴上标签,您只需执行以下操作:
ask turtles [ set label who ]
或者,即使在创建标签时:
create-turtles 10 [ set label who ]
但是,如果出于某种原因这不适合,那么使用与您提供的代码类似的代码来完成同样的事情的方法是:
let n 0
foreach sort turtles [
ask ? [
set label n
set n n + 1
]
]
你不能说你使用的是NetLogo 5还是NetLogo 6。我已经使用了NetLogo 5语法,但如果您需要,我可以将其更改为6
一般来说,在我看来,您试图一次编写太多代码。因此,您正在编写的代码有太多错误,以至于您在尝试同时修复所有错误时会遇到很多麻烦。我建议从工作代码开始,然后尝试对其进行非常小的改进,一次一个,让每一个改进都在进行中。任何时候你必须一次编写一堆代码,这意味着你正在处理一个太大的问题,你应该先找到一个较小的版本来处理。如果你想创建分散的海龟,请选择随机补丁并使用
sprout
(假设需要的海龟比可用补丁少)。根据你对赛斯回答的评论,我认为这是你想要的。我想重申他的评论,即你试图一下子做得太多了。这里一个明显的突破是在考虑在巢穴内建造海龟之前先建造巢穴(并检查是否可行)
globals [nest]
to setup
clear-all
setup-nest
setup-turtles
end
to setup-nest
set nest patches with [distancexy 0 0 < 6]
ask nest [ set pcolor red ]
end
to setup-turtles
ask n-of 10 nest
[ sprout 1
[ set label who
]
]
end
globals[nest]
设置
清除所有
设置嵌套
安置海龟
结束
筑巢
使用[distancexy 0<6]设置嵌套面片
询问nest[设置颜色为红色]
结束
安置海龟
问n-10个鸟巢
[萌芽1
[给谁贴标签
]
]
结束
这有帮助吗?你的问题对我来说是不清楚的。你能把它编辑得更具体、更准确地说明你想解决什么问题吗?@alan谢谢你建议的链接,但我认为这段代码不适合我的项目,谢谢你的建议。@SethTisue谢谢你的评论,我已经编辑了我的问题,如果你仍然不清楚,请告诉我,我会再编辑一次D@linda它看起来会满足您的需要。我正在使用NetLogo 5.2,是的,安装嵌套应该在排序代理中,现在我意识到。。。我写在这里是因为我想要求所有的海龟不要在巢穴中重叠。假设巢穴是一个教室,代理是学生,上课前,所有的学生都坐在自己的位置,他们知道自己的位置------->所以在这里,我想编码代理坐在巢穴中的特定位置,所以当我按下设置时,代理已经在他们的位置上------->我对如何使用列表/数组(现在我知道它叫列表,谢谢)来实现这一点的最佳猜测------->但如果除了列表之外还有其他方法,我愿意接受建议。我对NetLogo工作原理的了解非常有限。好的,下次遇到问题时,请打开一个新问题。谢谢,我会这样做的。非常感谢你花时间回答我的问题,赛斯先生。是的~!这就是我的计划,非常感谢。谢谢你的建议,下次我会一个接一个地做。