C++ 使用蚁群算法解决TSP问题 续

本文探讨了使用C++实现蚁群算法解决旅行商问题(TSP)时遇到的问题,主要集中在参数设置和蚂蚁选择路径的策略上。作者指出,蚂蚁不应仅选择信息素最多路径,而应考虑距离因素。通过分析信息素挥发速率、出错概率等参数的影响,强调了参数选择的复杂性和寻找平衡的重要性。文章指出目前实现存在的不足,如收敛与发散的协调问题,以及效率低下。最后,作者表达了对更优解决方案的探索意愿。
摘要由CSDN通过智能技术生成

之前的文章:

c++ 使用蚁群算法解决TSP问题。

之前写完代码后,运算时,发现无法得到最佳值,首先我想到的原因是其中几个系数的选取。如信息素的挥发速率,使之前的信息素对之后的选择的效率达到一个合理的值。如蚂蚁出错的概率,一个合适的值可以使蚂蚁能够寻找最佳的路径并不收敛于一种路径,同时又能巩固已发现较短路径上的信息素残留值。

但是后来才发现,我的程序里得不到最佳值的原因是并未完全理解蚁群算法。在蚂蚁选择路径时,是选择信息素最多的路径还是选择距离较短的路径?如何使蚂蚁从信息素最多的路径转向选择距离较短的路径。蚁群寻找食物的算法中是这样解说的:

当有两条路径时,一条距离长,一条距离短,则距离短的路径上每只蚂蚁每次经过时,留下更多的信息素,因为它们来回一趟的时间更断,则在一段时间内的来回更多次,留下更多信息素,以使更多的蚂蚁来到这条路径,最后距离短的路径上的信息素浓度会超过距离长的路径上的浓度,而成为当前的较佳路径。

则在这里,我们可以发现,对于一种场景下,有两条路径时,蚂蚁绝对不是直接的去选取信息素浓度最高的路径,而是平均的分配,使一定量的蚂蚁可以沿着信息素浓度较低的新路径去寻找食物。而我之前的程序中是强制蚂蚁去选取信息素最大的路径,这样就不会出现当一条较好路径出现并逐渐取代之前路径的情况。

由此,可以发现,这里的几个参数常量的设定就更加复杂了。蚂蚁的数量应该合理,而一条当前最优的路径上信息素浓度虽然由于有较多的蚂蚁经过导致积聚很多,但是不能远大于 当一只蚂蚁找到更优路径时所留下的信息素量,否则之后的蚂蚁就会忽略这一只蚂蚁所寻找到的更优的路径,而为此,要调整蚂蚁的数量,蚂蚁的数量要多,以使每一条较优路径都应该被执行,但又不能太多,以使当前最优路径上留下的信息素远大于其他路径上的信息素,又要考虑信息素消散的速率,使其能保证较劣路径上信息素能较早消失,而又使新出现的较优路径上的信息素能狗被蚂蚁察觉。又要考虑出错的概率,出错的最好效果是对于当前信息素浓度最高的路径使其最后一次选择时留下的蚂蚁数 大于 1 而尽量小,使其即能保存最优的路径,又能尽可能多的去寻找新的路径,对于蚂蚁,前面有多条路径,而出错又该如何选择,直接随机选取任意一条路径。但是我们要从所有路径中根据信息素量来平均分配蚂蚁数,要考虑如何取值才能使较优路径上的信息素量不过原小于当前最优的路径上的信息素。这里面的参数选取是极其复杂的。接下来,我们还是以 10个 城市的情况下进行分析:

首先,我选择了 100只蚂蚁,因为蚂蚁数太少的话,会在之后的路径中对于主路径没有足够的蚂蚁去行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值