我编写了以下函数来在我的creep
项目中实现一种变异(genetic algorithm
)。由于我使用了java的内置随机生成库,因此获得每个index
的概率是一致的。我被要求修改函数,使其使用二项分布而不是统一。据我搜索,我找不到任何示例/教程来演示将均匀转换为二项式。我如何实现它?
int mutationRate = 0.001;
public void mutate_creep() {
if (random.nextDouble() <= mutationRate) {
// uniform random generation
int index = random.nextInt(chromoLen);
if(index%2 == 0) { // even index
chromo[index] += 1;
} else { // odd index
chromo[index] -= 1;
}
}
}
注意:我已经在A efficient binomial random number generator code in Java看到了解决方案。由于此处的问题仅针对creep mutation algorithm
,因此我不确定如何直接应用它。
答案 0 :(得分:0)
根据Wikipedia,你这样做:
从二项分布生成随机样本的一种方法是使用反演算法。为此,必须计算从0到n的所有值k的P(X = k)的概率。 (这些概率应该总和为接近1的值,以便包含整个样本空间。)然后通过使用伪随机数生成器在0和1之间均匀地生成样本,可以转换计算的样本U [0,1]通过使用在步骤1中计算的概率将其转换为离散数。
我将留给你&#34;计算从0到n&#34;的所有值k的概率[...]。在那之后,它是一个称重的分布。
您可以使用sudo ln -s /usr/bin/node /usr/bin/nodejs
执行此操作,类似于我在this answer中的显示方式。