2

我正在尝试在遗传算法中实现非均匀概率分布。

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

PS:我最近才知道它被称为概率的非均匀分布。我正在用 Java 实现它,任何人都可以说出非均匀概率背后的理论。分发以及实现它的任何 Java 包。

如果您需要有关该问题的更多信息,请随时问我!

提前致谢!

4

3 回答 3

9

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

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

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

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

至于非均匀概率分布的理论,你可以从这篇关于概率分布的维基百科文章开始;请特别注意页面底部的可折叠部分。你会发现有几十个具有不同性质的非均匀分布(连续和离散)。

于 2010-06-22T16:09:03.073 回答
4

在您的特定情况下,最好在 [0; 100)使用均匀分布,然后检查它落在什么范围内:[0; 85), [85;99), [99, 100)

于 2010-06-22T16:09:24.453 回答
2

根据您的描述,在我看来,您正在谈论健身比例选择(也称为轮盘赌选择)。
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/random/package-summary.html

于 2010-06-22T18:25:02.847 回答