蚁群算法 (Ant Colony Optimization,ACO)
蚁群算法:来源于蚂蚁寻找食物的过程。
科学家发现:蚂蚁总能发现一条从蚁巢到食物源的最短路径。原因就是:它们会在经过的路途中,留下“信息素” (pheromone)作为标记,用来指导自己的活动轨迹。
比如:
图(a)中,有一群蚂蚁。假如左边(Nest)是蚁巢,右边是食物源。这群蚂蚁将会沿着蚁巢和食物源之间的直线路径走。
假如在了两点之间,突然出现了一个障碍物(图(b))。那么,这些蚂蚁要做出决策,到底是向左行驶还是向右行驶?
因为,当有蚂蚁走过时,它会在它走过的路上,释放出信息素,并且这种信息素会以一定的速率,散发掉。
⚠️:信息素就是蚂蚁之间交流的工具之一。
它后面的蚂蚁,会通过路上信息素的浓度,做出决策。
很明显,沿着短边的的路径上的信息素,会越来越浓(图(c)),然后就会吸引越来越多的蚂蚁沿着这条路径行驶(就是最短路径)。
应用
蚁群算法就是对蚂蚁的这种行为,进行抽象。
蚁群优化算法已经应用在许多的组合优化问题里面。
比如:第一个蚁群算法,就被应用在「旅行商问题」里面。
内容就是:每只蚂蚁都会沿着城市进行一次往返。 在每个阶段,蚂蚁会根据一些规则,来进行移动,比如:
- 它只能访问每个城市一次;
- 较远的城市,被选中的机会较小(因为可见度visibility小);
- 在两个城市之间的信息素越强烈,被选择的可能性就越大;
- 如果旅程很短,蚂蚁会在它经过地方,沉积更多的信息素;
- 每次迭代后,信息素的踪迹都会挥发掉。
涉及到的概念
(1) 信息素因子
信息素因子:蚂蚁在移动过程中,积累的信息素浓度。
相当于图中每一条边的权值。
(2) 启发因子
启发因子:就是启发式信息,在蚁群搜索过程中的重要程度。
它的值越大,路径选择的随机性会越弱,蚁群更倾向于选择之前走过的路径;
它的值越小,随机性越强,算法很难收敛,找不到最优解。
(3) 信息素挥发因子
因为信息素会随时间,不断挥发。
所以信息素挥发因子:表示信息素的消失水平。
它和算法的全局搜索能力和收敛速度有直接的关系。
(4) 信息素常数
信息素常数:就相当于 “信息素”。
它的值越大,表示蚂蚁在已经走过的路径上,积累的信息素越快,有助于快速收敛。
(5) 算法步骤
算法的基本步骤:
① 步骤1:定义问题。然后数据预处理。初始化参数(比如:蚁群数量、信息素因子、启发因子等参数)。
② 步骤 2:把蚂蚁「随机」放在不同的出发节点。通过计算,指定蚂蚁的下一访问节点,直到遍历完所有的节点。
③ 步骤3:每次迭代完成后,计算所有蚂蚁经过的路线,更新信息素值。路径越短,信息素的浓度越高。
④ 步骤4:判断是否达到最优解,如果没有,从步骤2开始再进行迭代。
⑤ 步骤5:输出全局最优解。