遗传算法求解TSP问题

实验内容
对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。
增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。

分析遗传算法求解不同规模TSP问题的算法性能
遗传算法求解TSP问题_第1张图片
城市数量越大或者群体规模越大或者最大迭代数越大,运行等待结果的时间越久
TSP规模越大,用时越长,但是当规模大到一定程度时,遗传算法的求解性能优于广度/宽度优先搜索算法,用时比一般的搜索算法少很多,对自身来说规模越大结果越精确。

求解流程图
遗传算法求解TSP问题_第2张图片
对同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。
(1)种群规模对结果的影响:规模越大算法结果越精确,适应度越好,但是运行时间越久。
设置 城市数量10 变异概率0.15 交叉概率0.95 最大迭代数500
种群规模设置为50时:2组得到了最优解
(2)交叉概率对结果的影响:交叉概率过低将得不到最优解,交叉概率越高平均适应度越好。
设置 城市数量10 变异概率0.15 最大迭代数500 种群规模500
交叉概率设置为0.99时:得到17组最优解
(3)变异概率对结果的影响:变异概率过高或者过低都影响得到最优解
设置 城市数量10 种群规模500 交叉概率0.95 最大迭代数500
变异概率0.01时:12组得到了最优解

比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。

变异策略为交换城市位置:
遗传算法求解TSP问题_第3张图片
变异策略为随机选取两个城市,他们之间的距离加倍:
遗传算法求解TSP问题_第4张图片
遗传算法求解TSP问题_第5张图片
不同变异策略与不同个体选择策略对算法执行结果得到最优解的情况有所不同,但是程序实行得到结果的等待时间相差不多。

C++源代码
遗传算法求解TSP问题_第6张图片
遗传算法求解TSP问题_第7张图片
遗传算法求解TSP问题_第8张图片
遗传算法求解TSP问题_第9张图片
遗传算法求解TSP问题_第10张图片
遗传算法求解TSP问题_第11张图片
遗传算法求解TSP问题_第12张图片
遇到的问题和解决方法
课程讲述的遗传算法中并没有设计交叉概率问题,默认为必然发生交叉。本次实验中需要对交叉概率对实验结果的影响进行讨论分析,于是自己修改了程序,加入了交叉概率参数与函数修改,使得可以通过手动调整交叉概率参数来分析不同交叉概率参数对实验结果的影响。

实验要求使用不同变异策略来测试,通过自己想象和合理分析之后设计出了第二种变异策略。

变异概率调整,对结果影响变化不大时,是受了种群数目和迭代次数的限制,总共发生的变异次数太少,但是设置迭代次数与规模增大时,会导致运行过于缓慢,等待结果时间太久。解决方案是在work函数中的循环里,当迭代次数大于N时,增大变异概率,不仅获取变异较少的情况解也获取了变异量较大的情况解。

心得体会
这次遗传算法求解TSP问题的实验,让我体会了参数对实验结果的影响。本次实验针对种群数目,迭代次数,变异概率,交叉概率等参数进行修改设定与测试来获取最优解情况分析参数对结果的影响。在设置新函数新参数时,灵活应用程序设计结构,对遗传算法和C++语言都有了进一步的理解。以后求解规模较大的TSP问题时,如果使用搜索与松弛策略用时太久,时间复杂度过高。可以考虑使用遗传算法求解,但要保证结果的精确,因为遗传算法在规模较小时可能得到的结果不是最优解。

你可能感兴趣的:(实验测试)