我必须做一个使用遗传算法解决子集和问题的项目。不幸的是,在编写算法时我发现了一个大问题......
我的算法:
- 只要没有找到解决方案并且步骤数小于步骤数:
- 计算每个染色体的概率然后分布函数
- 执行选择(轮盘赌)
- 选择n条染色体进行杂交
- 执行交叉(交叉点随机选择)
- 选择 m 条染色体进行突变
- 执行突变
- 如果您找到了解决方案,请停止
(算法取自《遗传算法 + 数据结构 = 进化程序,第 2 章》一书) 种群规模、数据量、数据收集范围、步数、突变数(步内)、在程序选项中严格设置交叉次数(在一个步骤中)。
问题在于,在种群中经过一定(相对较少)的步骤后,所有染色体都是相同的。问题说明了这个图表:http: //imageshack.us/m/96/7693/wykresb.png
我做错了什么?如何解决?提前致谢。
编辑:
在这里你可以找到我的应用程序的日志:http: //paste.pocoo.org/show/391318/
我认为轮盘赌不是最好的解决方案(正如 deong 所说)。突变也需要改进。