ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 灰袍法师

[原创] 学习共享:高级蚁群算法求解1000以上城市的TSP问题(旅行商),附大量TSPLIB数据!

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-2-8 13:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:
收藏学习!!!!!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2013-4-17 10:23 | 显示全部楼层
楼主 我想请问一下 为什么我写的算法就是不收敛

点评

不收敛多半是 信息素 的计算有误,或者是 选择下一城市 的代码有错误,没有按照信息素多少来计算概率。  发表于 2013-4-17 16:38

TA的精华主题

TA的得分主题

发表于 2013-5-6 09:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
虽不能至,心向往之。

TA的精华主题

TA的得分主题

发表于 2013-5-6 10:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享谢谢分享

TA的精华主题

TA的得分主题

发表于 2013-6-30 19:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
法师,你的这段代码有问题(各种版本的增强蚁群算法+3opt+加速技巧.xls)
POA[M~N{P(9{2B5$G{OEW(R.jpg
按你的意思,你应该不会是想把pheromone数组重新定义吧
而且,你对每一行都取最大值,这样会导致结果出现pheromone(u,v)!=pheromone(v,u)
但一般图都是对称的呀

TA的精华主题

TA的得分主题

发表于 2013-6-30 19:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
法师,你的这段代码有问题(各种版本的增强蚁群算法+3opt+加速技巧.xls)


按你的意思,你应该不会是想把pheromone数组重新定义吧
而且,你对每一行都取最大值,这样会导致结果出现pheromone(u,v)!=pheromone(v,u)
但一般图都是对称的呀

点评

pheromone(u,v)是否等于pheromone(v,u)这个无所谓,对结果影响极少。而且下一次更新就改回来了  发表于 2013-7-1 06:59
没问题。这段代码在信息素矩阵导致算法停滞的时候用,所以就是要改掉整个矩阵的数值。  发表于 2013-7-1 02:31
没问题。这段代码在信息素矩阵导致算法停滞的时候用,所以就是要改掉整个矩阵的数值。  发表于 2013-7-1 02:31

TA的精华主题

TA的得分主题

发表于 2013-7-1 20:58 | 显示全部楼层
imcjp 发表于 2013-6-30 19:10
法师,你的这段代码有问题(各种版本的增强蚁群算法+3opt+加速技巧.xls)

其实你这样等价于从头开始,真正的restart,不过这段代码没什么意义,只是相当于把配合romone整个设为0。
你用vba调试一下就知道了

TA的精华主题

TA的得分主题

发表于 2013-7-1 21:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
imcjp 发表于 2013-7-1 20:58
其实你这样等价于从头开始,真正的restart,不过这段代码没什么意义,只是相当于把配合romone整个设为0。 ...

另外,我想说3opt应该有8种变换,除本身外有另外7种。
假如本身是a1,a2,b1,b2,c1,c2,其中三条子路径是a2b1,b2c1,c2a1
那么剩下7种是
a1,b1,a2,b2,c1,c2
a1,a2,b1,c1,b2,c2
a1,b1,a2,c1,b2,c2
a1,b2,c1,a2,b1,c2
a1,b2,c1,b1,a2,c2
a1,c1,b2,a2,b1,c2
a1,c1,b2,b1,a2,c2

点评

有些变换实质上只是 2opt,在 2opt 里面已经解决了。。。。。  发表于 2013-7-1 23:59

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-2 00:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
imcjp 发表于 2013-7-1 20:58
其实你这样等价于从头开始,真正的restart,不过这段代码没什么意义,只是相当于把配合romone整个设为0。 ...

确实是代码有错误,正确的代码要把这里的第三行删掉
Sub regen_pheromone()
Dim u As Long, v As Long, max_inrow() As Double
ReDim pheromone(1 To total_city, 1 To total_city)

TA的精华主题

TA的得分主题

发表于 2013-7-2 00:33 | 显示全部楼层
imcjp 发表于 2013-7-1 21:04
另外,我想说3opt应该有8种变换,除本身外有另外7种。
假如本身是a1,a2,b1,b2,c1,c2,其中三条子路径是a ...

你3opt里应该没调用2opt吧。所以3opt里包含2opt也是必要的。因为,换3个位置的结果,并不一定比换2个位置的结果好。而且这样写有利于编程,可以用一个循环下来搞定7种情况。
另外,这7种情况里头,只有1,2,7种实质是2opt,其他4种是3opt。
经过测试,这样写的效果比你之前的代码精确度会高一些。

点评

哦,我应该是漏了 a1,c1,b2,a2,b1,c2,谢谢你的提醒。  发表于 2013-7-2 05:25
你说的第八种变换 a1,c1,b2,b1,a2,c2,貌似等价于 a1,a2,c1,c2 的之间 2opt。  发表于 2013-7-2 00:56
Public Sub local_search(tour_plan)里面,凡是3opt都一定先调用2opt优化一次的。  发表于 2013-7-2 00:40
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-29 05:34 , Processed in 0.062207 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表