数字信号处理基于matlab蚁群算法优化随机共振检测含Matlab源码 2045期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字信号处理基于matlab蚁群算法优化随机共振检测含Matlab源码 2045期相关的知识,希望对你有一定的参考价值。
一、蚁群算法简介
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.
以上是关于数字信号处理基于matlab蚁群算法优化随机共振检测含Matlab源码 2045期的主要内容,如果未能解决你的问题,请参考以下文章
信号检测基于matlab双稳态随机共振的参数寻优算法含Matlab源码 1700期
优化PID基于matlab混沌改进的蚁群算法求解船舶锅炉压力控制PID优化问题含Matlab源码 2303期
优化PID基于matlab混沌改进的蚁群算法求解船舶锅炉压力控制PID优化问题含Matlab源码 2303期