首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个群体随机分成6个

将一个群体随机分成6个
EN

Stack Overflow用户
提问于 2020-08-01 13:58:39
回答 1查看 105关注 0票数 3

我在研究三角网格上元胞自动机粒子扩散的算法。这意味着每个细胞有6个邻居。

每个细胞都有一定数量的粒子。

在每一次迭代中,每个细胞都将其粒子分散到相邻的细胞中。

我很难有效地做到这一点,因为有数十万个细胞(有时是几百万个),每个细胞中都有大量的粒子n (n >> 100)。

,我在寻找一种算法,把一个数字随机分成6部分,

一种有效但效率低下的办法:

从区间(0,6)上的均匀分布中产生随机数,就像单元中有粒子一样。

  • 如果数字在(0,1 )中:将粒子扩展到相邻的1。
  • 如果数字在(1,2 )中:将粒子分散到相邻的2。
  • 如果数字在(2,3 )中:将粒子分散到相邻的3。
  • 等等。

这适用于“小”粒子数(n < 50),但得到非常计算密集。

我的理论方法:

调用要分配的粒子数n。

从均值为0和方差为1的正态分布(高斯)中生成5个随机数。将这些数字称为r0、r1、r2、r3、r4

代码语言:javascript
复制
r0 = n/2 + r0*(n/4) // this transforms r0 to a random number drawn from a normal distribution with mean n/2 and variance n/2

r0有效地将n个粒子的粒子数分成两组,每个组分配给三个邻域。大小r0,n- r0大小的

代码语言:javascript
复制
r1 = r0/3 + r0*(r0/9) // this transforms r1 to a random number drawn from a normal distribution with mean r0/3 and variance r0/3

r1有效地将r0粒子的粒子数分成两组,一组分配给单个邻居,另一组分配给两个邻居。前者为size r1,后者为size r0 - r1

代码语言:javascript
复制
r2 = (r0 - r1)/2 + r2*((r0 - r1)/4) // this transforms r2 to a random number drawn from a normal distribution with mean (r0 - r1)/2 and variance (r0 - r1)/2

r2有效地将(r0 - r1)粒子的粒子数分成两组,每一组分配给一个单独的邻居。

数字r0、r1和r2现在应该从n个粒子的总体中分离出3个随机部分,每个部分按正态分布。

以同样的方式继续,将人口(n - r0)分成三部分。

这种方法对我来说似乎是有意义的,但我相信我的差异可能离这里很远,所以我得到了奇怪的结果,有太多的粒子被“分离”给一组邻居,而没有一个被留给其他的邻居。这就引入了奇怪的各向异性效应。

背景:许多均匀分布的组合被高斯分布很好地近似。该算法是试图修改Bastien在“元胞自动机物理系统建模”第5.7章(第213页)中描述的一种算法。

如果能在我的方法中看到一个错误或一个不同的、同样有效的错误,将非常感谢。

我还没有指定im编码语言,因为我只是在寻找一般的算法。我正在使用java (Process3.5),但是如果您可以提供任何语言,这对我来说是可以的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-01 16:13:44

据我所知,从文献回顾来看,最先进的算法是Brown和Bromberg算法(从1983年开始,“从多项式分布生成随机变量的有效两阶段程序”),它专门处理这样的问题。

对于一些常数c,样本6个独立的泊松变量与速率cn。如果它们的和大于n,则重新绘制它们,直到它们的和小于或等于n。按照这些变量的要求传播粒子,并使用低效的方法传播其余的粒子。c应该在1/6的大致范围内;太高,我们绘制变量的次数太多,太低,我们为效率低下的算法做了太多的工作。

由于您需要大量的样本在整个模拟的寿命,我们不需要太努力,以减少设置的成本,以绘制泊松变量。对于每个可能的n,与别名法一起设置,在结果不超过n的情况下,用速率cn对截断的泊松分布进行采样。

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

https://stackoverflow.com/questions/63206016

复制
相关文章

相似问题

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