Netlo go Проблема с очисткой BehaviorSpace - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь варьировать глобальные переменные - «опыт» и «участие» от 10 до 90, используя BehaviorSpace. Затем я использую эти переменные для установки значений индивидуального участия черепахи (cit-inv) и опыта (cit-inv). r / NetLo go - проблема с разверткой BehaviorSpace - нужна помощь!

Однако, когда я запускаю BehaviorSpace, значения не меняются, и глобальные переменные остаются на 0 для 81 запуска. ie: cit-inv и cit-exp просто случайным образом меняются от 0 до 10 в зависимости от случайной части кода.

Я рад поделиться другими фрагментами кода или добавить больше контекста, если это будет Помогите. Думаю, стоит отметить, что я явно не присваиваю никаких значений параметрам «опыт» или «участие» в основной части кода.

Спасибо за чтение и любые предложения!

В поведенческое пространство:

["experience" [10 10 90]]
["involvement" [10 10 90]]

Основной код:

globals [rain involvement experience]

to setup-involvement-expertise-links

  ask ssystems [
    set cit-exp ((experience) + random(10))
    set cit-inv ((involvement)+ random(10))]
  ask lim-ssystems [
    set cit-exp ((experience) + random(10))
    set cit-inv ((involvement)+ random(10))]

Ответы [ 2 ]

3 голосов
/ 06 августа 2020

Я подумал, что это может быть ошибка после ответа Люка C, но, изучив его, я думаю, что нашел вероятную причину.

В BehaviorSpace обычно запускают setup для Команды установки эксперимента. В setup большинство моделей обычно используют clear-all. Но clear-all, согласно документации , также будет clear-globals, поэтому значение очищается перед запуском. Это не проблема для переменных на основе виджетов (слайдер, ввод), потому что на них не влияет clear-all. Итак, я думаю, вот что происходит.

Итак, порядок событий, когда BehviorSpace запускает такой эксперимент:

  • BehaviorSpace готовится к запуску итерации и устанавливает глобальные переменные значения .
  • BehaviorSpace запускает процедуру setup.
  • Процедура setup setup запускает clear-all, которая сбрасывает значения глобальных переменных на 0.
  • Затем запуск идет как обычно, но с глобальным значением 0.

Одним из способов решения проблемы было бы разделение clear-all на составляющие части, а затем только clear-globals, если BehaviorSpace не запущен. . Я запустил приведенный ниже пример, чтобы убедиться, что я был прав в отношении причины, и запуск эксперимента, изменяющий speed с setup-succeed, правильно изменил значение глобального.

globals [ speed ]

to setup-fail
  ; when run all globals are cleared, including the values
  ; set by BehaviorSpace
  clear-all
  create-turtles 100
end

to setup-succeed
  ; everything `clear-all` does, but do not `clear-globals` for BehaviorSpace
  ; note if you had globals you *did* want to clear that are not
  ; going to be controlled by BehaviorSpace, you'd also have to 
  ; handle those manually
  if behaviorspace-run-number = 0 [ clear-globals ]
  clear-ticks
  clear-turtles
  clear-patches
  clear-drawing
  clear-all-plots
  clear-output
  create-turtles 100
end

to go
  ask turtles [ fd speed ]
end

Это немного проще, чем обходной путь, предложенный Люком C с виджетами ввода, так что это тоже отличный способ go, но я хотел представить альтернативу и объяснить, что происходит.

2 голосов
/ 06 августа 2020

Изменить: Оставить это в качестве возможной альтернативы, но см. Ответ Джаспера для объяснения фактической причины этой проблемы вместе с более правильным подходом, а не обходным путем.

Я сталкивался с этим раньше, и хотя документация BehaviorSpace говорит

Настройки могут быть ползунками, переключателями, переключателями или любой глобальной переменной в вашем модель

Мне никогда не удавалось заставить global переменные, как определено на вкладке «Код», работать в BehaviorSpace. Моим решением для быстрого исправления было бы просто добавить два виджета ввода в ваш интерфейс, чтобы объявить интересующие вас переменные и удалить объявление со вкладки «Код». Это позволило мне получить от 0 выходов к ожидаемым с помощью этого кода игрушки:

globals [rain ]

to setup
  ca 
  
  reset-ticks
end

to go
  tick
end

enter image description here

введите описание изображения здесь

...