Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Netlogo中是否有更有效的方法生成随机二项式数?_Netlogo - Fatal编程技术网

在Netlogo中是否有更有效的方法生成随机二项式数?

在Netlogo中是否有更有效的方法生成随机二项式数?,netlogo,Netlogo,目前,我的模型正在使用以下代码片段生成随机二项式数,实际上是lynchpin使整个过程正常工作,并且被称为最频繁的代码: to-report random-binomial [n p] report sum n-values n [ifelse-value (p > random-float 1) [1] [0]] end 但是,如果n变得非常大(例如10000000),此函数不会很快运行。基于一个旧线程,我正在尝试一个可能更有效的解决方案: to-report random-bi

目前,我的模型正在使用以下代码片段生成随机二项式数,实际上是lynchpin使整个过程正常工作,并且被称为最频繁的代码:

to-report random-binomial [n p]
  report sum n-values n [ifelse-value (p > random-float 1) [1] [0]] 
end
但是,如果n变得非常大(例如10000000),此函数不会很快运行。基于一个旧线程,我正在尝试一个可能更有效的解决方案:

to-report random-binomial [n p]
  report length filter [i -> i < p] n-values n [random-float 1]
end
报告随机二项[NP]
报告长度过滤器[i->i

自然地,由于这种情况的发生频率,任何小的减速都会在模型的其余部分滚雪球。有没有人知道更好的方法来执行这种计算,特别是当n变得非常大时?

一般来说,这样的问题(如何有效地实现一个已知的函数)的答案是在数值方法文献中寻找一种经过验证的真实算法。经典的参考是“C中的数字配方”。我相信稍加搜索就会找到一种方法(例如,何时以及如何使用正态分布作为近似值)。

一般来说,这样的问题(如何有效地实现一个众所周知的函数)的答案是在数值方法文献中寻找一种经过验证的真实算法。经典的参考是“C中的数字配方”。我相信只要稍加搜索就会找到一种方法(例如,何时以及如何使用正态分布作为近似值)。

做大量愚蠢的事情总是很昂贵的。在应用程序中使用精确的二项分布是否至关重要?除非你的成功概率非常小,否则大多数人都会在低于1000万的样本量下转换为正态分布。我们在实验室里仔细考虑了这个问题,得出了类似的结论,正态分布或仅使用p作为比例可能是有效解决此问题的唯一方法。我认为这不是NetLogo的问题,但如果您认为NetLogo在大量随机抽取时的效率低于(比如)R,则可以使用R扩展来进行二项抽取。然而,我刚刚做了一次1亿次的50%测试,你的NetLogo代码和R中的sum(rbinom(100000000,1.5))
之间的任何差异都很小,所以R扩展的开销可能不值得。做大量愚蠢的事情总是很昂贵的。在应用程序中使用精确的二项分布是否至关重要?除非你的成功概率非常小,否则大多数人都会在低于1000万的样本量下转换为正态分布。我们在实验室里仔细考虑了这个问题,得出了类似的结论,正态分布或仅使用p作为比例可能是有效解决此问题的唯一方法。我认为这不是NetLogo的问题,但如果您认为NetLogo在大量随机抽取时的效率低于(比如)R,则可以使用R扩展来进行二项抽取。然而,我刚刚做了一次1亿次的50%测试,你的NetLogo代码和R中的
sum(rbinom(100000000,1.5))
之间的任何差异都很小,因此R扩展的开销可能不值得