Я подумал, что это может быть ошибка после ответа Люка 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, но я хотел представить альтернативу и объяснить, что происходит.