我正在尝试实现一种遗传算法,它将通过定位、调整大小和着色 1000 个圆圈来重新创建给定的图像。但是,我发现当适应度达到某个值(在我的情况下约为 0.37)时,它会停止增加。换句话说,它只是收敛于值。
我想不出改善这个的方法
一些细节
人口规模:50
突变率:0.025
每个孩子的基因是一个 1000 元素的数组,元素类型为CircleData
,其中包含圆的大小、颜色和位置
健身功能
我遍历目标图像上的每个像素和算法绘制的画布。对于每个像素,我将 RGB 值映射到 3D 空间中的一个点并计算两点之间的距离。然后将对每个像素的距离求和并归一化以获得 [0, 1] 中的适应度值,其中 1 表示每个像素都是相同的。最后我取值pow(fitness, 2)
作为最终的适应度值。
选择
我根据孩子们的健康状况对他们进行分类,并把最差的 2/3 降下来。对于剩下的孩子,我使用Fitness Proportionate Selection选择两个父母
分频器
我使用一个点交叉点和随机交叉点
更新
我怀疑问题是由于local maximum,仍在尝试解决该问题...
关于GA中局部最大值的一些SO问题: