c++求tsp问题_蚁群算法-求解TSP问题

f73db704d31d0203650fbba4254578e7.png

蚁群算法(ant colony optimization, ACO)

1 原理介绍

​ 蚁群算法(Ant Colony Algorithm)最初于1992年由意大利学者M.Dorigo等人提出,它是一种模拟自然界中真实蚁群觅食行为的仿生优化算法。研究发现:每只蚂蚁觅食时在走过的路线上会留下一种称为信息素的物质,蚂蚁之间靠感知这种物质的浓度进行信息传递。蚂蚁在选择路径时总是倾向于朝信息索浓度高的方向移动,而距离短的路径上走过的蚂蚁多,留下的信息素也多,后续蚂蚁选择它的概率也会越大;其他路径上的信息素会随着时间的推移不断挥发,这样就形成了一种正反馈机制,最后整个蚁群聚集到最短路径上。

​ 人工蚁群算法模拟了这一过程。每只蚂蚁在解空间独立地搜索可行解,解越好留下的信息素越多,随着算法推进,较优解路径上的信息素增多,选择它的蚂蚁也随之增多,最终收敛到最优或近似最优的解上。

fd51adb6591c71be3960ce2c0eeb8b7a.png

​ 蚁群优化算法最初用于解决旅行商问题(Travelling Salesman Problem,TSP),称为蚂蚁系统(Ant System,AS)。该蚂蚁系统包含了蚁周算法、蚁密算法和蚁量算法。首先来介绍蚁周算法。对于TSP问题,假设n为城市规模,i和j为任意两个城市,

equation?tex=d_%7Bi+j%7D表示城市之间的距离,
equation?tex=b_%7Bi%7D%28t%29%28i%3D1%2C+%5Cldots%2C+n%29表示t时刻在城市i蚂蚁的数量,则
equation?tex=m%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D+b_%7Bi%7D%28t%29表示蚂蚁的总数量。在遍历的过程中,把蚂蚁经过一个城市称为一次迭代,那么遍历n个城市需要n次迭代。

​ 蚂蚁系统采用

equation?tex=%5Ctau_%7B%5Cmathfrak%7Bij%7D%7D%28t%29来模仿t时刻路径i到j上面的信息残留量,即信息素浓度。类似于蚂蚁觅食过程,每条路径上面的信息素会挥发,如果有蚂蚁经过的时候,信息素的浓度会相应增加。因此,蚂蚁系统中的信息素浓度的更新公式为:

equation?tex=%5Ctau_%7Bi+j%7D%28t%2Bn%29%3D%5Crho+%5Ccdot+%5Ctau_%7Bi+j%7D%28t%29%2B%5CDelta+%5Ctau_%7Bi+j%7D%5Cquad%5Cquad%281%29+%5C%5C

式中,

equation?tex=%5Crho是一个0到1的数字,
equation?tex=%281-%5Crho%29为挥发因子。另外,
equation?tex=%5CDelta+%5Ctau_%7Bi+j%7D表示一次旅行(遍历完所有城市)后,所有路径i到j的蚂蚁留下的信息素总量,即:

equation?tex=%5CDelta+%5Ctau_%7Bi+j%7D%3D%5Csum_%7Bk%3D1%7D%5E%7Bm%7D+%5CDelta+%5Ctau_%7Bi+j%7D%5E%7Bk%7D+%5C%5C

式中,

equation?tex=%5CDelta+%5Ctau_%7Bi+j%7D%5E%7Bk%7D表示第k只蚂蚁在路径i到j上面留下的信息素量。如果第k只蚂蚁经过路径i到j,则:

equation?tex=%5CDelta+%5Ctau_%7Bi+j%7D%5E%7Bk%7D%3DQ+%2F+L_%7Bk%7D+%5C%5C

式中,Q为一个常数,

equation?tex=L_%7Bk%7D为蚂蚁已经走过路径的总长度。否则,第k只蚂蚁在i到j上面留下的信息素量为0。

​ 一般来说有了信息素浓度的更新公式,就可以直接给出蚂蚁对每条路径的选择概率了。然而,为了更好的利用TSP问题自身的性质,M.Dorigo等引入了一个启发项:

equation?tex=%5Ceta_%7Bi+j%7D%3D1+%2F+d_%7Bi+j%7D。通过结合信息素浓度和启发因子,可以得到蚂蚁选择路径i到j的概率为:

equation?tex=p_%7Bi+j%7D%5E%7Bk%7D%28t%29%3D%5Cleft%5C%7B%5Cbegin%7Barray%7D%7Bll%7D%7B%5Cfrac%7B%5Cleft%5B%5Ctau_%7Bi+j%7D%28t%29%5Cright%5D%5E%7B%5Calpha%7D%5Cleft%5B%5Ceta_%7Bi+j%7D%5Cright%5D%5E%7B%5Cbeta%7D%7D%7B%5Csum_%7Bk+%5Cin+%5Ctext+%7B+callowed+%7D%7D%5Cleft%5B%5Ctau_%7Bi+k%7D%28t%29%5Cright%5D%5E%7B%5Calpha%7D%5Cleft%5B%5Ceta_%7Bi+k%7D%5Cright%5D%5E%7B%5Cbeta%7D%7D%2C%7D+%26+%7Bj+%5Cin+%5Ctext+%7B+allowed+%7D_%7Bk%7D%7D+%5C%5C+%7B0%2C%7D+%26+%7B%5Ctext+%7B+else+%7D%7D%5Cend%7Barray%7D%5Cright.%5Cquad%5Cquad+%282%29+%5C%5C

式中,

equation?tex=%5Calpha
equation?tex=%5Cbeta是调节因子,用于调节
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值