✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。
更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)
⛄一、蚁群算法简介
1 蚁群算法(ant colony algorithm,ACA)起源和发展历程
Marco Dorigo等人在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,于是在1991年在其博士论文中首次系统地提出一种基于蚂蚁种群的新型智能优化算法“蚂蚁系统(Ant system,简称AS)”,后来,提出者及许多研究者对该算法作了各种改进,将其应用于更为广泛的领域,如图着色问题、二次分配问题、工件排序问题、车辆路径问题、车间作业调度问题、网络路由问题、大规模集成电路设计等。近些年来,M.Dorigo等人把蚂蚁算法进一步发展成一种通用的优化技术“蚁群优化(Ant Colony Optimization,简称ACO)”,并将所有符合ACO框架的算法称为“蚁群优化算法(ACO algorithm)”。
具体来说,各个蚂蚁在没有事先告知食物在什么地方的前提下开始寻找食物。当一只找到食物以后,它会向环境释放一种挥发性分泌物pheromone (称为信息素,该物质随着时间的推移会逐渐挥发消失,信息素浓度的大小表征路径的远近)信息素能够让其他蚂蚁感知从而起到一个引导的作用。通常多个路径上均有信息素时,蚂蚁会优先选择信息素浓度高的路径,从而使浓度高的路径信息素浓度更高,形成一个正反馈。有些蚂蚁并没有像其它蚂蚁一样总重复同样的路,他们会另辟蹊径,如果另开辟的道路比原来的其他道路更短,那么,渐渐地,更多的蚂蚁被吸引到这条较短的路上来。最后,经过一段时间运行,可能会出现一条最短的路径被大多数蚂蚁重复着。最终,信息素浓度最高的路径即是最终被蚂蚁选中的最优路径。
与其他算法相比,蚁群算法是一种比较年轻的算法,具有分布式计算、无中心控制、个体之间异步间接通信等特点,并且易于与其他优化算法相结合,经过不少仁人志士的不断探索,到今天已经发展出了各式各样的改进蚁群算法,不过蚁群算法的原理仍是主干。
2 蚁群算法的求解原理
基于上述对蚁群觅食行为的描述,该算法主要对觅食行为进行以下几个方面模拟:
(1)模拟的图场景中包含了两种信息素,一种表示家,一种表示食物的地点,并且这两种信息素都在以一定的速率进行挥发。
(2)每个蚂蚁只能感知它周围的小部分地方的信息。蚂蚁在寻找食物的时候,如果在感知范围内,就可以直接过去,如果不在感知范围内,就要朝着信息素多的地方走,蚂蚁可以有一个小概率不往信息素多的地方走,而另辟蹊径,这个小概率事件很重要,代表了一种找路的创新,对于找到更优的解很重要。
(3)蚂蚁回窝的规则与找食物的规则相同。
(4)蚂蚁在移动时候首先会根据信息素的指引,如果没有信息素的指引,会按照自己的移动方向惯性走下去,但也有一定的机率改变方向,蚂蚁还可以记住已经走过的路,避免重复走一个地方。
(5)蚂蚁在找到食物时留下的信息素最多,然后距离食物越远的地方留下的信息素越少。找到窝的信息素留下的量的规则跟食物相同。蚁群算法有以下几个特点:正反馈算法、并发性算法、较强的鲁棒性、概率型全局搜索、不依赖严格的数学性质、搜索时间长,易出现停止现象。
蚂蚁转移概率公式:
公式中:是蚂蚁k从城市i转移到j的概率;α,β分别为信息素和启发式因子的相对重要程度;为边(i,j)上的信息素量;为启发式因子;为蚂蚁k下步允许选择的城市。上述公式即为蚂蚁系统中的信息素更新公式,是边(i,j)上的信息素量;ρ是信息素蒸发系数,0<ρ<1;为第k只蚂蚁在本次迭代中留在边(i,j)上的信息素量;Q为一正常系数;为第k只蚂蚁在本次周游中的路径长度。
在蚂蚁系统中,信息素更新公式为:
3 蚁群算法的求解步骤:
(1)初始化参数在计算之初,需要对相关参数进行初始化,如蚁群规模(蚂蚁数量)m、信息素重要程度因子α、启发函数重要程度因子β、信息素会发银子ρ、信息素释放总量Q、最大迭代次数iter_max、迭代次数初值iter=1。
(2)构建解空间将各个蚂蚁随机地置于不同的出发点,对每个蚂蚁k(k=1,2,3…m),按照(2-1)计算其下一个待访问城市,直到所有蚂蚁访问完所有城市。
(3)更新信息苏计算每个蚂蚁经过路径长度Lk(k=1,2,…,m),记录当前迭代次数中的最优解(最短路径)。同时,根据式(2-2)和(2-3)对各个城市连接路径上信息素浓度进行更新。
(4) 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。
(5)判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。3. 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。
⛄二、部分源代码
%蚁群算法 仿真程序
%=========================================================================
% 主要符号说明
% a、b 要找出最优的参数
% N 参数分为N等份
% NC_max 最大迭代次数
% m 每个点上蚂蚁个数
% T 信息素浓度
% Rho 信息素蒸发系数
% Q 信息素增加强度系数
%=========================================================================
clear all
clc
tt=1:1:5;
for ii=1:5
%%第一步:初始化
a=[0:10];
b=[0:10];
N=10;
m=100; %蚂蚁个数
Rho=0.9;%蒸发系数
e=0.03;%终止条件
NC_max=5;%最大迭代次数
Q=200;%信息素增加强度系数
T=ones(2,N);%初始化浓度
maxa=max(a);mina=min(a);
maxb=max(b);minb=min(b);
tic
z=1;%循环条件
while z
A=zeros(2,N);
qa=0;
qb=0;
%对a、b进行分段找节点,应该可以简化
qa=(maxa-mina)/N;
qb=(maxb-minb)/N;
for i=1:N
if i1
A(1,i)=qa/2+mina;
else
A(1,i)=A(1,i-1)+qa;
end
end
for i=1:N
if i1
A(2,i)=qb/2+minb;
else
A(2,i)=A(2,i-1)+qb;
end
end
%判断是否符合条件,如果符合输出结果
if max(qa,qb)<e
J1=(maxa+mina)/2;
J2=(maxb+minb)/2;
z=0;%终止条件
else
%%%第二代采用直接求最值的方法
tal=ones(N,N);
L=4;
while L<5
% 将m个蚂蚁随机放在初始节点上
Randpos=[];
Randpor=[];
for i=1:(ceil(m/(N)))
Randpos=[Randpos,randperm(N)];
end
Ts=(Randpos(1:m));
for j=1:(ceil(m/(N)))
Randpor=[Randpor,randperm(N)];
end
Tr=(Randpor(1:m));
for k=1:m %只修改了有蚂蚁的节点信息量
i=Ts(k);
j=Tr(k);
snr=ZSYSR(A(1,i),A(2,j));%用此a、b来计算信噪比,并以此SNR更新信息素
tc1=0;
tc2=0;
if isnan(snr)
if tc1==0
%找出概率最大值,蚂蚁移动到该节点
for i=1:N
maxpp=max(tal(:,i));
maxp(i)=maxpp(1);
end
for i=1:N
for j=1:N
if tal(j,i)==maxp(i)
uu(j)=i;
vv(j)=j;
end
end
end
ttt=length(uu);%有几列则tt的值应该就是几,此处为N
bb=ttt;
if bb~=0 %b怎么可能为0
TTs=[];
TTr=[];
for w=1:ceil(m/ttt)
for k=1:ttt
TTs((w-1)*ttt+k)=uu(k);
TTr((w-1)*ttt+k)=vv(k);
end
end
Ts=TTs(1:m);
Tr=TTr(1:m);
% 按更新方程修改各节点信息量, 每列的蚂蚁都到一点,所以有些点修改了很多次
%而蚂蚁移走的节点信息素未改变,难道不考虑挥发
end
end
end
else
end
L=L+1;
end
s=zeros(N);
if tc1==0
for i=1:N
tal;
ta(i)=max(tal(:,i));
g=find(tal(:,i)==max(tal(:,i)));
sl(i)=g(1);
end
v=find(ta==max(ta));
d2=v(1);
d1=sl(d2);
%细化区间
mina=A(1,d1)-ceil(N/8)*qa;
if mina<0
mina=0;
end
end
A(1,d1);
A(2,d2);
ff1(ii)=J1;
ff2(ii)=J2;
snr=ZSYSR(A(1,i),A(2,j));
ff3(ii)=snr;%换函数需要改
toc
end
figure(2);
subplot(211)
plot(tt,ff3,‘-ks’);
%axis([1 ii 20 35]);
subplot(212)
plot(tt,ff1,‘-k*’);
hold on
plot(tt,ff2,‘-ko’);
%axis([1 ii -5 10]);
legend(['*表示参数a; ', ‘o表示参数b’]);
xlabel(‘运行次数n’);
% ylabel(‘绿snr 红a 蓝b’);
title(‘蚁群算法求得最优解’);
c=find(ff3==max(ff3));
ff3(c(1))
a=ff1(c(1))
b=ff2(c(1))
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
🍅 仿真咨询
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化
2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化
5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置
9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长
10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合