问题:turtle 变量是 int 类型(例如 -1),但 patch 变量是 NetLogo 6.2 中的单元素列表([-1])

Problem: The turtle variable is of type int (-1, for example), but the patch variable is a one-element list ( [-1] ) in NetLogo 6.2

我有一个疑问:

上下文:我有一个代码,简单地说,海龟有一个整数变量(能量收集),补丁会从中更新它们自己的变量(我的代理能量),如代码中所述下面的代码片段。

问题:turtle变量是int类型(例如-1),但是patch变量是单元素列表([-1])。

问题:这应该发生吗?否则,我怎样才能使补丁变量只是一个整数值?

ask turtles
[
  set energy-collected (energy - euse)
]

ask patches
[
    set energy-of-my-agent [energy-collected] of turtles-here
]

提前致谢

你要考虑的主要是什么 of reports.

在你的例子中 turtles-here 是一个代理集,而不是一个特定的代理。

这是因为,虽然您可能在一个小块上只有一只海龟,但您也可能在一个小块上有多只海龟。因此 turtles-here reports an agentset,即使该代理集可能由一只海龟组成。

因此,通过 of[energy-collected] of turtles-here 获得)的一组值将是一个值列表 - 即使该列表仅包含一个元素.

因此我会说:

  • 您的模型制作方式是否使得每个小块不能一次有超过一只乌龟?那么你可以这样做:
ask patches [
 if any? turtles-here [
  set energy-of-my-agent [energy-collected] of one-of turtles-here
  ]
]

在上面的代码中,one-of turtles-here reports a specific agent - 不再是代理集。 因此,通过 of 获得的变量值将存储为单个值(前提是代理的变量本身不是列表,但你的情况并非如此)。

  • 你的地块一次有不止一只乌龟吗?然后,如果您对保存“它的”海龟值的单个补丁感兴趣,则可能需要处理列表。

更新

我在这个问题和 your other one 之间建立了联系,建议你想使用补丁作为矩阵的元素。

也许这对你的情况有用:如果你的模型允许在同一个补丁上有不止一只乌龟的可能性,你可能有兴趣做这样的事情:

ask patches [
 set energy-of-my-agent sum [energy-collected] of turtles-here
] 

如您所见,sum takes a list as input and reports a number。每个补丁将采用站在那里的海龟 energy-collected 的所有值的总和,或者您可以使用任何您想要的方式更改计算(例如 meanmax 等)。

实际上,无论如何您都可以使用这种方法:这样,即使您在补丁上只有一只乌龟,sum(或任何其他接受丢失并返回值的函数)也会给您一个在您有一个值列表之前的单个值。