我有一个学生,他创建了一个名为random-patch的全局变量和一个名为elevation的patch变量。然后,他们使用elevation来随机选择一个补丁来设置random-patch。问题是代码正在运行,并且在没有设置patch变量elevation的情况下选择一个补丁。我知道它会自动设置为零,但这段代码通常不应该出现任何人吗?任何帮助理解这个问题的人都将不胜感激。
代码:
globals [ random-patch ]
patches-own [ elevation ]
to setup
ca
set random-patch one-of patches with [ elevation = (random 50) ]
;Also still reports a patch if only the pre to-setup code is entered and the
;following is entered on the interface observer console:
show one-of patches with [elevation = (random 50)]发布于 2019-09-05 02:48:03
这实际上是一个非常细微的错误。它没有返回nobody的原因是因为它在从中选择之前构造了代理集。它所做的是独立测试每个补丁,并为每个补丁绘制一个随机整数。下面的代码将这两个步骤分开。
globals [ random-patch ]
patches-own [ elevation ]
to setup
clear-all
let zeros patches with [ elevation = (random 50) ]
type "Patches with zero: " print count zeros
set random-patch one-of zeros print random-patch
end如果使用标准设置,则有1089个补丁。1/50的随机抽取将返回0,因此1/50或大约22个will补丁将满足条件并位于隐式构造的补丁集中。
在您的原始代码中将random 50更改为random 100000,您可能会得到nobody。如果您分离出绘图,它也会像您预期的那样运行(所以先使用let roll random 50,然后使用set random-patch one-of patches with [ elevation = roll ]
https://stackoverflow.com/questions/57793747
复制相似问题