当前位置: 首页 > news >正文

蚁群算法初探(ACO)

简介

蚁群算法是模拟蚂蚁觅食的一种算法

基础蚁群算法(ACO)

设蚂蚁数量为 m m m, d i j ( i , j = 1 , 2 , ⋯   , n ) d_{ij}(i,j=1,2,\cdots, n) dij(i,j=1,2,,n)表示城市 i i i到城市 j j j的距离, b i ( t ) b_i(t) bi(t)表示在 t t t时刻位于城市 i i i的蚂蚁个数,且有 m = ∑ i = 1 n b i ( t ) m=\sum_{i=1}^nb_i(t) m=i=1nbi(t), τ i j ( t ) \tau_{ij}(t) τij(t)表示 t t t时刻城市 i i i j j j连线残留的信息素。在初始时刻, τ i j ( 0 ) = C \tau_{ij}(0) = C τij(0)=C。蚂蚁 k k k在运行过程中,从城市 i i i到城市 j j j的概率为
p i j k = { τ i j α ( t ) ∗ η i j β ( t ) ∑ s ∈ a l l o w e d k τ i s α ( t ) ∗ η i s β ( t ) , j ∈ a l l o w e d k 0 , 其它 p_{ij}^k=\begin{cases} \frac{\tau_{ij}^\alpha (t) * \eta_{ij}^\beta(t)}{\sum_{s \in allowed_k} \tau_{is}^\alpha(t)* \eta_{is}^\beta(t)}, \quad j \in allowed_k \\ 0, \quad 其它 \end{cases} pijk= sallowedkτisα(t)ηisβ(t)τijα(t)ηijβ(t),jallowedk0,其它
其中 η i j = 1 d i j \eta_{ij} = \frac{1}{d_{ij}} ηij=dij1, α \alpha α为信息素的比重, β \beta β为启发信息的比重
信息素更新为
τ i j ( t + 1 ) = ( 1 − ρ ) τ i j ( t ) + △ τ i j △ τ i j = ∑ k = 1 m △ τ i j k \begin{aligned} & \tau_{ij}(t+1) = (1 - \rho)\tau_{ij}(t) + \triangle \tau_{ij} \\ & \triangle \tau_{ij}= \sum_{k=1}^{m} \triangle \tau_{ij}^k \end{aligned} τij(t+1)=(1ρ)τij(t)+τijτij=k=1mτijk
其中 ρ \rho ρ表示信息素 τ i j ( t ) \tau_{ij}(t) τij(t)随时间减弱的程度, ρ ∈ ( 0 , 1 ) \rho \in (0,1) ρ(0,1)
△ τ i j k \triangle \tau_{ij}^k τijk有下面的几种模型

  • Ant-Cycle System
    △ τ i j k = { Q L k , 第 k 只蚂蚁在本次循环中经过 i j 0 , 其他 \triangle \tau_{ij}^k = \begin{cases} \frac{Q}{L_k}, \quad 第k只蚂蚁在本次循环中经过ij \\ 0, \quad 其他 \end{cases} τijk={LkQ,k只蚂蚁在本次循环中经过ij0,其他
  • Ant-Quantity System
    △ τ i j k = { Q d i j , 第 k 只蚂蚁在时刻 t 和 ( t + 1 ) 之间经过 i j 0 , 其他 \triangle \tau_{ij}^k = \begin{cases} \frac{Q}{d_{ij}}, \quad 第k只蚂蚁在时刻t和(t+1)之间经过ij \\ 0, \quad 其他 \end{cases} τijk={dijQ,k只蚂蚁在时刻t(t+1)之间经过ij0,其他
  • Ant-Density System
    △ τ i j k = { Q , 第 k 只蚂蚁在时刻 t 和 ( t + 1 ) 之间经过 i j 0 , 其他 \triangle \tau_{ij}^k = \begin{cases} Q, \quad 第k只蚂蚁在时刻t和(t+1)之间经过ij \\ 0, \quad 其他 \end{cases} τijk={Q,k只蚂蚁在时刻t(t+1)之间经过ij0,其他
    算法描述为
    在这里插入图片描述

最大最小蚁群系统(MMAS)

有三个方面的改进

  • 当所有的蚂蚁完成周游后,仅对蚂蚁发现的最后路径上的信息素进行更新,该方法称为全局信息素更新
  • 每条边上的信息素限制在 [ τ m i n , τ m a x ] [\tau_{min}, \tau_{max}] [τmin,τmax]区间内
  • 信息素初始化为 τ m a x \tau_{max} τmax

小窗口蚁群算法

限制每个城市可达的 w i n d o w window window个城市(即离最近的 w i n d o w window window个城市)。即为每个城市建立一个cityWin[window],保存window个距离最近的城市,每次移动从cityWin[window]和tabu[k]的交集中选择移动的城市

应用

蚁群聚类算法,有以下几种

  • 基于蚂蚁觅食的蚁群聚类
  • 基于蚂蚁堆形成的聚类算法
  • 基于蚂蚁转移概率的k-means聚类算法

可以用在边缘检测问题上

注意

在计算得到蚂蚁在城市的转移概率 p i j k p_{ij}^k pijk后,到底是选择哪个城市可以使用概率累积和方式来选择哪个城市,先随机给出一个概率 r r r,在候选城市中,计算概率累积和,看 s u m j ∈ a l l o w e d k p i j > r sum_{j \in allowedk}p_{ij} \gt r sumjallowedkpij>r,在遍历过程中,选择此时的j即可。类似于matlab中的cumsum

相关文章:

  • STM32内部时钟输出比较OC(学习笔记)
  • Git+Fork 入门介绍
  • 辛格迪客户案例 | 北方药谷德生实施称量管理系统
  • JVM详解(包括JVM内存模型与GC垃圾回收)
  • [CSDN] 解析CSDN积分策略:每周连续上传与综合贡献分
  • AI与SEO关键词智能匹配方案
  • TailwindCSS安装教程(PostCSS)
  • 如何保证LabVIEW软件开发的质量?
  • [Vue2]Vue指令
  • 基于STC89C51单片机的储缆卷筒控制器及其结构设计
  • C++学习之云盘项目总结
  • Rust Web开发新选择:探索轻量级框架Hyperlane的高效实践
  • 消息队列(Kafka及RocketMQ等对比联系)
  • 订票系统|基于Java+vue的火车票订票系统(源码+数据库+文档)
  • 支持selenium的chrome driver更新到134.0.6998.90
  • 存储过程、存储函数与触发器详解(MySQL 案例)
  • 爱普生SG-3031CMA有源晶振在汽车雷达中的应用
  • UML之包含用例
  • 石斛基因组-文献精读122
  • 网络地址转换技术(2)
  • 怎么做网站主页/百度导航
  • 创业网站建设政策/app推广软文范文
  • 网站建设工作流程/百度爱采购官网
  • 如何做自己的论坛网站/国内10大搜索引擎
  • 建网站的软件 优帮云/教育培训机构排名
  • 什么公司做网站的多/广告电话