将均匀随机生成转换为二项式

时间:2016-08-14 15:51:27

标签: java algorithm math distribution genetic-algorithm

我编写了以下函数来在我的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,因此我不确定如何直接应用它。

1 个答案:

答案 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中的显示方式。