蚁群算法Ant Colony Optimization-ACO

蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。这种算法具有分布计算信息正反馈启发式搜索的特征,本质上是进化算法中的一种启发式全局优化算法。[鲁棒性会比较好。]

蚁群算法的求解质量好,主要有两个方面的原因:1) 采用正反馈机制,使得蚁群搜索过程中不断收敛,最终逼近最优解。2) 使用轮盘赌算法,保证了解空间的多样性,且受初始值的影响不大。

以下是蚁群算法ACO应用到VRP问题中的注释。

1.1 蚁群算法基本思想

在蚁群算法中,蚂蚁的行走路径表示待优化问题的可行解(蚂蚁代表车辆,各个可能存放食物的点是顾客点),整个蚂蚁群体的所有路径构成待优化问题的解空间(即VRP问题的解,多个车辆构成的多个回路)。算法基本原理如下:

1) 蚂蚁在路径上释放路径长度有关的信息素。(信息素是指导蚂蚁行走的关键,也就是目标函数。)

2) 路径较短的蚂蚁释放的信息素量较多。随着时间的推进,较短的路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也愈来愈多。(路径较短,即解越好,吸引着别的蚂蚁,也就是信息素越多)。

3) 最优路径上的信息素浓度越来越大。

4) 整个蚂蚁会在正反馈的作用下集中到最佳的路径上,最终蚁群找到最优寻食路径。

1.2 蚁群算法核心步骤

(1)路径构建

路径构建包括初始城市的选择和下一个到达城市的选择。每个蚂蚁都随机选择一个城市作为其出发城市,并维护一个路径记忆表,用来存放该蚂蚁依次经过的城市。

蚂蚁在构建路径的每一步中,按照轮盘赌法选择下一个要到达的城市。其中t时刻,蚂蚁k从i城市到j城市的转移概率计算:

\alpha信息素重要程度因子;\beta启发函数重要程度因子;\gamma信息素挥发速度,越小则残留的信息素越多,也就是无效信息会继续搜索,收敛速度慢;1-rho代表残留系数。

(2)信息素更新     

在不断的研究探索中,学者们基于“信息素”的更新方式将蚁群算法分为三类模型 :

a)循环模型(cycle):每只蚂蚁可释放的信息素总量是恒定的。

b)密度模型(denseness):在蚂蚁走过一条路径后,无论该路径长度如何,所释放 的信息素浓度均相同。

c)数量模型(quantity):每只蚂蚁在同一条路径上释放的信息素浓度均相同。

在对此三类模型不断地实验与实践应用中,循环模型(通常用Q表示)因其更为合理的逻辑,在三类 模型中脱颖而出,被证明为最优模型。在后续研宄中,众多学者引入各类算法和技术, 将蚁群算法不断改进,其中主流的改进思路有三.基于信息素更新方式进行改进、基于 路径选择逻辑进行改进、引入其他算法与蚁群算法进行融合,产出了多种改进后的算法.

迭代过程中,问题空间中的所有路径上的信息素都会发生改变。其中第一部分是信息素的蒸发(弱化信息素因素,避免都往当前最好的路径上走,避免局部最优);然后,所有的蚂蚁根据自己构建的路径长度在它们本轮经过的边上释放信息素,公式如下: 

等式右边第一部分代表了信息素自身挥发后剩余的信息素;第二部分是每只蚂蚁经过路径ij留下的信息素,若蚂蚁没走过该路径,则该部分为0。

(3)蚁群算法流程

     了解了蚁群算法的基本思想后,我们来看看蚁群算法的流程图:

1) 初始化参数:信息素重要程度,启发函数重要因子,信息素挥发因子,信息素释放总量,设置迭代计数器初始值iter=0,设置最大迭代代数iteration,随机生成M个蚂蚁个体作为初始群体P(0)。 

2) 个体评价:计算群体P(t)中各蚂蚁个体的适应度, 对于TSP/VRP问题适应度函数就是指路径长度的计算。

3) 解空间构建:解空间即路径构建,包括蚁群的初始城市选择下一个到达城市的选择。首先随机给蚁群分配出发点,然后根据(2)节转移概率(会用到信息素矩阵)构建式子(以及轮盘赌)选择下一个访问的城市,直到所有蚂蚁访问完所有的城市。

4) 信息素更新:计算各个蚂蚁经过的路径长度,并根据信息素更新公式对各个城市连接路径上的信息素浓度进行更新。

5)终止条件判断:若iter=iteration,则以过程中所得到的具有最大适应度个体作为最优解输出,终止计算。

注,程序设计中会用到的参数:

候选解为蚂蚁个数*城市个数组成的矩阵。即每一次迭代中,一只蚂蚁有一条自己的路径,则每次迭代中,共有蚂蚁个数条解。

path_best为每次迭代生成的最好解所存的矩阵。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值