如何在 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
标识符配对并报告作为列表列表。这在海龟数量增加或减少的情况下增加了一点灵活性。在此示例中,为简单起见,我使用 who
和 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
设置,例如:
你得到的输出类似于:
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
标识符配对并报告作为列表列表。这在海龟数量增加或减少的情况下增加了一点灵活性。在此示例中,为简单起见,我使用 who
和 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
设置,例如:
你得到的输出类似于: