计算智能——基于遗传算法的TSP问题(课堂实验)

一.引言

遗传算法喝蚁群算法都是时效的最优化搜索算法,在解决诸如TSP这类组合优化问题时,它们各有所长。
本文使用MATLAB先来分析遗传算法自身的参数影响,再进一步对比分析两种算法解决TSP问题的性能。

二.遗传算法基本原理和TSP求解

遗传算法由美国J.Holland教授提出。

其主要特点:群体搜索策略
                      群体中个体间的信息交换

搜索不依赖于梯度信息。

遗传算法的三个主要操作算子:选择算子
                                                  交叉算子
                                                  变异算子

遗传算法包含的五个要素:
1.对参数进行编码
2.设定初始种群大小
3.适应度函数设计
4.遗传操作设计
5.控制参数设定(包括种群大小,最大进化代数,交叉概率,变异概率等。)

遗传算法求解TSP问题最重要的地方
交叉操作时,城市交换的方法。

交叉前:
在这里插入图片描述
交叉后:
在这里插入图片描述
由图可见会出现城市冲突现象
解决办法:
在这里插入图片描述
将染色体A冲突基因8改为染色体B对应位置的5
以此类推来消除冲突
得到结果:
在这里插入图片描述

关于遗传算法的其他详细原理可以参考上篇文章遗传算法

三.遗传算法自身参数分析

3.1 城市个数的讨论

城市个数的参数讨论,是建立在城市个数不同(个数保持一定时,数据集保持一致)的情况下,各运行10次,比较最优解最差解的差值,再自己估计一下10次的平均值,来看在当前城市个数下该算法的性能。以讨论出遗传算法适合更优的解题城市区间。
最优值和最差值的差值越小,说明算法性能越好。

其他参数设置(保持不变)
种群数量:100
迭代次数:500
交叉概率:0.8
变异概率:0.05
各运行10次

1.城市个数为10

最优解:
在这里插入图片描述
在这里插入图片描述
最差解:
在这里插入图片描述
在这里插入图片描述
平均值: 8.72e+00
最优与最差差值: 约0.25e+00

2.城市个数为30
最优解:
在这里插入图片描述
在这里插入图片描述
最差解:
在这里插入图片描述
在这里插入图片描述

平均值: 2.23e+01
最优与最差差值: 约0.4e+01

3.城市个数为50
最优解:
在这里插入图片描述
在这里插入图片描述

最差解:
在这里插入图片描述
在这里插入图片描述
平均值: 4.36e+01
最优与最差差值: 约0.85e+01

4.城市个数为70
最优解:
在这里插入图片描述
在这里插入图片描述
最差解:
在这里插入图片描述
在这里插入图片描述

平均值: 5.75e+01
最优与最差差值: 约1.09e+01

5.城市个数为100
最优解:
在这里插入图片描述
在这里插入图片描述
最差解:
在这里插入图片描述
在这里插入图片描述
平均值: 8.33e+01
最优与最差差值: 约02.1e+01

小结:
1.从实验结果来看,当城市数量为30时,算法性能最佳。

2.从该小节可以看出,遗传算法在城市数量小于30时,显示了很好的性能,无论是优解还是平均解都比优于城市数量大于30以后的情况。随着城市数目的增加,遗传算法由于搜索范围扩大,搜索好解的能力下降,在一定的迭代次数下,最优解与结果的相差越来越大。

所以接下来的验证实验中,城市个数保持30不变。

3.2 种群个数的讨论

种群个数的参数讨论,是建立在其他参数都确定,只有种群个数不同的情况下,来比较每次的最短路径,收敛速度和迭代速度。

其他参数设置(保持不变)
城市数量:30
迭代次数:1000(为了防止收敛不完全,先设置1000次迭代)
交叉概率:0.8
变异概率:0.05

1.种群个数为30
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.种群个数为60
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.种群个数为90
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结:

1.对于我自己的实验数据来说,从实验结果来看,当种群数量为60时,所求路径最短(即结果最优),且运行时间最短,收敛速度也最快,所以对于我的实验,种群数量为60时,算法性能最佳。
2.种群规模越大越可能找到全局解,但如果种群规模过大,运行时间也会加长,收敛的效果不稳定,且结果也不一定优于一个适当的值。
3. 种群规模太小,很明显会出现近亲交配,产生病态基因。而且造成有效等位基因先天缺失,即使采用较大概率的变异算子,生成具有竞争力高阶模式的可能性仍然核销,况且大概率变异算子对已有模式的破坏作用极大。同时,遗传算子存在随机误差(模式采样误差),妨碍小群体中有效模式的正确传播,使得种群进化不能按照模式定理产生所预期的期望数量。
群体规模太大,结果难以收敛且浪费资源,稳健性下降。

所以接下来的验证实验中,种群个数保持60不变。

3.3 迭代次数的讨论

迭代次数的参数讨论,是建立在其他参数都确定,只有迭代不同的情况下,来比较每次的最短路径,收敛速度和迭代速度。

其他参数设置(保持不变)
城市数量:30
种群数量:60
交叉概率:0.8
变异概率:0.05

1.迭代次数为500
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.迭代次数为1000
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.迭代次数为1500
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.迭代次数为2000
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小结:
1.因为这里用之前保存的数据集来做实验迭代次数无法改变,于是重新用了一个方法来每次生成相同的随机数据集。

2.对于新的实验数据来说,从实验结果来看,当迭代次数为500时,所求路径最短(即结果最优),且运行时间最短,收敛速度也最快,但是已经到500次左右了,收敛情况还是不稳定,于是我这里选择迭代1000次为较较合适的参数。

3.当迭代次数增加,运行时间明显增加,但是从收敛情况来看,一般在迭代1000次以内就可以趋于稳定。而且并不是迭代次数越多,结果越优。

4.迭代次数太小,算法不容易收敛,种群还没有成熟;
迭代次数太大,算法已经熟练或者种群过于早熟不可能再收敛,继续进化没有意义,只会增加时间开支和资源浪费
所以接下来的验证实验中,迭代次数保持1000不变。

3.4 交叉概率的讨论

交叉概率的参数讨论,是建立在其他参数都确定,只有交叉概率不同的情况下,来比较每次的最短路径,收敛速度和迭代速度。

其他参数设置(保持不变)
城市数量:30
种群数量:60
迭代次数:1000
变异概率:0.05

1.交叉概率:0.2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.交叉概率:0.4
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.交叉概率:0.6
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.交叉概率:0.8
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.交叉概率:0.95
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结:
1.对于我自己的实验数据来说,从实验结果来看,当交叉概率为0.8时,虽然结果看起来理想,但是在迭代已经接近1000次了,收敛情况还是不稳定,为此又重复运行了很多次,发现都是如此。于是又增加了一个0.95来测试。发现当选择0…95时,结果与0.8相差不大,也很理想,且收敛情况较优。运行时间虽然有略增,但是在可以接受范围。

2.交叉概率的选择要偏大,否则无法有效更新种群。随着交叉概率的增大,收敛情况不一定快或者慢,但是时间开销一定会增大,所以我这里试出的适合自己的值是0.95。

3.交配概率太小不能有效更新种群。
交配概率太大容易破坏已有的有利模式,随机性增大,容易错失最优个体。

所以接下来的验证实验中,交叉概率保持0.95不变。

3.5 变异概率的讨论

变异概率的参数讨论,是建立在其他参数都确定,只有变异概率不同的情况下,来比较每次的最短路径,收敛速度和迭代速度。

其他参数设置(保持不变)
城市数量:30
种群数量:60
迭代次数:1000
交叉概率:0.95

1.交叉概率:0.01
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.交叉概率:0.03
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.交叉概率:0.05
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.交叉概率:0.07
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小结:
1.对于我自己的实验数据来说,从实验结果来看,当变异概率为0.07时,从收敛效果和最优值上都是性能最好。时间也比变异概率为0.05优。

2.变异概率要稍小,保证有效基因不要丢失,但同时又有改变。在小数值时,也是不越小就性能越优。但总体上,时间随变异概率的增大而开销增大(不是百分百)。

3. 变异概率太小,种群的多样性下降太快,容易导致有效基因的迅速丢失且不容易修补;
变异概率太大,尽管种群的多样性可以得到保证,但是高阶模式被破坏的概率也随之增大。

综上:
我的实验结果取得较优参数:
城市数量:30
种群数量:60
迭代次数:1000
交叉概率:0.95
变异概率:0.07

四.遗传算法与蚁群算法的对比分析

对于两个算法的分析比较,我采取的方法是,在两种方法都用之前是实验出的较优参数的情况下,改变城市的数量。让两个算法运行相同城市数量时的数据集对比算法的速度和最优值和最差值的差。来看什么时候用哪个算法更合适。

小结:
1.遗传算法在求解30城市以下的TSP问题时,显示了很好的性能。无论是从优解还是平均解都优于蚁群算法,而且时间也比它少。

2.基于上节实验,蚁群算法很容易趋于一个局部解,而且迭代的次数对解的影响较小,往往收敛的效果不是很理想。

3.随着城市数目的增加,基于遗传算法由于搜索范围扩大,搜索好解的能力下降,在既有的次数内得出的结果与最优结果相差越来越大。虽然运行足够多的次数可以找到好解,但是时间过长。这时候蚁群算法就表现了良好
的性能,可以在较少的迭代次数内搜索到好解。

4.城市数量在30-50时,蚁群算法要好于遗传算法,同时在城市数目在70以上两个算法的性能就都不好了,蚁群算法容易出现停滞现象。

发布了12 篇原创文章 · 获赞 3 · 访问量 1265

猜你喜欢

转载自blog.csdn.net/weixin_43822880/article/details/103142085
今日推荐