蚁群优化算法(Ant Colony Optimization,ACO)是2006年发表在“IEEE Computational Intelligence Magazine ”的优化算法,至今直接引用3k+,是最经典的优化算法之一
01.引言
群体智能是一种相对较新的解决问题的方法,它从昆虫和其他动物的社会行为中汲取灵感。特别是,蚂蚁激发了许多方法和技术,其中研究最多和最成功的是称为蚁群优化的通用优化技术。蚁群优化 (ACO) 从一些蚂蚁物种的觅食行为中汲取灵感。这些蚂蚁将信息素沉积在地面上,以标记一些有利的道路,蚁群的其他成员应该遵循这条道路。蚁群优化利用类似的机制来解决优化问题。从 90 年代初提出第一个蚁群优化算法开始,ACO 吸引了越来越多研究人员的关注,现在有许多成功的应用可用。此外,大量的理论结果正在可用,为研究人员和从业者进一步应用 ACO 提供了有用的指导。
02.算法原理简介及算法实现流程(文末附代码)
一、算法原理简介
1. 核心思想
ACO的核心是通过蚂蚁的协作和信息素(pheromone)机制引导搜索方向。在连续优化中,这一思想演变为:
-
概率模型:使用高斯核函数描述解空间分布,通过均值和标准差动态调整搜索范围。
-
信息素更新:保留历史优质解(存档),通过权重和概率选择机制更新搜索方向。
2. 关键步骤
-
初始化:随机生成初始种群,作为蚂蚁的初始解。
-
构建新解:根据历史解的均值和标准差生成新解(模拟蚂蚁路径)。
-
选择与更新:保留优质解,更新高斯核参数,逐步收敛到最优区域。
3. 数学基础
-
高斯核函数:每个解的高斯分布由均值(历史解位置)和标准差(解的分散程度)定义。
-
权重计算:优质解被赋予更高权重,影响后续解的生成概率。
-
轮盘赌选择:按权重概率选择高斯核,确保搜索的多样性与收敛性。
二、算法流程(结合代码)
1.初始化参数
% 初始化种群
for i=1:nPop
pop(i).Position = initialization(1,nVar,VarMax,VarMin);
pop(i).Cost = CostFunction(pop(i).Position);
end
% 排序并保存最优解
[~, SortOrder] = sort([pop.Cost]);
pop = pop(SortOrder);
BestSol = pop(1);
-
功能:生成初始解并评估适应度,排序后选择最优个体
-
关键参数:nPop(种群大小)、VarMin/VarMax(变量范围)。
2. 主循环(迭代优化)
for it=1:MaxIt
% 计算均值和标准差
s = zeros(nPop,nVar);
sigma = zeros(nPop,nVar);
for l=1:nPop
s(l,:) = pop(l).Position;
D = sum(abs(s(l,:)-s(r,:))); % 计算解间距离
sigma(l,:) = zeta*D/(nPop-1); % 更新标准差
end
-
功能:计算当前种群的均值和标准差,用于生成新解的高斯分布。
-
关键参数:zeta(标准差缩放因子)。
3.生成新解
% 轮盘赌选择高斯核
l = RouletteWheelSelection(p);
% 生成新解
newpop(t).Position(i) = s(l,i) + sigma(l,i)*randn;
-
功能:通过轮盘赌选择历史解的高斯核,生成服从该分布的新解。
-
关键函数:RouletteWheelSelection(按权重选择核)。
4.合并与选择
pop = [pop; newpop];
[~, SortOrder] = sort([pop.Cost]);
pop = pop(SortOrder(1:nPop));
-
功能:合并新旧种群,保留适应度最高的nPop个解。
-
核心逻辑:通过精英保留策略保证算法收敛性。
5.更新最优解
BestSol = pop(1);
BestCost(it) = BestSol.Cost;
-
功能:记录当前迭代的最优解及其适应度。
模块 | 功能描述 | 对应代码段 |
---|---|---|
初始化 | 生成初始解并排序 | for i=1:nPop 循环 |
主循环 | 迭代优化过程 | for it=1:MaxIt 循环 |
高斯核计算 | 计算均值和标准差 | s和 |
新解生成 | 通过轮盘赌选择生成新解 | newpop(t).Position(i) |
种群合并与选择 | 合并新旧解并保留精英 | pop = [pop; newpop] |
结果记录 | 保存每轮最优解 | BestCost(it)=BestSol.Cost |
ACO代码实现了针对连续优化问题的蚁群算法,通过动态调整高斯核参数和轮盘赌选择机制,在解空间中高效搜索全局最优。其核心优势在于结合了群体智能的自适应性和概率模型的数学严谨性,适用于复杂非线性优化场景。
M. Dorigo, M. Birattari and T. Stutzle, "Ant colony optimization," in IEEE Computational Intelligence Magazine, vol. 1, no. 4, pp. 28-39, Nov. 2006, doi: 10.1109/MCI.2006.329691.
https://ieeexplore.ieee.org/document/4129846
3.近年来相关论文发表
蚁群优化算法依旧活跃
04.本文代码效果图
05.部分代码
function [bestf,bestx,BestCost]=ACO(nPop,MaxIt,VarMin,VarMax,nVar,CostFunction)
%% Problem Definition
% VarMin= Decision Variables Lower Bound
% VarMax= Decision Variables Upper Bound
% MaxIt= Maximum Number of Iterations
% nPop=Population Size (Archive Size)
VarSize=[1 nVar]; % Variables Matrix Size
nSample=40; % Sample Size
q=0.5; % Intensification Factor (Selection Pressure)
zeta=1; % Deviation-Distance Ratio
%% Initialization
% Create Empty Individual Structure
empty_individual.Position=[];
empty_individual.Cost=[];
% Create Population Matrix
pop=repmat(empty_individual,nPop,1);
% Initialize Population Members
for i=1:nPop
% Create Random Solution
% pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
pop(i).Position=initialization(1,nVar,VarMax,VarMin);
% Evaluation
pop(i).Cost=CostFunction(pop(i).Position);
end
% Sort Population
[~, SortOrder]=sort([pop.Cost]);
pop=pop(SortOrder);
% Update Best Solution Ever Found
BestSol=pop(1);
% Array to Hold Best Cost Values
BestCost=zeros(MaxIt,1);
% Solution Weights
w=1/(sqrt(2*pi)*q*nPop)*exp(-0.5*(((1:nPop)-1)/(q*nPop)).^2);
% Selection Probabilities
p=w/sum(w);
%% ACOR Main Loop
for it=1:MaxIt
% Means
s=zeros(nPop,nVar);
for l=1:nPop
s(l,:)=pop(l).Position;
end
% Standard Deviations
sigma=zeros(nPop,nVar);
for l=1:nPop
D=0;
for r=1:nPop
D=D+abs(s(l,:)-s(r,:));
end
sigma(l,:)=zeta*D/(nPop-1);
end
% Create New Population Array
newpop=repmat(empty_individual,nSample,1);
for t=1:nSample
% Initialize Position Matrix
newpop(t).Position=zeros(VarSize);
% Solution Construction
for i=1:nVar
% Select Gaussian Kernel
l=RouletteWheelSelection(p);
% Generate Gaussian Random Variable
newpop(t).Position(i)=s(l,i)+sigma(l,i)*randn;
end
% Evaluation
newpop(t).Cost=CostFunction(newpop(t).Position);
end
% Merge Main Population (Archive) and New Population (Samples)
pop=[pop
newpop]; %#ok
% Sort Population
[~, SortOrder]=sort([pop.Cost]);
pop=pop(SortOrder);
% Delete Extra Members
pop=pop(1:nPop);
% Update Best Solution Ever Found
BestSol=pop(1);
% Store Best Cost
BestCost(it)=BestSol.Cost;
% Show Iteration Information
% disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
end
%% Results
bestf = BestCost(end);
bestx = BestSol.Position;
end
function j=RouletteWheelSelection(P)
r=rand;
C=cumsum(P);
j=find(r<=C,1,'first');
end
✅作者简介:信号处理方向在校博士研究生,目前专研于MATLAB算法及科学绘图等,熟知各种信号分解算法、神经网络时序、回归和分类预测算法、数据拟合算法以及滤波算法。提供一个可以相互学习相互进步的平台
🚩技术信仰:知行合一,让每一行代码都成为解决问题的利器
🔍后台私信备注个人需求(比如TOC-BP)定制以下TOC算法优化模型(看到秒回):
1.回归/时序/分类预测类:BP、RF、XGBoost、RBF、LSSVM、SVM、ELM、DELM、ESN、RELM等等均可,优化算法优化BP为例,可达到以下效果:
2.分解类:EEMD、VMD、REMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可,优化算法优化VMD/ICEEMDAN为例,可达到以下效果:
(2)基于改进天鹰优化算法(IAO)优化ICEEMDAN参数
3.去噪算法算法类:VMD/CEEMDAN/ICEEMDAN/SVMD+小波阈值/SVD去噪,可在去噪算法前加智能优化算法优化参数以VMD-WT/SVD为例,可达到以下效果: