群智能(Swarm intelligence)

自然界动物群,称之为群。

群的特征:

  • 相互作用的相邻个体的集合
  • 个体的行为简单,既有竞争又有协作
  • 智能化的集体行为(1+1>2):
    • 个体间不仅能够交互信息,还能够处理信息,根据信息改变自身行为
    • 没有一个集中控制中心,分布式、自组织
    • 作为群体协同工作时,展现出非常复杂的行为特征——智能

任何一种由昆虫群体或其他动物社会行为机制而激发设计出的算法或分布式解决问题的策略都属于群智能算法

典型算法:

  • 粒子群 PSO
  • 蚁群 ACO
  • 人工鱼群 AFSA
  • 人工蜂群 ABCA

算法原理:蚁群觅食

模拟自然界蚁群觅食(从巢穴到食物的最佳路径的行为)的过程。

  • 自然界中,蚂蚁会在觅食路上留下”信息素“来作为前往食物所在地的标记。
  • 信息素会逐渐挥发,蚂蚁倾向于沿着”信息素“浓度更高的路径前往食物所在地。
  • 信息素浓度更高的路径上蚂蚁会更多
  • 最后,几乎所有蚂蚁会选择更短的路径

算法步骤

TSP 问题示例

路径构建/构造解空间

对每只蚂蚁选择下一个城市,直到遍历所有的城市

蚂蚁 \(k\) 从城市 \(i\) 到城市 \(j\) 的概率为:

\[p_{ij}^k = \begin{cases} \frac{\tau_{ij}^\alpha (t)* \eta_{ij}^\beta}{\sum_{s \in \phi_k} \tau_{is}^\alpha (t)* \eta^{\beta}_{is}},& j \in \phi_k \\ 0,& otherwise \end{cases}
\]
  • \(i, j\) 分别为起点和终点
  • \(\eta_{ij} = 1 / d_{ij}\) 为能见度,是两点 \(i, j\) 距离的倒数
  • \(\tau_{ij}(t)\) 为时间 \(t\) 时由 \(i\) 到 \(j\) 的信息素强度
  • \(\phi_k\) 为尚未访问过的节点集合
    • 这个尚未访问过的节点集合是什么意思?每只蚂蚁需要存储自己去过哪些城市,直到它走过了所有城市。
  • \(\alpha, \beta\) 为两个常数,分别是信息素和能见度的加权值。

更新信息素浓度

更新各城市间信息素浓度

  • 更新各城市间信息素浓度
  • \(t+1\) 次循环,城市 \(i, j\) 之间的信息素浓度为:\(\tau_{ij}(t+1) = \tau_{ij}(t) * (1- \rho) + \Delta \tau_{ij}(t), 0 < \rho < 1 \\ \Delta \tau_{ij}(t) = \sum_{k=1}^m \Delta \tau_{ij}^k(t)\)
  • \(\Delta \tau_{ij}^k(t)\) 为 t 次循环,蚂蚁 k 在 \((i,j)\) 路径上留下的信息素
  • \(\Delta \tau_{ij}(t)\) 为 t 次循环,\((i,j)\) 路径上新增的信息素
  • \(\rho\) 为信息素挥发常数

计算新增信息素浓度

  • 蚁密模型(Ant-Density):\(\Delta \tau_{ij}^k(t) = \begin{cases} Q,& if (i, j) \in \psi_k(t) \\ 0,& otherwise \end{cases}\)
  • 蚁量模型(Ant-Quantity):\(\Delta \tau_{ij}^k(t) = \begin{cases} \frac{Q}{d_{ij}},& if (i, j) \in \psi_k(t) \\ 0,& otherwise \end{cases}\)
  • 蚁周模型(Ant-Cycle):\(\Delta \tau_{ij}^k(t) = \begin{cases} \frac{Q}{L_k(t)},& if (i, j) \in \psi_k(t) \\ 0,& otherwise \end{cases}\)
  • Q 是信息素常量
  • \(L_k(t)\) 是第 \(t\) 次循环,蚂蚁 \(k\) 遍历所有城市的总路径长度
  • \(\psi_k(t)\) 是第 \(t\) 次循环,蚂蚁 \(k\) 遍历所有城市的路径集合

这里一般常用的是蚁周模型,这个式子有点奇怪,为什么所有经过的路都是平分信息素的?

参数分析

蚂蚁数量 \(m\)

  1. 过大:收敛速度减慢
  2. 过小:搜索范围减小,易过早收敛,陷入局部最优
  3. 参考值:目标图的节点数量的 1.5 倍

信息素常量 \(Q\)

  1. 过大:搜索范围减小,易过早收敛,陷入局部最优
  2. 过小:每条路径上信息含量差别较小,容易陷入混沌状态
  3. 参考值:\([0, 1000]\)

最大迭代次数

  1. 过大:运算速度过长
  2. 过小:可选路径较少,易陷入局部最优
  3. 参考值:\([0,500]\)

信息素因子 \(\alpha\)

  1. 过大:蚂蚁选择以前已经走过的路可能性加大,容易使随机搜索性减弱
  2. 过小:蚁群易陷入纯粹的随机搜索,使种群陷入局部最优
  3. 参考值:\([1, 4]\)
    • 为了使它是蚁群算法,因此参考值最小值是 \(1\) 而不是 \(0\)。

启发函数因子 \(\beta\)

  1. 过大:选择局部最短路径的可能性较大,
  2. 过小:蚁群易陷入纯粹的随即搜索,很难找到最优解
  3. 参考值:\([0,5]\)

信息素挥发因子 \(\rho\)

  1. 过大:信息素挥发过快,容易导致较优路径被排除,降低算法收敛速度
  2. 过小:以前搜索过的路径被再次选择的可能性较大,易降低算法随机性和全局搜索能力
  3. 参考值:\([0.2,0.5]\)

总结

调参的目的是在寻优和随机上找个平衡。

需要一个离群者寻找最短路径。

由于不清楚公式中值域是多少,因此这个算法事实上调参后会导致某一部分做幂次后增大/减小的不明确。

蚁群算法及 TSP 问题上的应用的更多相关文章

  1. 蚁群算法求解TSP问题

    一.蚁群算法简介 蚁群算法是对自然界蚂蚁的寻径方式进行模似而得出的一种仿生算法:蚂蚁在运动过程中,能够在它所经过的路径上留下信息素(pheromone)的物质进行信息传递,而且蚂蚁在运动过程中能够感知 ...

  2. 蚁群算法解决TSP问题

    代码实现 运行结果及参数展示 alpha=1beta=5 rho=0.1  alpha=1beta=1rho=0.1 alpha=0.5beta=1rho=0.1 概念蚁群算法(AG)是一种模拟蚂蚁觅 ...

  3. [matlab] 8.蚁群算法解决TSP问题

    城市坐标数据下载  密码:07d5 求遍历这52座城市后最后回到最初城市的最短距离 %% 第9章 蚁群算法及MATLAB实现——TSP问题 % 程序9-1 %% 数据准备 % 清空环境变量 clear ...

  4. 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示

    HTML5提供了Canvas对象,为画图应用提供了便利. Javascript可执行于浏览器中, 而不须要安装特定的编译器: 基于HTML5和Javascript语言, 可随时编写应用, 为算法測试带 ...

  5. ACS蚁群算法求解对称TSP旅行商问题的JavaScript实现

    本来以为在了解蚁群算法的基础上实现这道奇怪的算法题并不难,结果实际上大相径庭啊.做了近三天时间,才改成现在这能勉强拿的出手的模样.由于公式都是图片,暂且以截图代替那部分内容吧,mark一记. 1 蚁群 ...

  6. 蚁群算法(Java)tsp问题

      1.理论概述 1.1.TSP问题 旅行商问题,即TSP问题(旅行推销员问题.货郎担问题),是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只 ...

  7. 蚁群算法MATLAB解TSP问题

    Excel表exp12_3_1.xls中数据为: clc clear all [xdata,textdata]=xlsread('exp12_3_1.xls'); %加载20个城市的数据,数据按照表格 ...

  8. 蚁群算法简介(part3: 蚁群算法之更新信息素)

    信息素的局部更新策略   每只蚂蚁在构造出一条从起点到终点的路径后,蚁群算法还要求根据路径的总长度来更新这条路径所包含的每条边上信息素的浓度(在旅行商问题中每座城市是图中的一个节点,城市两两间有一条边 ...

  9. 蚁群算法简介(part 1:蚁群算法之绪论)

    群算法是Marco Dorigo在1992年提出的一种优化算法,该算法受到蚂蚁搜索食物时对路径的选择策略的启示.蚁群算法作为群体智能算法的一种利用分布式的种群搜索策略来寻找目标函数的最优解.蚁群算法与 ...

  10. 蚁群算法简介(part2: 蚁群算法之构造路径)

    蚁群算法主要可以分为以下几个步骤:首先,蚁群中的每只蚂蚁都根据地面上信息素浓度的大小找出一条从原点通向终点的遍历所有城市一次的路径(构造路径):然后每只蚂蚁沿着自己刚刚找到的路径回溯,在路径经过的各个 ...

随机推荐

  1. WPF 解决 ObservableCollection 提示 Cannot change ObservableCollection during a CollectionChanged event 异常

    本文告诉大家在使用 ObservableCollection 时,抛出 InvalidOperationException 异常,提示 Cannot change ObservableCollecti ...

  2. 日志服务 HarmonyOS NEXT 日志采集最佳实践

    背景信息 随着数字化新时代的全面展开以及 5G 与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求.在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足 ...

  3. htts证书申请

    https://freessl.cn/ 教程: https://www.bilibili.com/video/BV1Ug411673P/?spm_id_from=333.337.search-card ...

  4. jeecg-boot中导出excel冲突问题

    jeecg-boot自带的库是autopoi,如果自定义导出excel引入poi,则需要POI版本要保持一致,否则会出现冲突的情况,导致这2个都用不了的情况. Autopoi底层用的是POI库,poi ...

  5. Gitee千Star优质项目解析: ng-form-element低开引擎解析

    好家伙, 在写项目的时候,我发现自己的平台的组件写的实在是太难看了,于是想去gitee上偷点东西,于是我们本期的受害者出现了 gitee项目地址 https://gitee.com/jjxliu306 ...

  6. [kernel] 带着问题看源码 —— 进程 ID 是如何分配的

    前言 在<[apue] 进程控制那些事儿>一文中,曾提到进程 ID 并不是唯一的,在整个系统运行期间一个进程 ID 可能会出现好多次. > ./pid fork and exec c ...

  7. 【漏洞复现】蓝凌OA sysUiComponent 任意文件上传漏洞

    阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站.服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作.利用此文所提供的信息而造成的直接 ...

  8. C#的GroupBy方法是如何工作的

    前言:先贴结果 GroupBy方法是如何工作的? 一.准备6个待分组的学生对象 class student { public string name;//姓名 public int grade;//年 ...

  9. 大数据之Hadoop中HDFS的故障排除

    NameNode故障处理 1)需求 NameNode进程挂了并且存储的数据也丢失了 2)故障模拟 (1)kill -9 NameNode进程 kill -9 19886 (2)删除NameNode储存 ...

  10. 通过 Wireshark 解密 Kerberos 票据

    前言 在使用 Wireshark 分析 Active Directory 的 Kerberos 的流量时,会遇到加密票据的情况,这对进一步探究 AD 下的漏洞篡改事件的详细过程造成了影响.在查询资料时 ...