我是一个Java新手。我知道Java有一个来自高斯分布的随机数生成器函数。正如我从其他问题中知道的那样,Java的内置随机生成器并不好,因为它没有考虑我最需要的高斯分布的输入均值和标准差。我正在研究遗传算法。出于突变的目的,我必须从高斯分布,Cauchy分布和Levy分布生成随机数。发电机功能必须输入该分配的Scale Parameter和Location Parameter。我怎样才能做到这一点?从Cauchy随机数发电
1
A
回答
0
Java没有那些内置的。你将不得不让你自己的功能,或找到一个第三方库。
0
CauchyDistribution从包 org.apache.commons.math3.distribution似乎是你想要的。
Java没有内置的东西。
如果您反对该包中的jar文件膨胀,则必须自行滚动,类似于this example for Gaussian。
0
Eventhough的问题是有点老,我会尽量回答,因为我一直在寻找同样的事情,它可以帮助旁边的人:
要实现一个RNG你需要了解以下内容的任意分布:
- 在[0,1)范围生成均匀分布的数字是没有问题的
- 一个distributionfunction的推导的分布密度(例如高斯钟形曲线)
- 的distributionfunctio n在-Infinity上是(或多或少)0,在Infinity上是1。在这两个极端之间,它会单调增加。
现在,你必须以下列方式使用这些东西(至少为1和3):
- 计算分布函数(集成密度)
- 解决这个方程X
- 在结果函数中传递一个均匀分布的数字作为参数以获得适当分布的结果。
实施例:
柯西分布:
F(X)= 1 /(X 2 + 1)/ PI
- 分布函数:
Y = F(x)= arctan(x)/ Pi + 0.5(有必要加0.5得到R→[0,1]函数
- 解决对于x
X = G(Y)= TAN(的y 0。5)* PI(G是逆到F - 通常˚F^( - 1)
现在只是把所生成的双如在函数y:
返回Math.tan(rand.nextDouble ()-0.5)* Math.Pi;
对于规模和位置参数,你只需要做到以下几点:
X是高斯(意为:N(0,1))的分布式随机变量
平均数(A * X + B)= A *平均值(X)+ B VAR(A * X + B)=A²* VAR(X)
一个是你的尺度参数,b为你的位置参数。 因此,生成标准高斯分布式变量并与sqrt(比例)相乘并添加位置参数。