问题描述:
在用遗传算法求解问题时,参数的调整对优化过程有很大的影响:
1. Px: 一个个体与其他个体进行交叉操作的概率;Px提高,种群内部的混合更加充分,有趋同倾向。
2. Pm: 一个个体的某个基因发生变异的概率;Pm提高,引入更多新基因,有随机搜索的倾向。
那么应该怎么样调整这两个参数才能保证算法搜索的广度和深度,从而提高收敛速度呢?
问题分析:
我们的先从遗传算法的基本思想开始考虑:
1. 选择算子:择优录用,好的个体更有可能被选中,再进行以下两步;
2. 交叉算子:种群内部的配对交叉,以求搭配出最佳的个体,是对内涵的“基因库”进行深度的搜索;
3. 变异算子:为种群引进新的基因,是对外延的“基因库”进行广度的搜索;
针对TSP问题的进一步分析:
由于TSP问题的特殊性,交叉算子不能很好地发挥“搭配”作用,譬如,经过顺序交叉的子代更像是其一个父亲变异的结果。于是,为了实现交叉算子本身的“职责”,我们在算法中加入一种“全局精英”策略:在普通的简单精英策略中,上一代最好的个体被保留,而我们采用的策略是,如果交叉子代比父代优秀,它才能进入下一代。这样,交叉算子对内搜索求优的效果发挥出来了,趋同的效果也更明显了。然而,由于算子对概率参数的敏感度大有增加,我们更容易通过参数调整来对其进行控制了。
实验证实,改进后的交叉算子能够坚守其“职责”,收敛过程对Px更敏感了。典型情形是:当Px增大到0.7以上时,Pm取一个普通值0.01,种群最优解在1000代左右迅速收敛到一个较低的水平(局部最优解),并在之后不再降低。原因是基因同化,不再产生更优秀的解。为了监测这种情况,我们引入基因多样性的概念。实际中我们用基因相似性来实现:Similarity = best fitness / average fitness
|
Px |
Pm |
Similarity |
|
0.1 |
0.01 |
0.6 |
|
0.3 |
|
0.7 |
|
0.5 |
|
0.8 |
|
0.7 |
|
0.9 |
|
0.9 |
|
0.95 |
|
1 |
|
0.95 |
|
|
|
|
|
0.5 |
0.001 |
0.99 |
|
|
0.005 |
0.93 |
|
|
0.01 |
0.8 |
|
|
0.05 |
0.45 |
|
|
0.1 |
0.4 |
大致实验结果如图(popsize = 100, maxgen =10000):
可以看出,如我们所料,Px和Pm对基因相似程度的作用恰好相反。
参数自适应模型
通过实验,我们对参数的自适应调整有了初步的方向:
在收敛前期,基因随机性大,相似度低,应该用较大的Px和较小的Pm,让算法迅速找到一些比较优秀的解,减少搜索的随机性;
在收敛后期,基因趋同,相似度高,应该用较小的Px和较大的Pm,让算法引入更多新基因,防止落入局部最优解;
总而言之,就是希望把基因相似度控制在一个范围之内。到此,最基本的参数自适应模型就出现了:
Click "Read more" to go on...