用标准偏差生成随机数

时间:2015-12-18 19:54:21

标签: java random

我正在尝试使用AI进行极其简单的模拟游戏。 游戏将包含具有一定金额的人(具有随机属性的对象的实例)。

我喜欢分配财富"在统计上有效。 如何生成符合标准差的随机数(金钱)(例如平均值:50,标准差:10),从而更可能生成更接近均值的值?

2 个答案:

答案 0 :(得分:3)

我认为你正专注于问题的错误结局。您需要做的第一件事是确定您想要用于模拟财富的分配。正态分布的平均值为50,标准差为10,名义上满足您的需求,但在[32.67949,67.32051]范围内均匀分布也是如此。有许多统计分布可以具有相同的均值和标准差,但形状完全不同,它的形状将决定分布的有效性。

收入和财富的分布非常skewed - 它们的界限低于零,而少数人与我们其他人相比有如此大的数量,他们将平均值向上拖动了相当明显的数量。因此,您想要使用天真的分布选择,例如均匀或高斯,或任何其他对称或可以浸入负面区域的选择。使用指数会更加现实,但仍然可能不足以捕捉我们在现实世界中看到的实际财富分配。

选择分发版后,有许多软件库或信息来源可帮助您从该分发中生成值。

答案 1 :(得分:0)

生成随机数是一个很大的话题。但是既然你说这是一个简单的模拟,这里有一个简单的方法:

生成均匀分布在(0,1)上的几个(说n)个随机数。内置函数Math.random可以提供这些数字。

加上这些数字。总和的分布大致正态,均值= n/2,标准差= sqrt(n)/sqrt(12)。因此,如果你减去n/2,然后除以sqrt(n)/sqrt(12),你就会得到一些近似正常的东西,平均值为0,标准差为1.显然,如果你选择n = 12,你只需要do从总和中减去6,你就完成了。

现在获得任何其他均值和标准偏差,只需乘以您想要的标准差,然后添加您想要的均值。

还有很多其他方法可以解决,但这可能是最简单的方法。鉴于您对问题的描述,我认为没问题。