Netlogo 带有未设置全局变量的代码如何不返回';没有人';?

Netlogo 带有未设置全局变量的代码如何不返回';没有人';?,netlogo,Netlogo,我有一个学生,他创建了一个名为random patch的全局变量和一个名为elevation的面片变量。然后,他们使用“高程”随机选择一个面片,将“随机面片”设置为。问题是,代码正在运行,并且在没有设置面片变量高程的情况下选择面片。我知道它会自动设置为零,但这段代码通常不会出现任何人吗?如果您能帮助我们理解这个问题,我们将不胜感激 代码: 这实际上是一个非常微妙的错误。它不返回nobody的原因是它在从中进行选择之前构造了agentset。它所做的是独立测试每个补丁,并为每个补丁绘制一个随机整数

我有一个学生,他创建了一个名为random patch的全局变量和一个名为elevation的面片变量。然后,他们使用“高程”随机选择一个面片,将“随机面片”设置为。问题是,代码正在运行,并且在没有设置面片变量高程的情况下选择面片。我知道它会自动设置为零,但这段代码通常不会出现任何人吗?如果您能帮助我们理解这个问题,我们将不胜感激

代码:


这实际上是一个非常微妙的错误。它不返回nobody的原因是它在从中进行选择之前构造了agentset。它所做的是独立测试每个补丁,并为每个补丁绘制一个随机整数。下面的代码将这两个步骤分开

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
。如果您将绘图分离出来(因此
让roll random 50
然后
使用[elevation=roll]将随机面片设置为面片中的一个面片),它也将按照您的预期运行。

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