首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netlogo BehaviorSpace扫描问题

Netlogo BehaviorSpace扫描问题
EN

Stack Overflow用户
提问于 2020-08-06 23:27:49
回答 2查看 111关注 0票数 1

我正在尝试使用BehaviorSpace改变全局变量--“经验”和“参与度”,从10到90。然后,我使用这些变量来设置单个海龟参与度(cit-inv)和经验值(cit-inv)。r/NetLogo - BehaviorSpace清除问题-需要帮助!

然而,当我运行BehaviorSpace时,它不会循环遍历这些值,并且全局变量在81次运行中保持为0。即: cit-inv和cit-exp只是根据代码的随机部分在0- 10之间随机变化。

我很乐意分享其他代码片段或添加更多上下文,如果有帮助的话。我想值得注意的是,我没有明确地将代码主体中的“体验”或“参与”赋值。

感谢您的阅读和任何建议!

在行为空间中:

代码语言:javascript
复制
["experience" [10 10 90]]
["involvement" [10 10 90]]

主代码:

代码语言:javascript
复制
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))]
EN

回答 2

Stack Overflow用户

发布于 2020-08-07 03:49:24

在Luke C的回答之后,我认为这可能是一个bug,但在调查它的过程中,我认为我找到了可能的原因。

使用BehaviorSpace时,通常会针对实验的设置命令运行setup。在setup中,大多数模型通常会执行clear-all。但是clear-allper the documentation,也将是clear-globals,所以这个值在运行之前就被清除了。对于基于小部件(滑块、输入)的变量来说,这不是问题,因为这些变量不受clear-all的影响。所以我认为这就是正在发生的事情。

因此,当BehviorSpace运行这样的实验时,事件的顺序是:

  • BehaviorSpace准备运行迭代,并设置全局值variables.
  • BehaviorSpace运行procedure.
  • The设置和过程运行clear-all,这会将全局变量的值重置为正常运行,但使用0全局值。

一种解决方法是将clear-all拆分成组件片段,然后在不运行BehaviorSpace时仅使用clear-globals。我运行了下面的示例,以确保我对原因的理解是正确的,并且使用setup-succeed运行varying speed的实验确实正确地改变了全局的值。

代码语言:javascript
复制
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提出的使用输入小部件的变通方法容易多少,所以这也是一种很好的方法,但我想介绍另一种方法并解释发生了什么。

票数 3
EN

Stack Overflow用户

发布于 2020-08-07 00:56:15

编辑:将此作为一种可能的替代方案,但请参阅Jasper的答案,以了解此问题的实际原因以及更合适的方法,而不是解决方法。

我以前遇到过这种情况,虽然BehaviorSpace documentation

设置可以是模型中的滑块、开关、选择器或任何全局变量

我从来没能让代码选项卡中定义的global变量在BehaviorSpace中工作。我的快速解决方案是只向您的界面添加两个输入小部件来声明您感兴趣的变量,并从Code选项卡中删除声明。这让我从0输出到这个玩具代码的预期:

代码语言:javascript
复制
globals [rain ]

to setup
  ca 
  
  reset-ticks
end

to go
  tick
end

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63286878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档