我正在尝试在遗传算法中实现非均匀概率分布。
在遗传程序的实施中,我有一个实验,它有 3 个结果,每个结果都有不同的概率。假设一个结果的概率是 0.85,另一个是 0.01,最后一个是 0.14?
PS:我最近才知道它被称为概率的非均匀分布。我正在用 Java 实现它,任何人都可以说出非均匀概率背后的理论。分发以及实现它的任何 Java 包。
如果您需要有关该问题的更多信息,请随时问我!
提前致谢!
我正在尝试在遗传算法中实现非均匀概率分布。
在遗传程序的实施中,我有一个实验,它有 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.85、0.01 和 0.14 的概率返回数字 0、1 和 2。
至于非均匀概率分布的理论,你可以从这篇关于概率分布的维基百科文章开始;请特别注意页面底部的可折叠部分。你会发现有几十个具有不同性质的非均匀分布(连续和离散)。
在您的特定情况下,最好在 [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/random/package-summary.html