如何在 Netlogo 的行为空间中以一致的顺序报告代理变量

How to report agent variables in a consistent order in Netlogo's Behaviourspace

Picture of my behaviourspace menu

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

但是,当我使用以下报告器测量跑步时

[agentvariable1] of turtles

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

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

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

但是您不能直接执行 [agentvariable1] of sort turtles,因为 of 需要一个 agent/agentset 但您给它的是一个列表。

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

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

作为 Matteo 答案的替代方案(非常适合并直接解决您的意图,我只是根据偏好提供另一个选项)您还可以将感兴趣的变量与一些 turtle 标识符配对并报告作为列表列表。这在海龟数量增加或减少的情况下增加了一点灵活性。在此示例中,为简单起见,我使用 whoxcor,但您可能希望创建自己的唯一 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 设置,例如:

你得到的输出类似于: