java – 遗传算法中的重组?
作者:互联网
我正在使用遗传算法编写应用程序,其中我使用两个个体的基因是实数(双数,因为我用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(和/或任何其他少量,可以在本地搜索中测试多于1个值)的详尽测试,并且y1保持不变“和其他人一样.
标签:java,genetic-algorithm 来源: https://codeday.me/bug/20190710/1424779.html