带有未设置全局变量的代码如何不返回“ nobody”?

时间:2019-09-04 18:08:21

标签: netlogo

我有一个学生,他创建了一个名为random-patch的全局变量和一个名为levation的补丁变量。然后,他们使用高程来随机选择要设置随机补丁的补丁。问题在于代码正在运行并且在不设置补丁变量高程的情况下选择了补丁。我知道它会自动设置为零,但是通常不会有人提出这个代码吗?在这里理解问题的任何帮助将不胜感激。

代码:

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)]

1 个答案:

答案 0 :(得分:1)

这实际上是一个非常细微的错误。它不返回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个补丁将满足该条件并位于隐式构造的补丁集中。

在原始代码中将random 50更改为random 100000,您很可能会得到nobody。如果您分开抽奖,它也将按预期运行(所以let roll random 50然后set random-patch one-of patches with [ elevation = roll ]