我的工作是使用正态概率分布生成城市居民。
城市数量,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()??
}
感谢您的帮助
答案 0 :(得分:0)
一种(非效率,但美观的数学IMO)方法是:
对于每个人(重复15M次),选择均匀分布 他的城市。
它将为您提供所有城市中1500万人的总和,并且根据central limit theorem - 您将在每个城市接近正常分布,因为每个城市基本上是Bernoulli trials的总和p=1/3000
,超过1500万次试验。
答案 1 :(得分:0)
方法的草图:
请注意,由于四舍五入,这在实践中很难实现。因此,总人口可能略高于/低于所需的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,以获得更好的随机分布...