- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在我的遗传算法
项目中编写了以下函数来实现一种突变(蠕变
)。由于我使用了 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
的,所以我不确定如何直接应用它。
最佳答案
根据 Wikipedia ,你这样做:
One way to generate random samples from a binomial distribution is to use an inversion algorithm. To do so, one must calculate the probability that P(X=k) for all values k from 0 through n. (These probabilities should sum to a value close to one, in order to encompass the entire sample space.) Then by using a pseudorandom number generator to generate samples uniformly between 0 and 1, one can transform the calculated samples U[0,1] into discrete numbers by using the probabilities calculated in step one.
我将留给您“计算从 0 到 n 的所有值 k 的概率 [...]”。之后就是加权分布了。
您可以使用 TreeMap
来做到这一点,类似于我在 this answer 中展示的方式.
关于java - 将均匀随机生成转换为二项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943898/
我需要在半径R的圆内生成一个均匀随机点。 我意识到,通过在区间 [0 ... 2π) 中选择均匀随机的角度,并在区间 (0 ... R) 中选择均匀随机的半径,我最终会得到更多的点朝向中心,因为对于两
我想在一个正方形内生成 N 个点(均匀地)。我怎样才能做到这一点? 最佳答案 非常酷的问题,比我想象的要困难得多,但这就是想法。有关于 n 边形的论文,但我只会做正方形。因此,圆的均匀分布是一个常见问
考虑以下示例: import itertools import numpy as np a = np.arange(0,5) b = np.arange(0,3) c = np.arange(0,7)
SQL Server 将一组值分成 5 组,每组的 sum(count) 应该均匀分布。 表仅包含 2 列 rid 和 count。 create table t1(rid int, count in
我有以下简单的 HTML。 A B C 和 CSS: ul { width: 100%; display: flex; flex-direction:
我是一名优秀的程序员,十分优秀!