如何从 NetLogo Behaviorspace 中保存 table 格式的全局变量

How to save a global variable with table format from NetLogo Behaviorspace

我为我的 ABM 编写了一个相当复杂的代码(634 个具有交互的代理,每个代理都有不同的变量,其中一些是具有多个值的列表,每个值都会更新)。因为我需要保存所有代理的更新值,所以我使用 table:make 定义了一个全局变量。 table 有 634 个键(每个键代表一个代理),每个键都有一个列表,其中包含相应代理的这些值(来自该代理拥有的列表变量)。但是,当我使用此 table 的名称作为我在行为 Space 中的输出之一进行报告时,csv 文件中的结果是 table,没有键,它只有一个数字其中:{{table: 1296}}。所以,我想知道如何更改此变量才能拥有所有值。

如果您乐于在事后用 R 或其他东西做一些 post 处理,那么 table:to-list 可能就是您所需要的。例如,使用一个简单的设置示例,如:

extensions [ table ]

globals [ example-table ]

turtles-own [ turtle-list ]

to setup
  ca
  crt 3 [
    set turtle-list ( list random 10 one-of [ "A" "B" "C" ] random 100 )
  ]
  set example-table table:make
  foreach sort turtles [
    t ->
    table:put example-table ( word "turtle_" [who] of t ) [turtle-list] of t
  ]
  reset-ticks
end

还有一个 to-report 来清理每个 table 项目,这样第一个项目就是键,所有其他项目都是列表中的项目:

to-report easier-read-table [ table_ ]
  let out []
  foreach table:to-list table_ [ i -> 
    set out lput ( reduce sentence i ) out
  ]
  report out
end

您可以设置您的 BehaviorSpace 实验,让您的一位记者就是那个记者,例如:

要获取 .csv 文件,例如:

记者专栏输出列表的列表,您可以按照自己的喜好进行处理。

但是,我可能不会为此使用基本的 BehaviorSpace 输出,而是在实验中调用手动 table 输出过程。例如,使用 csv 扩展来制作此 output-table 过程:

to output-table [ filename_ table_ ]
  let out [["key" "col1" "col2" "col3"]]
  foreach table:to-list table_ [ i ->
    set out lput ( reduce sentence i ) out
  ]
  csv:to-file filename_ out
end

这会输出更易于分析的 table 如果您不太舒服 table 清理列表列表的输出,据我所知,您会得到从行为空间输出。因此,您可以在实验结束时调用它,例如:

获得table赞:

这样比较好处理。如果需要,您显然可以修改它以更频繁地报告,例如:

这将在实验的每个刻度输出一个 table(您也可以在代码中执行此操作以使其更容易一些)。