首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Turtle过程中的计算性能问题

Turtle过程中的计算性能问题
EN

Stack Overflow用户
提问于 2014-01-18 02:48:16
回答 2查看 110关注 0票数 1

我正在构建一种“蜜蜂”模型,其中蜜蜂是海龟代理,而蜂蜜是斑块特定变量。在我的模型中,根据特定的分布,每个补丁都被分配了一个介于1-100之间的“蜜糖”值。

该模型开始时,蜜蜂只能从蜂蜜= 1的花朵中收集蜂蜜,然后它们会收到1个单位的蜂蜜作为回报。在蜜蜂可以“锁定”蜂蜜= 2的花朵之前,它们需要占用(即一只蜜蜂在花朵上)所有蜂蜜= 1的花朵的X%。例如,我可能要求蜜蜂达到80%的占用率,这意味着如果总共有10朵蜂蜜=1的花,那么在允许蜜蜂开始寻找/瞄准蜂蜜= 2的花朵之前,蜜蜂需要占用其中的8朵花。当每只蜜蜂单独行动时,%的占有率值将会改变。

我在计算入住率时遇到了性能问题。理想情况下,计算是在turtle过程中更新的,因为它需要应用于循环中的每个turtle。这是我目前需要找到的变量的值,在允许每个蜜蜂执行操作之前,我需要设置当前的占用百分比:

代码语言:javascript
复制
ask bees
[           
;; set up variable based on ratio of number of turtles occupying target patch size against total number target patch size
;; note -- don't do this in one step to avoid divide by 0
let patch-count-current (count patches with [honey-here = bee-honey-target-size])
;; don't want number of bees, want number of unique patches
let patch-target-occupy count patches with [ (count bees-here > 0) and (honey-here = bee-honey-target-size) ] 
...

在代码的后面,在检查了patch-count-current不是0之后,我通过patch-target-occupy / patch-count-current找到了我的%占用率

事实证明,这对我的处理器性能是一个非常昂贵的打击。特别是当我的蜜蜂数量增加时,这在我的模型中是指数级的。

有没有一种更好的方法可以让我在每次循环迭代时都不花费这么多的处理器?

谢谢!

-dp

EN

回答 2

Stack Overflow用户

发布于 2014-01-27 11:27:21

考虑到您对StephenGuerin的响应,您可以使用全局变量手动跟踪计数。如果一次只有一个bee-honey-target-size,这很简单。只需创建一个patch-count-current全局和一个patch-target-occupy。然后,随着情况的变化,增加或减少它们。

沙堆模型(来自模型库)使用此技术来跟踪沙子的总量,而不必迭代补丁。了解如何使用total全局变量。

如果需要一次跟踪所有bee-honey-target-size的计数,可以将计数列表存储在一个全局变量中,其中列表的索引对应于一个值bee-honey-target-size。不幸的是,这要混乱得多,所以你必须编写helper函数。

如果有任何需要澄清的地方,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2014-01-19 04:36:07

百分比占用是组的属性,每个模拟步骤只需要计算一次。您的性能影响是由于计算模拟中每个蜜蜂的占用率。对于给定的“目标蜂蜜”,百分比占有率的计算如下所示:

代码语言:javascript
复制
to-report calc-occupancy [target-honey]
   report (sum [count turtles-here] of patches with [honey-here = target-honey]) / count turtles
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21193553

复制
相关文章

相似问题

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