在 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 turtlesset plabel n,我想你的意思可能是 set label n(你想标记海龟,而不是它们站立的那块地,对吧?)。

不清楚为什么要在 sort-agent 中调用 setup-nest。我想你只是想删除它?

还不清楚为什么要在 foreach 循环中调用 ask turtlesask 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