1

我正在尝试使用 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))]
4

2 回答 2

3

在卢克 C 的回答之后,我认为这可能是一个错误,但在调查它时,我认为我找到了可能的原因。

使用 BehaviorSpace,运行实验setup设置命令是很常见的。在setup,大多数型号通常都会这样做clear-all。但是clear-all根据文档,也将clear-globals在运行前清除该值。这对于基于小部件的(滑块、输入)变量来说不是问题,因为它们不受clear-all. 所以我认为这就是正在发生的事情。

所以当 BehviorSpace 进行这样的实验时,事件的顺序是:

  • BehaviorSpace 准备运行迭代,并设置全局值变量。
  • BehaviorSpace 运行该setup过程。
  • 设置setup过程运行clear-all,它将全局变量的值重置为0
  • 然后运行正常,但具有0全局值。

一种解决方法是将其拆分clear-all为多个组件,然后仅clear-globals在不运行 BehaviorSpace 时进行。我运行了下面的示例以确保我对原因的判断是正确的,并且实验运行的变化确实正确地改变speedsetup-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

这并不比 Luke C 提出的使用输入小部件的解决方法容易得多,所以这也是一个很好的方法,但我想提出替代方案并解释正在发生的事情。

于 2020-08-06T19:49:24.380 回答
2

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

我以前遇到过这种情况,尽管BehaviorSpace 文档

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

我从来没有能够使global变量,如代码选项卡中定义的那样,在 BehaviorSpace 中工作。我的快速修复解决方案是将两个 Input 小部件添加到您的界面以声明您感兴趣的变量并从您的代码选项卡中删除该声明。使用这个玩具代码,这让我从 0 输出到预期:

globals [rain ]

to setup
  ca 
  
  reset-ticks
end

to go
  tick
end

在此处输入图像描述

在此处输入图像描述

于 2020-08-06T16:56:15.103 回答