创建一个随机数的集群

时间:2014-01-27 12:47:04

标签: c random montecarlo

我正在编码以模拟解决方案环境中球体的增长。我这样做。

  1. 创建空间并将细胞作为种子放在中心。

    pSpace = new char[nXRange * nYRange * nZRange];
    for (int i = 0; i < nZRange; i++)
    for (int j = 0; j < nYRange; j++)
    for (int k = 0; k < nXRange; k++)
      pSpace[i * nXRange * nYRange + j * nXRange + k] = 0;
    pSpace[nXRange * nYRange * nZRange / 2 + nXRange * nYRange / 2 + nXRange/2] = 1;
    
  2. 在解决方案中创建一个单元格。单元格的位置由随机数创建。

    int nXPostion = (int)(((float)rand()/RAND_MAX) * (nXRange - 1));
    int nYPostion = (int)(((float)rand()/RAND_MAX) * (nYRange - 1));
    int nZPostion = (int)(((float)rand()/RAND_MAX) * (nZRange - 1));
    
  3. 计算创建单元格的可能性的变化。新单元格的邻居被检查为左(L),右(R),前(F),后(B),顶(T) )和Bottom(B *)。如果新单元的邻居是图中L的旧单元,则潜在的变化是PA2A,否则,如果它不是旧单元而是解决方案,则为R,F,B,T和B * in这个数字,它是PA2S。新单元的创建改变了PCREATE的潜力。所以,潜力的变化是

    fPotential = PCREATE + P(Left) + p(Right) + p(Front) + p(Behind) + p(Top) + p(Bottom);
    
  4. 使用随机数比较潜在的变化如下。如果随机数大于潜在变化的指数,则创建新单元格,否则取消。

  5. 理论上,球体会在种子周围生长。但是,在我的实验中,簇的形状是不规则的。附加的图像是50000个细胞的簇。任何人都可以给我一些评论。它与随机数的生成有关吗?感谢。

    a cluster created around a seed with random number

    XY plane of cluster

    XZ plane of cluster

    Interplate in process 3

1 个答案:

答案 0 :(得分:2)

我有两个想法。

首先:您使用的直线网格带来了难度。也就是说,如果不深入研究您的代码,沿x轴,y轴或z轴的增长可能会以与沿对角轴增长不同的速率进行。

这个问题很难解决。如果你允许d-26连接(中央单元连接到它周围所有单元的立方体),那么你如何解释(稍微)更长距离到对角线单元?如果你只允许沿x轴,y轴和z轴增长,你如何解释这样一个事实,即对角线方向的单元现在需要更长的时间才能达到它应该的程度?

这可能是一些模糊性的原因。

第二:现在我们正在使用“它看起来不规则”的指标。但它真的吗?我们需要的是对它的不规则程度与我们预期的不规则程度进行的良好统计检验。当然,你不会期望blob的边缘是完全球形的,因为这毕竟是一个随机的过程。