如何生成人(数字) - 正态概率分布

时间:2013-10-15 09:00:31

标签: java gaussian

我的工作是使用正态概率分布生成城市居民。

城市数量,3000,人口15,000 000

(在JAVA中)

    int people = 15000000;
    int[] arrayofcity = new int[3000]
    for (int i = 0; i < arrayofcity.length; i++) {
            //how to generate people to the towns of total
            //nextGaussian()??

    }

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

一种(非效率,但美观的数学IMO)方法是:

  

对于每个人(重复15M次),选择均匀分布   他的城市。

它将为您提供所有城市中1500万人的总和,并且根据central limit theorem - 您将在每个城市接近正常分布,因为每个城市基本上是Bernoulli trials的总和p=1/3000,超过1500万次试验。

答案 1 :(得分:0)

方法的草图:

  • 使用Random#nextGaussian()为每个城市创建0到0之间的值。
  • 计算所有这些X值的总和。叫它S。
  • 对于每个城市,取其值X并除以S.将此结果乘以总人口(15 000 000)。这就是有多少人住在这个城市。

请注意,由于四舍五入,这在实践中很难实现。因此,总人口可能略高于/低于所需的15 000 000,因此需要一些方法来增加/删除额外的人。

答案 2 :(得分:0)

尝试类似这样的事情。效率不高,因为每2个值的分布均被平均/取消。

int people = 15000000;
    int[] arrayofcity = new int[3000];
    int sharedSpread=people/3000;                 // sharedSpread= avg population
    for (int i = 0; i < arrayofcity.length; i++) {

        if(i%2!=0)
          arrayOfCity[i] = sharedSpread + (sharedSpread-arrayOfCity[i-1]);
        else
            {
             Random r = new Random();
             int val = Random.nextInt();
             arrayOfCity[i] = val%sharedSpread ;   

            }

    }

PS:这不是确切的代码,但这可以显示如何解决问题。您可以更改分发的频率。我们可以将它改为4而不是2,以获得更好的随机分布...