代理集中代理的顺序不匹配

Order of the agents in agentset don't match

如果答案很明显,我有疑问并道歉。我创建了以下代码。非常简单明了:

patches-own [ tl ls ls2 ls3 ls4 tsl]
turtles-own [mysize]

to setup
  clear-all
  reset-ticks
  crt 5
  ask turtles [ set heading random 360 jump random 20 set mysize random-float 1]
  asd
  inspect patch 0 0
end

to asd
  let old sum [mysize] of turtles
  ask patches [ set tl other turtles
    set tsl [self] of tl
    set ls [distance myself] of tl 
    set ls2 [distance myself ^ 2] of tl
    set ls3 [(mysize) / old] of tl
    ]
  ;print tl

end

to initial
  set heading random 360 jump random 20 set mysize 1
end

to go
  inspect patch 0 0
  ask turtles [ fd 1 set mysize mysize + random-float 1]
  let qwe random-float 1
  print qwe
  if qwe < 0.2 and count turtles > 2 [ask one-of turtles [die]]
  if qwe > 0.8 [ ask one-of patches [sprout 1 [initial]]]
  asd
  tick
end

如您所见,我在代码中有一个检查功能,下面是快照:

我的问题是为什么 lsls2 代理出现故障。 Agentset TSL 显示海龟的顺序,因此基于它创建的其他 agentset 不应该遵循相同的顺序。

除非您以某种方式对它们进行排序,否则 Netlogo 将以随机顺序查询代理集中的代理。在功能上,ask tl 遵循与 ask turtles 相同的逻辑,从代理集中检索变量也是如此。例如,如果你使用命令中心多次尝试下面的代码(在运行你的setupasd之后),你会注意到查询的代理顺序不一样每一次。

ask patch 0 0 [ print [distance myself] of tl ]

所有这些都是为了说明补丁 "tsl" 列表的创建独立于其他列表的创建。它不是有序列表,它是从代理集中随机调用的海龟列表 "tl"。获得代理集一致排序的一种方法是使用 sort 原语之一。