【问题标题】: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),但是在 NetLogo 6.2 中 patch 变量是一个单元素列表( [-1] )
【发布时间】:2021-08-19 19:13:11
【问题描述】:

我有一个疑问:

上下文:我有一个代码,简单地说,海龟有一个整数变量(能量收集),然后补丁更新自己的变量(我的代理能量),如代码 sn- p 下面。

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

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

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

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

提前致谢

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    你要考虑的主要是ofreports

    在您的情况下,turtles-here 是代理集,而不是特定代理。

    这是因为,尽管您可能在一个补丁上只有一只海龟,但您也可能在一个补丁上拥有多个海龟。因此turtles-herereports 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
    ] 
    

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 2022-10-23
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多