我正在尝试使用BehaviorSpace改变全局变量--“经验”和“参与度”,从10到90。然后,我使用这些变量来设置单个海龟参与度(cit-inv)和经验值(cit-inv)。r/NetLogo - BehaviorSpace清除问题-需要帮助!
然而,当我运行BehaviorSpace时,它不会循环遍历这些值,并且全局变量在81次运行中保持为0。即: 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))]发布于 2020-08-07 03:49:24
在Luke C的回答之后,我认为这可能是一个bug,但在调查它的过程中,我认为我找到了可能的原因。
使用BehaviorSpace时,通常会针对实验的设置命令运行setup。在setup中,大多数模型通常会执行clear-all。但是clear-all,per the documentation,也将是clear-globals,所以这个值在运行之前就被清除了。对于基于小部件(滑块、输入)的变量来说,这不是问题,因为这些变量不受clear-all的影响。所以我认为这就是正在发生的事情。
因此,当BehviorSpace运行这样的实验时,事件的顺序是:
clear-all,这会将全局变量的值重置为正常运行,但使用0全局值。一种解决方法是将clear-all拆分成组件片段,然后在不运行BehaviorSpace时仅使用clear-globals。我运行了下面的示例,以确保我对原因的理解是正确的,并且使用setup-succeed运行varying speed的实验确实正确地改变了全局的值。
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这并不比Luke C提出的使用输入小部件的变通方法容易多少,所以这也是一种很好的方法,但我想介绍另一种方法并解释发生了什么。
发布于 2020-08-07 00:56:15
编辑:将此作为一种可能的替代方案,但请参阅Jasper的答案,以了解此问题的实际原因以及更合适的方法,而不是解决方法。
我以前遇到过这种情况,虽然BehaviorSpace documentation说
设置可以是模型中的滑块、开关、选择器或任何全局变量
我从来没能让代码选项卡中定义的global变量在BehaviorSpace中工作。我的快速解决方案是只向您的界面添加两个输入小部件来声明您感兴趣的变量,并从Code选项卡中删除声明。这让我从0输出到这个玩具代码的预期:
globals [rain ]
to setup
ca
reset-ticks
end
to go
tick
end


https://stackoverflow.com/questions/63286878
复制相似问题