java - 遗传算法中的重组?

标签 java genetic-algorithm

我正在使用遗传算法编写一个应用程序,其中我使用一个人的两个基因为实数(因为我是用Java编写的,所以它是双精度的)。因此,我想知道使用实数而不是位进行重组的最佳方法是什么。

我尝试过这种方式:

如果p1 = (x1, y1)p2 = (x2, y2)是父母,并且r是0到1之间的某个随机数,那么我会得到像这样的孩子:

c1 = (  r*x1   + (1-r)*x2 ,   r*y1   + (1-r)*y2)
c2 = ((1-r)*x1 +   r*x2   , (1-r)*y1 +   r*y2  )

但是我对这个解决方案给我带来的结果不是很满意。看起来孩子并不总是比父母好,但是他们应该基于遗传算法的主要概念。

因此,如果有人可以给我另一个想法或提示,我将不胜感激。

最佳答案

我同意所有评论。也许您可以将您的遗传算法与本地搜索整合在一起(即,对交叉/变异后的每个孩子进行本地搜索)。该技术已在各种期刊文章中证明是有用的。

与交叉/变异不同,本地搜索仅在有改进时才更改解决方案,否则,解决方案将保持不变。

在您的情况下,本地搜索解决方案(x1,y1)可能是“x1 +/- 0.01(和/或任何其他少量,可以在本地搜索中测试多个值)”的详尽测试,而y1仍然存在不变”,否则。

关于java - 遗传算法中的重组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53016649/

相关文章:

java - 交叉算法实现

java - 将二进制转换为 Ascii 但所有位串都得到相同的结果

java - 使用泛型来增加集合

java - IllegalArgumentException - Google Guava 将字符串转换为 HashMap

java - Java中的监视器和同步块(synchronized block)(看起来两个线程同时拥有一个监视器)

python - OpenMDAO 的 SimpleGADriver 中自动计算的具有整数值的位

r - 用于工作项目调度和优化的遗传算法或模拟退火

selection - 如何在遗传算法中执行基于等级的选择?

java - 两个 Eclipse 项目在构建路径中相互包含

java - 结果集相对跳过 Java/Access 中的最后一条记录