五种常见启发式算法求解TSP问题-总结篇
1. 前言
本文将总结先前设计的五个启发式算法的求解效果,算法文章如下表:
智能优化算法类别 | 启发式算法求解TSP问题系列博文 |
---|---|
进化算法 | 遗传算法求解TSP问题 |
仿人智能优化算法 | 禁忌搜索算法求解TSP问题 |
仿自然优化算法 | 模拟退火算法求解TSP问题 |
群智能优化算法 | 蚁群算法求解TSP问题 |
群智能优化算法 | 粒子群算法求解TSP问题 |
上述博文中所采用的例子是随机在(0,101)二维坐标平面上生成的20个城市数据,五种常见启发式算法在此例子上均能取得较好的表现,为了进一步对比算法求解的效果,本文将扩大城市规模进行算法测试,即随机在(0,101)二维坐标平面上生成50个城市数据。
#随机生成城市数据代码,CityNum、MinCoordinate、MaxCoordinate三个参数可调节
CityNum = 50#城市数量
MinCoordinate = 0#二维坐标最小值
MaxCoordinate = 101#二维坐标最大值
CityCoordinates = [(random.randint(MinCoordinate,MaxCoordinate),random.randint(MinCoordinate,MaxCoordinate)) for i in range(CityNum)]#20个城市数据
CityCoordinates = [(88, 16),(42, 76),(5, 76),(69, 13),(73, 56),(100, 100),(22, 92),(48, 74),(73, 46),(39, 1),(51, 75),(92, 2),(101, 44),(55, 26),(71, 27),(42, 81),(51, 91),(89, 54),(33, 18),(40, 78]#50个城市数据
CityCoordinates = [(71, 71),(68, 71),(19, 41),(9, 67),(22, 34),(15, 2),(60, 56),(36, 38),(18, 92), (96, 27),(71, 85),(24, 70),(12, 31),(77, 88),(59, 49),(27, 87),(94, 97),(37, 42),(32, 78),(65, 57), (96, 47),(95, 86),(61, 80),(55, 7),(94, 74),(39, 6),(62, 43),(34, 11),(18, 89),(79, 16),(100, 99),(76, 39),(35, 51),(74, 71),(59, 48),(98, 1),(35, 98),(82, 91),(0, 64),(56, 48),(89, 8),(69, 54),(3, 72),(79, 16),(66, 88),(80, 15),(56, 88),(30, 57),(67, 86),(75, 4)]
2. 算法求解效果分析与讨论
以下采用50个城市数据进行分析,只调节算法参数,不更改算法设计,具体设计可参考原博文。
#50个城市数据,编号分别为0,1,...,49
CityCoordinates = [(71, 71),(68, 71),(19, 41),(9, 67),(22, 34),(15, 2),(60, 56),(36, 38),(18, 92), (96, 27),(71, 85),(24, 70),(12, 31),(77, 88),(59, 49),(27, 87),(94, 97),(37, 42),(32, 78),(65, 57), (96, 47),(95, 86),(61, 80),(55, 7),(94, 74),(39, 6),(62, 43),(34, 11),(18, 89),(79, 16),(100, 99),(76, 39),(35, 51),(74, 71),(59, 48),(98, 1),(35, 98),(82, 91),(0, 64),(56, 48),(89, 8),(69, 54),(3, 72),(79, 16),(66, 88),(80, 15),(56, 88),(30, 57),(67, 86),(75, 4)]
2.1 遗传算法
#GA参数
generation = 1000 #迭代次数
popsize = 100 #种群大小
tournament_size = 5 #锦标赛小组大小
pc = 0.95 #交叉概率
pm = 0.1 #变异概率
2.2 禁忌搜索算法
'''这里采用贪婪算法构造初始解,随机构造初始解方法表现不佳。'''
#参数
iterMax = 500#迭代次数
iterI = 1#当前迭代次数
#PSO参数
birdNum = 100#粒子数量
w = 0.2#惯性因子
c1 = 0.4#自我认知因子
c2 = 0.4#社会认知因子
2.3 模拟退火算法
'''思路一,采用贪婪算法构造初始解'''
#SA参数
Tend = 0.1
T = 100
beta = 0.99
'''思路二'''
#SA参数
Tend = 0.01
T = 100
beta = 0.98
2.4 蚁群算法
#参数
iterMax = 500#迭代次数
#ACO参数
antNum = 50#蚂蚁数量
alpha = 2#信息素重要程度因子
beta = 1#启发函数重要程度因子
rho = 0.2#信息素挥发因子
Q = 100.0#常数
for i in range(antNum):#根据转移概率选择后续途径城市,并计算适应值antCityList[i] = select(antCityList[i],antCityTabu[i],trans_p)#轮盘赌选择后续城市fitList[i] = calFitness(antCityList[i],dis_matrix)#计算适应度,即路径长度pheromone = updatePheromone(pheromone,fitList[i],antCityList[i],rho,Q)#更新当前蚂蚁信息素增量trans_p = calTrans_p(pheromone,alpha,beta,dis_matrix,Q)#更新转移概率
2.5 粒子群算法
#参数
iterMax = 1000#迭代次数
#PSO参数
birdNum = 100#粒子数量
w = 0.2#惯性因子
c1 = 0.4#自我认知因子
c2 = 0.4#社会认知因子
3. 总结
算法设计和参数的选择很大程度上影响优化算法的求解效果和效率,在比较算法效果的时候也应在特定的算法设计和参数组合下讨论。在本实验的五种算法求解中,20个城市数据基本都能取得较好的效果,当城市规模扩大到50时,求解效果最好的是禁忌搜索算法(563.5)和粒子群算法(564.0),模拟退火算法中,算法设计思路二取得不错的效果(595.2),而蚁群算法( 625.7)和遗传算法(681.3)则表现不佳。当然,如果不采用贪婪算法构造初始解,禁忌搜索算法和模拟退火算法搜索解的效果也会大打折扣,反过来想,遗传算法和蚁群算法如果引入贪婪策略进行改进,求解质量上应该会较大的提升。
TSP系列目录
智能优化算法类别 | 启发式算法求解TSP问题系列博文 |
---|---|
进化算法 | 遗传算法求解TSP问题 |
仿人智能优化算法 | 禁忌搜索算法求解TSP问题 |
仿自然优化算法 | 模拟退火算法求解TSP问题 |
群智能优化算法 | 蚁群算法求解TSP问题 |
群智能优化算法 | 粒子群算法求解TSP问题 |
总结篇 | 五种常见启发式算法求解TSP问题 |
改进篇 | 遗传-粒子群算法&遗传-禁忌搜索算法求解TSP问题 |
记录学习过程,欢迎指正
五种常见启发式算法求解TSP问题-总结篇相关推荐
- 五种常见的PHP设计模式
2019独角兽企业重金招聘Python工程师标准>>> 五种常见的PHP设计模式 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm ...
- Ajax 和 XML: 五种常见 Ajax 模式
Asynchronous JavaScript + XML(Ajax)无疑是 2006 年最热门的技术术语,且有望在 2007 得到进一步发展.但是对您的应用程序来说它究竟有什么意义呢?Ajax 应用 ...
- 小波基函数构造matlab,五种常见小波基函数及其matlab实现全解.docx
五种常见小波基函数及其matlab实现全解 与标准的傅里叶变换相比,小波分析中使用到的小波函数具有不唯一性,即小波函数 具有多样性.小波分析在工程应用中,一个十分重要的问题就是最优小波基的选择问题,因 ...
- java简述常见的布局极其特点_请简要说明 Android 中五种常见布局的特点。_学小易找答案...
[简答题]请简要说明有序广播和无序广播的区别 [简答题]请简要说明 Android 程序结构中 AndroidManifest.xml 的功能? [简答题]简述李村站人工办理进路的作业过程. [简答题 ...
- [Android Studio]掌握Android Studio的五种常见控件和五种常见布局
目录 一.View和ViewGroup 二.Android的五种常见控件 2.1 文本控件 2.1.1 TextView 2.1.2 EditText 2.2 按钮控件 2.2.1 Button 2. ...
- 成都拓嘉启远:造成拼多多异常订单的五种常见原因
订单异常对于拼多多商家来说并不是什么好事,尤其是在活动的时候,销量大,本来就已经忙不过来了还遇到多个订单异常,就比较头大了,那么在新手的时候就需要去了解更多的异常订单的原因,避免在以后经营的过程遇到这 ...
- 五种常见的加密方式及常用的加解密工具
如果你是互联网公司的信息安全从业者,那么你可能会经常需要处理撞库事件,撞库是黑客的无聊"恶作剧".黑客收集已经在互联网上泄露的用户和密码信息,生成对应的字典表,并尝试批量登录其他网 ...
- IoT五种常见物联网协议:TCP/IP、UDP、HTTP、MQTT、CoAP初探
对于软件公司来说,IoT模式为其硬件设计以及所提供的服务带来决定性的改变.其中影响最大的一个方面是通信协议. 通信协议可以被认为是一种语言,即两台或两台以上的设备可以相互交流.同时无规矩不成方圆,通信 ...
- 五种常见的DNS攻击类型及应对方式
随着俄乌冲突中网络战的升级,DNS安全成为业界关注的焦点. 无论是去年3月份NSA发布的保护性DNS(PDNS)推荐指南,还是俄罗斯主权互联网的核心--DNS服务在战争期间的大规模启用,都表明DNS安 ...
最新文章
- 算法导论chapter6 堆排序的代码
- MATLAB里面的filter和filtfilt的C语言源代码
- 关注 Imagine Cup 2010, 参与软件设计“最具人气奖”投票
- 学校为什么要单位接收函_签了三方,想毁约怎么办?这几点你必须要知道!
- MFC中CDC画线总结
- 领域驱动设计系列贫血模型和充血模型
- CVE-2019-11477漏洞详解详玩
- laravel 文档
- 蓝色主题登陆页面界面模板
- There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED]
- java求数组的平均值_Java中数组求平均值,最大值,最小值。
- Python模拟手机充值案例程序实现代码
- 笔记本linux如何降低功耗,细说如何降低笔记本电脑功耗
- 白话数字签名(2)——软件设备
- java 合并两个List并去掉重复项
- 段码屏中液晶相与相变的含义?
- 云诊所管理系统 云诊所管理软件 诊所管理软件 诊所管理系统
- LindedList相关介绍
- centos7安装PostgresSQL14+PostGIS3.2记录
- 关于跨线程操作GUI线程控件的疑问
热门文章
- matlab stats里的f值,MATLAB 回归分析regress,nlinfit,stepwise函数
- 看房一次就租下的90后,大概都喜欢Q房网
- 数据库关系代数练习题
- Java程序性能优化 !
- mysql数据库备份与恢复命令
- HTTP请求的过程与TCP连接的过程
- E22 LoRa模块透传 定点传输 WOR模式测试与MicroPython应用
- Ubuntu 20.04 boot repair(镜像引导目录修复)
- 计算机上画正比例函数,信息技术应用 用计算机画函数图象教案1
- php无版权图库api,哪里有无版权php源码