我试图在遗传算法中实现非均匀概率分布。
在遗传程序的实施中,我有一个实验,其中有3个结果,每个结果都有不同的概率。比方说,一个结果的可能性是0.85,另一个是0.01,最后一个是0.14?
P.S:我最近才知道它被称为概率的非均匀分布。我用Java实现它,任何人都能说出非均匀概率背后的理论。分销与发展还有任何实现它的Java包。如果您需要有关此问题的更多信息,请随时与我联系!
提前致谢!
答案 0 :(得分:9)
对于简单的离散分布,您可以编写一个采样器,它将使用累积概率以所需频率返回结果。
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。
就非均匀概率分布的理论而言,你可以从这篇关于probability distributions的维基百科文章开始;请特别注意页面底部的可折叠部分。你会发现有许多具有不同属性的非均匀分布(连续和离散)。
答案 1 :(得分:4)
在你的特定情况下,最好在[0; 100)使用均匀分布,然后检查它落在哪个范围:[0; 85),[85; 99),[99,100]
答案 2 :(得分:2)
根据您的描述,在我看来,您正在谈论健身比例选择(也称为轮盘赌轮选择)。
http://en.wikipedia.org/wiki/Roulette-wheel_selection
我认为nailxx的答案是一个非常紧凑的描述你需要做什么。
另见
Roulette Selection in Genetic Algorithms
Roulette wheel selection algorithm
如果我错了,这里有一些您可能会觉得有用的图书馆:
http://www.ee.ucl.ac.uk/~mflanaga/java/Stat.html
http://commons.apache.org/math/apidocs/org/apache/commons/math/random/package-summary.html