【发布时间】:2016-08-14 15:51:26
【问题描述】:
我编写了以下函数来在我的genetic algorithm 项目中实现一种突变(creep)。由于我使用了 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,我不确定如何直接应用它。
【问题讨论】:
-
@pjs 我了解到您已经回答了重复标记的问题。仅供参考,我已经看过了,我不能直接在我的情况下使用它,因为我专门为
creep mutation algorithm需要它。所以请取消标记重复标志,如果可以的话,请在这里回答我的问题。 -
二项式是二项式,链接的答案告诉您如何获得这些。按照目前的措辞,您的问题是重复的。听起来您的问题不是如何生成二项式,而是如何在蠕变算法中使用它。
-
您是否打算在指定索引处翻转位?如果是这样,你的逻辑是错误的。假设您选择索引 4 并且 chromo[4] 的值当前为 1,您将其更新为 2。如果您的目标是翻转位,请使用
chromo[index] ^= 1;而不管偶数/奇数索引。 -
我仍然认为您没有充分阐明您的问题以获得有意义的答案。二项分布是一种计数分布,它描述了在执行
n独立试验时观察到的“成功”次数,每个试验都有p成功的概率。您打算如何使用该计数?
标签: java algorithm math distribution genetic-algorithm