在 NetLogo 中使用数组对代理的坐标进行排序
Sort agents' coordinate using array in NetLogo
我需要在 NetLogo 中创建一个模拟代码,让来自巢穴的代理人在世界各地散布寻找食物。巢中将有 10 个代理。
我现在面临的问题是我需要安排这些代理在巢中的位置,使它们不会相互重叠。因此,我打算使用数组对它们的位置进行排序。
但是我在使用数组指定它们的位置时遇到问题,因为我仍在努力理解 NetLogo。
下面的代码是我尝试写一个数组,但没有成功。
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
有人可以帮助我吗?非常感谢。
let n turtles
,我想你的意思可能是 let n count turtles
。 set plabel n
,我想你的意思可能是 set label n
(你想标记海龟,而不是它们站立的那块地,对吧?)。
不清楚为什么要在 sort-agent
中调用 setup-nest
。我想你只是想删除它?
还不清楚为什么要在 foreach
循环中调用 ask turtles
。 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 还是 6。我用的是 NetLogo 5 语法,但如果你愿意,我可以把它改成 6。
一般来说,在我看来,您试图一次编写太多代码。结果,您正在编写的代码有太多错误,以至于您在尝试同时修复所有这些问题时会遇到很多麻烦。我建议从工作代码开始,然后尝试对其进行 非常小的 改进,一次一个,让每项改进都在进行中。任何时候你不得不一次写一堆代码,这意味着你要解决的问题太大了,你应该先找到一个较小的版本来解决。
如果您想创建分散的海龟,select 随机补丁并使用 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
我需要在 NetLogo 中创建一个模拟代码,让来自巢穴的代理人在世界各地散布寻找食物。巢中将有 10 个代理。
我现在面临的问题是我需要安排这些代理在巢中的位置,使它们不会相互重叠。因此,我打算使用数组对它们的位置进行排序。
但是我在使用数组指定它们的位置时遇到问题,因为我仍在努力理解 NetLogo。
下面的代码是我尝试写一个数组,但没有成功。
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
有人可以帮助我吗?非常感谢。
let n turtles
,我想你的意思可能是 let n count turtles
。 set plabel n
,我想你的意思可能是 set label n
(你想标记海龟,而不是它们站立的那块地,对吧?)。
不清楚为什么要在 sort-agent
中调用 setup-nest
。我想你只是想删除它?
还不清楚为什么要在 foreach
循环中调用 ask turtles
。 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 还是 6。我用的是 NetLogo 5 语法,但如果你愿意,我可以把它改成 6。
一般来说,在我看来,您试图一次编写太多代码。结果,您正在编写的代码有太多错误,以至于您在尝试同时修复所有这些问题时会遇到很多麻烦。我建议从工作代码开始,然后尝试对其进行 非常小的 改进,一次一个,让每项改进都在进行中。任何时候你不得不一次写一堆代码,这意味着你要解决的问题太大了,你应该先找到一个较小的版本来解决。
如果您想创建分散的海龟,select 随机补丁并使用 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