我尝试为我的项目学习和实现一个简单的遗传算法库。此时,进化、种群选择已经准备就绪,我正在尝试为我的 Java 和 Scala 基因进化引擎实现一个简单的好变异算子,比如高斯变异算子(GMO)。
我在论文A mutation operator based on a Pareto ranking for multi-objective evolutionary algorithms (PM Mateo, I. Alberto) 第 6 页和第 7 页中找到了有关高斯变异算子 (GMO) 的一些信息。
但是我有一些问题要查找有关如何在 Java 中实现此高斯变异算子和此算子的其他有用变体的其他信息。我该怎么办?
我使用的random.nextGaussian()
是random Java util的函数,但是这个方法只返回一个0到1之间的随机数。
所以,
a) 在这种情况下如何修改返回号的精度?(例如,我想获得一个介于 0 和 1 之间的随机双数,步长等于 0.00001。)
b)以及如何指定mu
和sigma
用于此功能,因为我想在本地搜索我的基因组的值,而不是在 -1 和 1 之间。我如何才能围绕我的基因组值调整本地研究?
经过研究,我找到了 b) 问题的答案。看来我可以像这样置换高斯随机数:
newGenomeValue = oldGenomeValue + (( gaussiandRndNumber * sigma ) + mean )
其中mean
= 我的基因组值。
(参见如何生成具有正态分布或高斯分布的随机数中的底部页面的方法? 。)