如果答案非常明显,我有疑问并道歉。我创建了以下代码。非常简单&简单的:
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
如您所见,我在代码中有一个检查功能,下面是快照:
我的问题是为什么ls
和ls2
代理商出了问题。 Agentset TSL
显示了海龟的顺序,因此基于它的其他代理集不应该遵循相同的顺序。
答案 0 :(得分:1)
除非您以某种方式对它们进行排序,否则Netlogo将以随机顺序查询代理程序集中的代理程序。在功能上,ask tl
遵循与ask turtles
相同的逻辑,从代理集中检索变量也是如此。例如,如果您使用命令中心多次尝试下面的代码(在运行setup
和asd
之后),您会注意到每次查询的代理的顺序都不一样。< / p>
ask patch 0 0 [ print [distance myself] of tl ]
所有这一切都表明补丁的“tsl”列表的创建与其他列表的创建无关。它不是有序列表,它是来自代理集“tl”的随机调用的海龟列表。获得代理集一致排序的一种方法是使用sort
原语之一。