Как сохранить глобальную переменную в табличном формате из NetLogo Behaviorspace - PullRequest
0 голосов
/ 14 декабря 2018

Я написал довольно сложный код для моей ПРО (634 агента имеют взаимодействия, каждый из которых имеет разные переменные, некоторые из которых являются списками с несколькими значениями, которые обновляются каждый тик).Поскольку мне нужно сохранить обновленные значения для всех агентов, я определил глобальную переменную с помощью таблицы: make.Эта таблица имеет 634 ключа (каждый ключ для одного агента), и каждый ключ имеет список этих значений (из этой переменной списка, принадлежащей агентам) для соответствующего агента.Но когда я использую имя этой таблицы для отчета в качестве одного из моих выходных данных в Поведенческом пространстве, результатом в файле CSV будет таблица без ключей, и в ней будет только номер: {{table: 1296}}.Итак, мне было интересно, как я могу изменить эту переменную, чтобы иметь все значения.

1 Ответ

0 голосов
/ 15 декабря 2018

Если вы счастливы выполнить некоторую постобработку с R или что-то после факта, тогда 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 для очистки каждого элемента таблицы таким образом, что первый элемент является ключом, а все остальные элементы являются элементами в списке:

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 таким образом, чтобы один из ваших репортеров был таким репортером, что-то вроде:

enter image description here

Чтобы получитьфайл .csv, например:

enter image description here

Где столбец репортера выводит список списков, которые вы можете обрабатывать так, как вам нравится.

Однако , я бы, вероятно, не использовал для этого базовый вывод BehaviorSpace, а вместо этого вызвал бы в эксперименте вызов для вызова процедуры вывода таблицы вручную.Например, используя расширение 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

Это выводит гораздо более готовую к анализу таблицу, если вам неудобнее очищать вывод списка спискасписки, которые, насколько я знаю, это то, что вы получите из вывода BehaviorSpace.Таким образом, вы можете позвонить в конце эксперимента, например:

enter image description here

Чтобы получить таблицу типа:

enter image description here

С этим немного приятнее иметь дело.Очевидно, вы можете изменить это, чтобы при необходимости чаще сообщать, например:

enter image description here

, который будет выводить таблицу при каждом тике эксперимента (вы можететакже сделайте это в своем коде, чтобы сделать его немного легче).

...