蚁群算法(ACA , Ant Colony Algorithm)

此文通过学习多个视频及博客总结,如有侵犯请私聊。

蚁群算法,是模仿蚂蚁的觅食行为。


一、蚂蚁是怎样找到食物的?

蚁群算法(ACA , Ant Colony Algorithm)_第1张图片

如图,假设两个点之间的距离和时间是相等的,通过观察,我们会发现,走ABD比走ACD花的时间和力气少很多。但是,从A出发还没有走过的蚂蚁,他们开始的时候,并不知道在哪一条更好。所以,他们随机地走,并且为了方便以后自己和同伴知道哪一条路比较好,他们会一边走,一遍释放一个信息素。这个信息素怎么释放才会让同伴得到有用的信息呢?假设每只蚂蚁都拿着,同等的信息素走,每个点分同等的信息素,那么ABD每个点分到的信息素一定会比ACD每个点分到的信息素要多一倍。那么同伴就可以根据,信息素的浓度的大小去感知到哪一条路更好(信息浓度越高,表示对应的路径距离越短)。

通常,蚂蚁会以较大的概率优先选择信息素浓度较高的路径。慢慢的,走ABD的蚂蚁会越来越多,每个路过的蚂蚁都会加重一下那条路的信息素。而ACD走的蚂蚁越来越少,原来有的信息素又会挥发,所以渐渐,大家都会只走ABD,除了个别有个性的蚂蚁喜欢另辟新路。

这刚好就形成了一个正反馈。最终,大家就会找到最佳的路径,即距离最短。


二、蚁群算法怎么模范?

基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短的路径上累积的信息素浓度越来越高,选择该路径的个数也会越来越多。最终,整个蚂蚁会在正反馈的作用下集中到最佳的路径上,此时对应的便是待优化问题的最优解。(遍历所有路径是最好的)

但这里要注意的是:

1.人工蚁与真实蚁一样,通过相互协调与合作从而有可能找到全局最优方案,每一只单独行动只能够找到局部最优。

2.人工蚁和真实蚁虽然都是在起始点到终点的最短,但是他们每一次只能够移动一格(只能走到相邻的节点上),知道遍历完,所以需要记录当前路径。

3.人工蚁与真实蚁一样都通过使用信息素进行间接通信,真实蚁是在经过的路径上留下信息素,人工蚁则不断修改更新所经过的路径上存储的信息。

4.信息素的挥发机制,是需要蚂蚁蚂蚁忘记过去,不受过去经验的过分约束,有利于指引蚂蚁朝新的方向搜索,避免早熟收敛。

6.利用当前信息进行路径选择的随机选择策略。利用的都是概率选择策略去实验点到点的移动。


三、遗传算法有选择、交叉、变异;粒子群有位置方向。那么蚁群有什么?

蚁群有:正反馈和信息素的推进。


四、算法的公式

(1)概率

m---整个蚁群有数量

n---城市的数量

dij(i,j=1,2,.....n)---城市i与城市j的距离为

τij(t)---t时刻城市i与城市j链接路径上的信息素浓度,初始时刻τij(0)=τ0

蚂蚁k(k=1,2..,m)根据各个城市间连接路径上的信息素浓度决定其下一个访问城市

Pij(k)---表示t时刻蚂蚁k从城市i转移到城市j的概率,其计算公式如下:


蚁群算法(ACA , Ant Colony Algorithm)_第2张图片

ηij(t)为启发函数,ηij(t)=1/dij,表示蚂蚁从城市i转移到城市j的期望程度。

α---轨迹重要性(α>0)

β---能见度的相对重要性(β>=0),值越大,启发函数在转移中的作用越大,即蚂蚁会以较大的概率转移到距离短的城市。

α和β分别反映了蚂蚁在运动过程中所积累信息,及启发因子在蚂蚁选择路径中所起的不同作用。

allow(k=1,2,...m)为除了蚂蚁k出发城市的集合。也就是蚂蚁k还没走过的城市集合。

补充:启发因子的引入是为了设计有效的蚁群算法,在决定蚂蚁行走方向的状态转移概率时,引入一个随机搜索的过程,即引入一个启发因子,根据所求问题空间的具体特征,给蚁群算法一个初始的引导,从而极大的增加算法的有效性,从而使蚁群算法的有效应用称为可能。

(2)信息素更新

在蚂蚁释放信息素的同时,各个城市连接路径上的信息素也会渐渐消失,设参数为ρ(0<ρ<1),表示信息素的挥发程度。因此,当所有蚂蚁完成一次循环后,各个城市间连接路径上的信息素浓度需要进行实时更新,具体公式如下:

蚁群算法(ACA , Ant Colony Algorithm)_第3张图片

其中(通常会有一个max和min约束)表示地k只蚂蚁在城市i与城市j连接路径上释放的信息素浓度,△τij表示所有蚂蚁在城市i与j连接路上释放的信息素浓度之和。ρ为轨迹的持久性,1-ρ为轨迹衰减度,表示消减程度。



(3)的模型

蚁群算法(ACA , Ant Colony Algorithm)_第4张图片

其中,ant quantity system 和 ant density system 是蚂蚁在两个位置节点间每移动一次后即更新信息素

ant cycle system模型是所有蚂蚁完成了所有自己的形成后才对信息素进行更新,并且每个蚂蚁所释放的信息素被表达为反映相应行程质量的函数。


五、算法基本流程

(1)初始化参数

在计算之初,需对相关的参数进行初始化,如蚁群规模(蚂蚁数量m),信息素重要程度因子α、启发函数重要程度因子β、信息素挥发因子ρ,信息素释放总量Q,最大迭代次数iter-max,迭代次数初值iter=1.

(2)构建解空间

将各个蚂蚁随机地至于各个出发点,对每个蚂蚁k,计算其下一个待访的城市,直到所有蚂蚁访问完所有的城市。

(3)更新信息素

计算各个蚂蚁经过的路径长度Lk(k=1,2,...,m),记录当前迭代次数中的最优解(最短路径)。同时,对各个城市连接路径上的信息素浓度进行更新。

(4)判断是否终止

若迭代次数到了,则输出最优解。

若还没到达,iter = iter+1,清空蚂蚁经过路径的记录表,并返回步骤(2)


流程图

蚁群算法(ACA , Ant Colony Algorithm)_第5张图片

六、蚁群算法的特点

1.采用正反馈机制、使得搜索过程不断收敛,最终逼近于最优解。

2.每个个体可以通过释放信息素来改变周围的环境,且每个个体能够感知周围环境的实时变化,个体间通过环境进行间接地通讯。

3.搜索过程采用分布式计算方式,多个个体同时进行并行计算,大大提高算法计算能力和运行效率。

4.启发式的概率搜索方式,不容易陷入局部最优,易于寻找到全局最优解。


PS:旅行商问题(TSP)概述

Traveling salesman Problem 

在N个城市中经历一次再回到出发点,是所有经过的路程最短。

若不考虑方向性和周期性,在给定N的条件下,可能存在的闭合路径数目为0.5*(N-1)!。当N较大,枚举法的计算量之大又难以想象。

TSP尝试为检验性能的一个“金标准”

七、代码

https://github.com/chocolatechu/ACA-ant-colony-Algorithm-


你可能感兴趣的:(优化)