【问题标题】:How to extract the who number of agents in an agentset? (NetLogo)如何提取代理集中的代理数量? (网络标志)
【发布时间】:2021-09-07 13:13:57
【问题描述】:

我有一个补丁变量设置为visitantBees []。 目的是每个补丁都有一个记录,其中有哪些代理。 “访问代理”的注册方法如下:

to computing Frequency
  ask patches
  [
    if any? turtles-here
    [
      set visitantBees lput [who] of turtles-here visitantBees
    ]
  ]
end

但是,这样会返回一个列表列表(例如[[3 1 0 2 4]])。

有谁知道我如何只将who 号码添加到visitantBees 列表中? 也许是一种从turtles-here 中提取所有项目的方法。

【问题讨论】:

  • 在 NetLogo 中,使用who 数字几乎是不合适的。涉及who 数字会使您的编码生活变得更加艰难,而不是更轻松。相反,请直接参考代理本身。还可以考虑使用代理集而不是列表。

标签: netlogo agentset


【解决方案1】:

之所以会得到列表列表,是因为visitantBees[who] of turtles-here 都是列表。

虽然visitantBees 是一个列表,因为您将其设置为一个列表,但为什么[who] of turtles-here 是一个列表?因为turtles-here 是一个代理集 - 报告代理集变量的唯一方法是创建一个列表。例如,如果你想知道[color] of turtles,NetLogo 给你这个信息的唯一方法就是把所有海龟的颜色放在一个列表中。

那么,为什么turtles-here 是一个代理集?因为,即使有时turtles-here 可以包含 0 或 1 个海龟,它也可以包含多个海龟。任何适合包含多个代理的东西都必须是代理集。

另一方面,当您要求单个代理报告其中一个变量时,您会得到这样的值,即不是一个列表(当然,除非该值本身就是一个列表)。例如,[color] of turtle 0 只是它的颜色,而不是包含颜色的列表。

因此,您可以通过单独要求补丁上的每只海龟将其who 附加到visitantBees 来实现您的目标:

to computingFrequency
  ask patches [
    ask turtles-here [
      set visitantBees lput who visitantBees
    ]
  ]
end

或者,考虑到海龟可以自动读取和更改它们所在的补丁的补丁自己的变量,你可以让它更简单:

to computingFrequency
  ask turtles [
    set visitantBees lput who visitantBees
  ]
end

这也更快,因为它只会与海龟(根据定义,它们站在一块地块上)接触,而不是与每块地块接触,即使上面没有乌龟。

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 2012-01-04
    • 2020-10-05
    • 1970-01-01
    • 2010-11-30
    • 2011-10-25
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多