Sort agents' coordinate using array in NetLogo

时间:2017-11-13 06:49:36

标签: arrays coordinates netlogo

I need to create a simulation code in NetLogo where agents from nest spread out in world to find food. There will be 10 agents in the nest.

The problem I'm facing now is I need to arrange these agents' position in the nest so that they won't overlap each other. Thus, I plan to sort their position using an array.

But I'm having problem to specify their location using array since I'm still struggling to undertsand NetLogo.

The code below is my attempt to write an array but to no avail.

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

Can someone help me? Thank you so much.

2 个答案:

答案 0 :(得分:2)

通过let n turtles,我认为你可能意味着let n count turtles。到set plabel n,我想你可能意味着set label n(你想要标记海龟,而不是他们所站立的补丁,对吧?)。

不清楚为什么在setup-nest内拨打sort-agent。我想你只想删除它?

还不清楚为什么要在ask turtles循环内拨打foreachask 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。

作为一般性评论,我觉得你在尝试一次编写太多代码。因此,您编写的代码有很多错误,以至于您在尝试同时修复所有代码时会遇到很多麻烦。我建议从使用代码开始,然后尝试对其进行非常小的改进,一次一个,让每个改进工作正常。任何时候你都需要编写一堆代码,这意味着你要解决一个太大的问题,你应该找到一个较小的版本来解决它。

答案 1 :(得分:2)

如果要创建展开的海龟,请选择随机补丁并使用sprout(假设所需的海龟数量少于可用的补丁)。根据您对Seth的回答的评论,我认为这更符合您的要求。我想重申他的评论,你是想立刻做太多。这里一个明显的突破就是在考虑在巢内创建海龟之前创建巢(并检查它是否有效)。

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