首页 > 解决方案 > 如何提取代理集中的代理数量?(网络标志)

问题描述

我有一个补丁变量设置为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.

标签: netlogoagentset

解决方案


您获得列表列表的原因是两者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只是它的颜色,而不是包含颜色的列表。

因此,您可以通过单独要求补丁上的每只海龟将它们附加whovisitantBees

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

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

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

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


推荐阅读