蚁群优化 (Ant Colony Optimization, ACO)算法最早由 Dorigo于1991年在其博士论文中提出, 后期研究工作则由 Dorigo 和其同事共同进行。1996 年发表的《Ant system : optimization by a colony of cooperating agents》奠定了蚁群优化算法的基础。
蚂蚁觅食活动
蚁群算法的基本思想来源于自然界蚂蚁觅食的活动过程。觅食的开始时间,单个蚂蚁不具备足够高的智慧,运动路径杂乱无章,但在一定时间后,蚁群中的蚂蚁会聚集在最短路径上。
昆虫学家在研究蚂蚁的上述过程中发现,蚂蚁与蚂蚁之间最重要的通讯媒介就是它们在移动过程中所释放的特有的分泌物— 信息素。当一个孤立的蚂蚁随机移动时,它能检测到其他同伴所释放的信息素,并沿着该路线移动,同时又释放自身的信息素,从而增强了该路线上的信息素数量。随着越来越多的蚂蚁通过该路线,一条最佳的路径就会逐渐形成。
从上述过程中可以看出,蚁群算法是群智能算法,它是由一群无智能或有轻微智能的个体通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的方法。该算法具有鲁棒性强、全局搜索、并行分布式计算、易与其他 问题结合等优等优点,其应用领域在不断扩张。
算法框架:
算法框架
蚁群算法步骤:
1.设置蚁群大小
蚂蚁的个数N,即在搜索空间中找出N组解
2.构建觅食空间
构建问题解的离散搜索空间[表现为维数D]
3.设置信息素函数
信息素释放总量 [] : 蚂蚁循环一周时释放在路径上的信息素总量 。
信息素矩阵:
信息素矩阵初始化:可以通过贪心算法计算出一个局域最优解,利用信息素矩阵计算公式进行初始化
信息素权重[:蚂蚁在移动过程中所积累的信息量在对蚂蚁搜索路径是的重要程度 ,权重越大,则蚂蚁选择走过的路径概率越大,搜索的随机性减弱。
信息素挥发因子[]:表示每一代蚂蚁走完之后留下的信息素的挥发程度,其值越小,则挥发程度越小,会导致算法收敛速度过快,全局搜索能力较弱
4.设置启发函数
启发性矩阵 [] : 一般设置为距离的倒数
启发因子 [] :启发函数因子反映了启发式信息在指导蚁群搜索过程中的相对重要程度.
5.计算选择概率
选择概率:蚂蚁在搜索空间中选择下一个未曾走过的节点[搜索禁忌表之外的点]的概率:
计算出禁忌表之外各个节点的选择概率后,轮盘赌来选择其中一个节点
6.更新信息素矩阵
信息素矩阵更新:在每代中的所有蚂蚁走完搜索空间后,计算出所有蚂蚁的信息残留值,结合之前的信息素挥发,进行更新
7.设置迭代次数
迭代次数:蚁群寻优的次数,迭代次数较小,可能导致算法没有收敛
上述过程为经典的基本蚁群算法,在此基础上有相应的算法改进,产生了:精英策略的蚂蚁系统 (Elitist Ant System),基于排列的蚂蚁系统 (Rank-based AS)和最大最小蚂蚁系统(MAX-MIN Ant System)
简单应用:
TSP问题:
旅行家要旅行m个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短
对城市数量较小的TSP问题,可以通过动态规划算法[DP算法]来解决[以m=4为例]:
DP算法
DP算法是通过构建状态转移方程,自底向上逐步求值,利用前一步求出的结果计算后一步的值, 最后一步为整个问题的最优值,即所求最短路径长度。但DP算法消耗空间大,当所给出范围很大时,堆栈中很可能并不能满足所需要的空间大小。
启发性算法对城市数目较大的TSP问题,仍然能很好的处理,采用蚁群算法处理TSP问题:
选取30座城市坐标:
城市坐标
利用蚁群算法计算出的最小路径:
对于m个城市[m=30],可设置一个蚁群中有m个蚂蚁,通过贪心算法给出一组路径值,通过该值和总的信息素来初始化信息素矩阵[ ],基于城市之间的距离矩阵[]来初始化启发性函数矩阵[ ]。第一代蚁群中的蚂蚁基于初始化的信息素矩阵和启发性矩阵从某一城市随机游走到一圈回到该城市,在蚁群中的所有蚂蚁游走完后,更新信息素矩阵。第二代蚂蚁基于更新后的信息素矩阵,再随机游走.....依次更新信息素矩阵,全局最优路径上的信息素含量较高,蚂蚁逐渐聚集在全局最优的路径上。当算法收敛时,结束迭代。
最终给出的路径如下:
蚁群算法给出的最优路径
通过之前介绍的退火算法给出路径:
退火算法给出的最优路径
通过两个算法给出的最优路径对比,可以看出蚁群算法的可靠性。
将城市扩展到300座:
300座城市坐标
蚁群算法给出的最优路径:
蚁群算法给出的最优路径