蚁群(ACO)算法简介

蚁群(ACO)算法简介

  • 前言
  • [一、 ACO简介](#一、 ACO简介)
    • [1. 起源](#1. 起源)
    • [2. 思想](#2. 思想)
    • [3. 基本概念](#3. 基本概念)
      • [3.1 并行](#3.1 并行)
      • [3.2 禁忌表](#3.2 禁忌表)
      • [3.3 启发式信息](#3.3 启发式信息)
    • [4. 流程](#4. 流程)

前言

生活中我们总能看到一群蚂蚁按照一条非常有规律的路线搬运食物回到巢穴,而且每只蚂蚁的路线都是近似相同且较优的,这种方法如果运用到我们的优化计算中效果会不会很好呢?

一、 ACO简介

1. 起源

蚁群系统(Ant System或Ant Colony System)是由意大利学者Dorigo、Maniezzo等人于20世纪90年代首先提出来的。他们在研究蚂蚁觅食的过程中,发现单个蚂蚁的行为比较简单,但是蚁群整体却可以体现一些智能的行为。

百度百科定义:蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。

2. 思想

将起点到食物源的路径视为待优化问题,蚂蚁行走的路径视为问题的可行解,整体蚂蚁群体的所有路径构成问题的解空间;

蚂蚁群体之所以能找最短路径,主要依赖于信息素这一机制,蚂蚁在行走过程中会释放信息素,每次往返时间最短的蚂蚁重复频率最快,在路径上所留下的信息素最多,久而久之,对应的路径上的信息素越来越多,其他蚂蚁根据信息素的浓度会优先选择浓度最高的路径,也就是最短路径。

3. 基本概念

3.1 并行

蚁群算法中每只蚂蚁的搜索相对独立,可以同时在多点开始进行独立的解搜索,有效地提高了全局搜索能力

3.2 禁忌表

禁忌表,用于存放第 k k k 只蚂蚁已经走过的城市

3.3 启发式信息

蚂蚁 k k k 从城市 i i i 转移到 j j j 的期望程度(即概率)

4. 流程

  1. 初始化蚂蚁群体数量 m m m,城市数量 n n n,信息素重要程度因子 α α α,启发式函数重要因子 β β β,信息素挥发因子 ρ ρ ρ

  2. 每只蚂蚁随机选择一座城市并行出发

  3. 根据信息素浓度和启发式信息选择下一座城市,下为蚂蚁 k k k 从城市 i i i 转移到城市 j j j 的概率公式

    τ i , j ( t ) τ_{i,j}(t) τi,j(t)为时间为 t t t 时城市 i i i 到城市 j j j 的信息素浓度, α α α 为信息素重要程度因子(超参数);
    η i , j ( t ) η_{i,j}(t) ηi,j(t)为时间为 t t t 时从第 i i i 座城市到第 j j j 座城市的启发信息, β β β为启发式函数重要因子(超参数);
    η i , j ( t ) = 1 / d i , j η_{i,j}(t)=1/{d_{i,j}} ηi,j(t)=1/di,j, d i , j d_{i,j} di,j为第 i i i 座城市到第 j j j 座城市的欧几里得距离;
    a l l o w e d k allowed_k allowedk为蚂蚁k在城市 i i i 的可选择后续城市集合。

  4. 每只蚂蚁从第 i i i 座城市走到第 j j j 座城市进行局部信息素更新
    τ i , j ( t ) = ( 1 − ϑ ) τ i , j ( t ) + ϑ τ 0 τ_{i,j}(t) = (1− ϑ)τ_{i,j}(t)+ϑτ_0 τi,j(t)=(1−ϑ)τi,j(t)+ϑτ0

    ϑ为局部信息素更新因子

  5. 当所有蚂蚁都完成了一次循环,进行全局信息素更新
    τ i , j ( t + 1 ) = ( 1 − ρ ) τ i , j ( t ) + ρ Δ τ i , j ( t ) τ_{i,j}(t+1) = (1− ρ)τ_{i,j}(t)+ρΔτ_{i,j}(t) τi,j(t+1)=(1−ρ)τi,j(t)+ρΔτi,j(t)

    Δ τ i , j ( t ) = ∑ k = 1 m Δ τ i , j k ( t ) Δτ_{i,j}(t) =∑^m_{k =1}Δτ^k_{i,j}(t) Δτi,j(t)=∑k=1mΔτi,jk(t)

    Q是信息素强度的初始值; L k L_k Lk是蚂蚁 k k k 的迭代路径的总长度, ρ ρ ρ为信息素挥发因子 。

相关推荐
澈2073 分钟前
堆排序:高效构建大顶堆实战
数据结构·算法·排序算法
我真不是小鱼25 分钟前
cpp刷题打卡记录27——无重复字符的最长子串 & 找到字符串中所有字母的异位词
数据结构·c++·算法·leetcode
XuecWu330 分钟前
原生多模态颠覆Scaling Law?解读语言“参数需求型”与视觉“数据需求型”核心差异
人工智能·深度学习·算法·计算机视觉·语言模型
We་ct30 分钟前
LeetCode 69. x 的平方根:两种解法详解
前端·javascript·算法·leetcode·typescript·平方
一直不明飞行32 分钟前
C++:string,写法s.find(‘@‘) != s.end()是否有问题
开发语言·c++·算法
Proxy_ZZ044 分钟前
打造自己的信道编码工具箱——Turbo、LDPC、极化码三合一
c语言·算法·信息与通信
wayz111 小时前
21天机器学习核心算法学习计划(量化方向)
学习·算法·机器学习
穿条秋裤到处跑1 小时前
每日一道leetcode(2026.04.09):区间乘法查询后的异或 II
算法·leetcode
超级大只老咪1 小时前
一维度前缀和解题通用模板(java)
java·开发语言·算法
weixin_513449961 小时前
walk_these_ways项目学习记录第十篇(通过行为多样性 (MoB) 实现地形泛化)--从仿真到部署
人工智能·学习·算法