我试图在遗传算法中实施不均匀的概率分布。

在实施遗传程序中,我有一个实验,该实验具有3个结果,每个结果都有不同的概率。假设一个结果的概率是0.85,另一个结果是0.01,最后一个是0.14?

PS:我最近知道它被称为概率的不均匀分布。我正在Java实施它,任何人都可以告诉非均匀概率背后的理论吗?分发以及任何实施它的Java软件包。

随时问我知道,您是否需要有关问题的更多信息!

提前致谢!

有帮助吗?

解决方案

对于简单的离散分发,您可以编写一个采样器,该采样器将使用累积概率以所需的频率返回您的结果。

Random r = new Random();
double v = r.nextDouble();

if (v <= 0.85) { return 0; }
if (v <= 0.86) { return 1; }
return 2;

这将返回数字0、1和2,概率为0.85、0.01和0.14。

至于关于不均匀概率分布的理论,您可以从有关Wikipedia文章开始 概率分布;特别说明页面底部的可折叠部分。您会发现有数十个具有不同属性的非均匀分布(连续和离散)。

其他提示

在您的特殊情况下,最好在[0中获得一个随机值; 100)使用均匀分布,然后检查其属于什么范围:[0; 85),[85; 99),[99,100)

根据您的描述,在我看来,您正在谈论健身比例的选择(也称为轮盘赌轮选择)。
http://en.wikipedia.org/wiki/roulette-wheel_selection

我认为Nailxx的答案是一个非常紧凑的描述,您需要做什么。

也可以看看轮盘赌在遗传算法中的选择
轮盘选择算法

如果我错了,这里有一些库,您可能会发现有用:
http://www.ee.ucl.ac.uk/~mflanaga/java/stat.html
http://commons.apache.org/math/apidocs/org/apache/commons/math/math/random/package-summary.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top