遗传算法java-一致性hash算法 java
本文介绍了如何用Java实现遗传算法的高斯变异算子的处理方法,对大家解决问题有一定的参考价值。 需要的朋友遗传算法java,跟着小编一起学习吧!
问题描述
我尝试为我的项目学习和实现一个简单的遗传算法库。 此时,进化、种群选择已准备就绪,我正在尝试为 Java 和 Scala 中的遗传进化引擎实现一个简单的变异算子,例如高斯变异算子 (GMO)。
我尝试为我的项目学习和实现一个简单的遗传算法库。 此时,进化、种群选择已准备就绪,我正尝试在 Java 和 Scala 中为我的遗传进化引擎实现一个简单的变异算子,如高斯变异算子 (GMO)。
我在论文 Mutation Operators Based on Pareto Ranking for Multi-Objective Evolutionary Algorithms (PM Mateo, I. Alberto) 第 6 和 7 页找到了一些关于高斯变异算子 (GMO) 的内容。
我在论文 A mutation operator based on a Pareto ranking for multi-objective evolutionary algorithms (PM Mateo, I. Alberto) 第 6 和 7 页找到了一些关于高斯变异算子 (GMO) 的信息。
但是我在寻找有关如何在 Java 中实现此高斯变异运算符和此运算符的其他有用变体的其他信息时遇到了一些问题。 我该怎么办?
但是我在查找有关如何在 Java 中实现此高斯变异运算符和此运算符的其他有用变体的其他信息时遇到了一些问题。 我应该怎么办?
我正在使用 random java util 的 random.nextGaussian() 函数,但此方法仅返回 0 到 1 之间的随机数。
我正在使用 random Java util 的 random.nextGaussian() 函数,但此方法仅返回 0 到 1 之间的随机数。
所以,
a) 在这种情况下如何修改返回数字的精度? (例如,我想获得一个介于 0 和 1 之间的随机双精度数,步长等于 0.00001。)
a) 在这种情况下如何修改返回数字的精度? (例如,我想获得一个介于 0 和 1 之间的随机双数,步长等于 0.00001。)
b) 如何指定 mu 和 sigma 这个函数,因为我想在本地搜索我的基因组值,而不是在 -1 和 1 之间。我如何才能只围绕我的基因组值进行本地研究?
b) 我如何为这个函数指定 mu 和 sigma,因为我想在本地搜索我的基因组值,而不是在 -1 和 1 之间。我如何调整围绕我的基因组值的本地研究?
经过一些研究,我找到了 b) 问题的答案。 我似乎可以像这样替换高斯随机数:
经过研究,我找到了 b) 问题的答案。 看来我可以像这样取代高斯随机数:
newGenomeValue = oldGenomeValue + (( gaussiandRndNumber * sigma ) + mean )
其中表示 = 我的基因组值。
其中均值 = 我的基因组值。
(见How can I generate ordinary or Gaussian random numbers? using the method on the bottom page。
推荐答案
要回答问题 a遗传算法java,您所要做的就是四舍五入到最接近的 0.00001 以得到这些单位的答案。 例如:
要回答问题 a,您只需四舍五入到最接近的 0.00001 即可得到这些单位的答案。 例如:
step = 0.00001;
quantized_x = step * Math.rint(x / step);
现在对于 b 部分,您的想法是正确的,您提交的代码应该可以工作。 您需要做的就是将变量重新调整为所需的范围。 我唯一可以补充的是,其工作的根本原因是微积分变量定理的变化:http://en.wikipedia.org/wiki/Integration_by_substitution
现在对于 b 部分,您的想法是正确的,您提供的代码应该可以工作。 您需要做的就是将变量重新调整到所需的范围。 我唯一可以补充的是,这个工作的根本原因是来自微积分的变量定理的变化:
如果你在均值 0 和标准差 1 的高斯分布的情况下计算出这个公式,通过线性平移和重新缩放转换,那么你会发现你写出的确实是正确的。
如果你在均值 0 和标准差 1 的高斯分布通过线性平移和重新缩放变换的情况下计算出这个公式,那么你会发现你写出的确实是正确的。
总而言之,这里有一些代码可以解决这个问题:
把它们放在一起,这里有一些代码应该可以解决问题:
double next_gaussian()
{
double x = rng.nextGaussian(); //Use whichever method you like
//here to generate an initial [-1,1] gaussian distribution
y = (x * 0.5) + 0.5; //Rescale to [0,1]
return Math.rint(y * 100000.0) * 0.00001; //Quantize to step size 0.00001
}
如何用Java实现遗传算法的高斯变异算子,本文到此结束。 希望我们推荐的答案对您有所帮助,也希望您多多支持IT之家!