Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 遗传算法适应度在某一点停止增长_Algorithm_Genetic Algorithm_Fitness - Fatal编程技术网

Algorithm 遗传算法适应度在某一点停止增长

Algorithm 遗传算法适应度在某一点停止增长,algorithm,genetic-algorithm,fitness,Algorithm,Genetic Algorithm,Fitness,我正在尝试实现一种遗传算法,它将通过定位、调整大小和为1000个圆圈着色来重建给定的图像。然而,我发现当适应度达到某个值(在我的例子中约为0.37)时,它停止增加。换句话说,它只是收敛于值 我想不出一个办法来改善这一点 一些细节 人口:50 突变率:0.025 每个孩子的基因都是一个1000个元素的数组,元素类型为CircleData,其中包含一个圆的大小、颜色和位置 适应度函数 我循环遍历目标图像上的每个像素和算法绘制的画布。对于每个像素,我将RGB值映射到3D空间中的一个点,并计算两点之间

我正在尝试实现一种遗传算法,它将通过定位、调整大小和为1000个圆圈着色来重建给定的图像。然而,我发现当适应度达到某个值(在我的例子中约为0.37)时,它停止增加。换句话说,它只是收敛于值

我想不出一个办法来改善这一点

一些细节 人口:50

突变率:0.025

每个孩子的基因都是一个1000个元素的数组,元素类型为
CircleData
,其中包含一个圆的大小、颜色和位置

适应度函数 我循环遍历目标图像上的每个像素和算法绘制的画布。对于每个像素,我将RGB值映射到3D空间中的一个点,并计算两点之间的距离。然后将每个像素的距离相加并归一化,以得到[0,1]中的适应值,其中1表示每个像素相同。最后,我将
pow(fitness,2)
的值作为最终的适应度值

挑选 我根据孩子们的健康状况对他们进行分类,把最差的2/3降下来。对于其余的孩子,我使用选择两个家长

改变 我使用单点交叉和随机交叉点


更新 我怀疑问题是由于,仍在努力修复

关于GA中局部极大值的几个SO问题:


愚蠢的问题:你确定只用1000个圆圈就能做得更好吗?因此,在进行平方前,你的体能实际上会收敛到
0.6
?@ruakh不确定,但我认为圆圈已经覆盖了几乎整个画布。无论如何,我稍后会尝试增加这个,看看结果是否会变得更好。我怀疑你的交叉是否足够聪明。新的颜色很容易出现吗?1000个圆圈太难解释了。要调试算法,请先尝试使用1或2个圆圈。什么是行为?一个圆的收敛速度有多快?收敛速度比随机的好吗?调整参数。然后看看当你放大到10101000时会发生什么。