0

我的行为空间菜单的图片

我正在研究一个基于代理的模型,其中所有代理拥有的变量 (agentvariable1) 每次滴答都会改变。我想为使用 Behaviourspace 的每个代理报告此变量值的时间序列。

但是,当我使用以下报告器测量运行时

[agentvariable1] of turtles

为 agentvariable1 报告的值是随机打乱的,因为“turtles”以随机顺序调用所有海龟,每个滴答声都不同。因此,导出的数据不能用于创建时间序列。

是否有可能在 Behaviourspace 中创建一个报告器,该报告器以每个滴答声都保持相同的顺序报告 agentvariable1 的值?

4

2 回答 2

0

在代理集上使用sort会创建一个按某些标准对它们进行排序的代理列表。在海龟的情况下,它们按它们排序,who这意味着它们的相对顺序将始终相同。

但是你不能直接做[agentvariable1] of sort turtles,因为of需要一个代理/代理集,但你给它一个列表。

您可以做的是创建一个全局变量作为列表:在每个滴答声中,列表都会被清空,然后所有海龟(按 排序sort)会将它们的值附加到列表中。该列表是您将在行为空间中报告的内容。

globals [
  all-values
]

turtles-own [
  my-value
]

to setup
  clear-all
  reset-ticks
  create-turtles 5
end

to go
  set all-values (list)
  
  ask turtles [
    set my-value random 10
  ]
  
  foreach sort turtles [
    t ->
    ask t [
      set all-values lput my-value all-values
    ]
  ]
  
  show all-values
  
  tick
end
于 2022-02-05T00:21:18.257 回答
0

作为 Matteo 的答案的替代方案(非常适合并直接解决您的意图,我只是根据偏好提供另一个选项),您还可以将感兴趣的变量与某个turtle标识符配对,并将其报告为列表列表。在海龟数量增加或减少的情况下,这增加了一些灵活性。在本例中,为了简单起见,我使用了whoand xcor,但您可能希望创建自己的唯一turtle标识符以进行更明确的跟踪。使用这个玩具模型:

to setup
  ca
  crt 5
  reset-ticks
end

to go
  ask turtles [
    rt random 30 - 15 
    fd 1
  ]
  tick
end

to-report report-who-x
  report list who xcor
end

在任何时候,您都可以调用列表[report-who-x] of turtles来获取列表列表。使用behaviorspace如下设置:

在此处输入图像描述

你会得到一个看起来像这样的输出:

在此处输入图像描述

于 2022-02-05T08:47:26.487 回答