背景介绍
ACO(ant colony optimization):研究蚂蚁觅食的过程中,发现单个蚂蚁的行为比较简单,但是蚁群整体却可以体现一些智能的行为。例如蚁群可以在不同的环境下,寻找最短到达食物源的路径。蚂蚁会在其经过的路径上释放一种可以称之为信息素的物质,蚁群内的蚂蚁对信息素具有感知能力,它们会沿着信息素浓度较高路径行走,而每只路过的蚂蚁都会在路上留下信息素,形成一种类似正反馈的机制。
核心思想
1. 随机产生一些蚂蚁
2. 判断蚂蚁所在位置的值越小,信息素越多
3. 如果信息素较多,蚂蚁小幅移动,信息素较少,蚂蚁大幅移动
4. 如果蚂蚁移动之后值变小,则说明移动方向正确
5. 回到步骤2,直到满足某个终止条件
6. 此时蚂蚁集群,蚁群位置为极小值,比较可得该算法的最优解
算法流程
代码实战
代码中所用测试函数可以查看相关文档,测试函数(Test Function)
ACO_main.m
1 | clear;clc;close all; |
f.m
1 | function res=f(x) |
实验结果
$$f(x)=x \cdot \sin(\sqrt{\lvert x \rvert}) \ , \ x \in [-500,500]$$
$$理论值:f(x)_{min}=f(-420.96874592006)=-418.982887272434$$
$$所求值:f(x)_{min}=f(-420.959294517745)=-418.982875999576$$
性能比较
- 优点:
- 搜索速度较快
- 受到参数影响较小
- 从群体出发,具有并行性
- 可用于求解复杂的非线性优化问题
- 具有可扩展性,容易与其他算法结合
- 缺点:
- 对初始蚂蚁的数量有很高的要求