自适应遗传算法自适应遗传算法一.主要流程:1. 参数的初始化。
设定遗传种群规模N ,阵元数M ,信源数P 等。
2. 编码。
采用十进制编码方法。
3. 初始种群的产生。
随机数生成。
4. 适应度函数的评价。
选取()()R P ΘA )tr f = (1)其中,H 1H )(A A A A P A -= (2)P A 是A 的投影矩阵,A 是阵列流型。
∑==Li L 1H 1XX R ) (3)R )是数据协方差矩阵的最大似然估计。
5. 选择。
比例选择方法与精英选择方法结合使用,在当代种群中选择优良个体遗传到下一代。
既保证了种群的多样性,也使最优个体得以保留。
1)比例选择方法(赌轮盘法):每个个体被选中的概率与它的适应度函数值大小成正比,即适应度函数越高的个体被选中的概率也就越高。
2)精英选择方法:让种群中适应度函数值最高的个体不进行配对交叉,直接复制到下一代中。
但是容易陷入局部最优解,全局搜索能力差。
6. 交叉。
按照概率P c 对种群中个体两两配对,进行交叉操作。
本文中选取算数交叉的方式。
算数交叉:是由两个个体的线性组合来产生新的个体,假设第t 代的两个个体为A (t)、B (t),则算数交叉后产生的新个体是()()()()t t t A B A αα-+=+11 (4)()()()()t t t B A B αα-+=+11 (5)其中,α选取(0,1)之间的随机数。
交叉概率:使交叉概率随着遗传代数的增长,逐渐减小,目的是进化前期注重交叉运算,全局搜索能力强。
2.02cos *4.0+⎪⎭⎫⎝⎛*=πK T P c (6)其中,T 是进化代数,K 是总进化次数。
7.变异。
按照概率P m 对种群个体进行变异。
本文中选取均匀变异的方式。
均匀变异:如某基因座上的基因值为X k ,其取值范围为[Umin,Umax],对其进行变异后的值为)U -r(U +U =X min max min k (7)其中,r 选取[0,1]之间的随机数。
变异概率:使变异概率随着遗传代数的增长,逐渐增加,目的是进化后期注重变异运算,局部搜索能力强。
005.02sin *045.0+⎪⎭⎫⎝⎛*=πK T P m (8)其中,T 是进化代数,K 是总进化次数。
8.终止条件判断。
若已达到设定的最大遗传代数,则迭代终止,输出最优解;若不满足终止条件,则返回第4步,进行迭代寻优过程。
图1 遗传算运算流程图二.仿真实验1.种群容量对角度均方根误差的影响实验条件:由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的波达方向分别为-20°和60°,快拍数取值128,信噪比取值20dB 。
种群容量范围[50,400],间隔50取值,循环代数200,交叉概率取值2.02cos *4.0+⎪⎭⎫ ⎝⎛*=πK T P c ,变异概率取值005.02sin *045.0+⎪⎭⎫⎝⎛*=πK T P m 。
蒙特卡洛实验次数200。
图2 种群容量对角度均方根误差的影响通过图2可知,当循环代数一定时,随着种群容量的增加,角度均方根误差逐渐减小。
2.循环代数对角度均方根误差的影响实验条件:由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的波达方向分别为-20°和60°,快拍数取值128,信噪比取值20dB 。
种群容量200,循环代数范围[50,400],间隔50取值,交叉概率取值2.02cos *4.0+⎪⎭⎫ ⎝⎛*=πK T P c ,变异概率取值005.02sin *045.0+⎪⎭⎫⎝⎛*=πK T P m 。
蒙特卡洛实验次数200。
图3 循环代数对角度均方根误差的影响通过图3可知,当种群容量一定,随着循环代数的增加,角度均方根误差曲线平稳,角度测量准确度无改善。
3.信噪比对角度均方根误差的影响实验条件:由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的波达方向分别为-20°和60°,快拍数取值128,信噪比取值[-10,20]dB,步进4dB 。
种群容量200,循环代数200,交叉概率取值2.02cos *4.0+⎪⎭⎫ ⎝⎛*=πK T P c ,变异概率取值005.02sin *045.0+⎪⎭⎫⎝⎛*=πK T P m 。
蒙特卡洛实验次数200。
图4 信噪比对角度均方根误差的影响通过图4可知,随着信噪比的增加,角度均方根误差逐渐减小,并趋于平稳,小于1°。
4.小快拍数下角度差值对角度均方根误差的影响实验条件:由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的入射角相差[5,35]°,步进5°,快拍数取值20,信噪比取值20dB 。
种群容量200,循环代数200,交叉概率取值2.02cos *4.0+⎪⎭⎫ ⎝⎛*=πK T P c ,变异概率取值005.02sin *045.0+⎪⎭⎫⎝⎛*=πK T P m 。
蒙特卡洛实验次数100。
图5 小快拍条件下入射角度差值对均方根误差的影响通过图5可知,在相同条件下,随着入射角度之间差值增大,对角度测量的误差减小。
5.低信噪比下快拍数对角度均方根误差的影响实验条件:由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的入射角分别为-20°、50°,快拍数取值[25,150],步进5,信噪比取值-10dB 。
种群容量200,循环代数200,交叉概率取值2.02cos *4.0+⎪⎭⎫ ⎝⎛*=πK T P c ,变异概率取值005.02sin *045.0+⎪⎭⎫⎝⎛*=πK T P m 。
蒙特卡洛实验次数100。
图6 低信噪比下快拍数对角度均方根误差的影响通过图6可知,低信噪比情况下,随着快拍数的增长,角度均方根误差的逐渐减小,但是角度估计的准确度低。
6.高信噪比下快拍数对角度均方根误差的影响实验条件:由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的入射角分别为-20°、50°,快拍数取值[25,150],步进5,信噪比取值20dB 。
种群容量200,循环代数200,交叉概率取值2.02cos *4.0+⎪⎭⎫ ⎝⎛*=πK T P c ,变异概率取值005.02sin *045.0+⎪⎭⎫⎝⎛*=πK T P m 。
蒙特卡洛实验次数100。
图7 高信噪比下快拍数对角度均方根误差的影响通过图7可知,在信噪比较大的情况下,在不同的快拍数下,角度均方根误差变化趋于平稳,波动小。
三.仿真程序1.基于自适应遗传算法的最大似然估计% 下面举例说明遗传算法 %% 求下列函数的最大值 %% 适应值函数:max{trace(PA*R)}, theta∈[-90,90] %%十进制种群均匀线阵赌轮盘法精英选择法% 编程%-----------------------------------------------clear allclcticM=8;doa=[-20 50];f=1000;%中心频率c=1500;%速度lambda=c/f;%波长d=lambda/2;%阵元间距%SNR=[-10:2:20];SNR=20;%信噪比N=128;%快拍数K=10;%试验次数%Iterations=[50:50:400];循环次数%popsize=[51:50:401];种群容量popsize=201;for g=1:length(SNR)%可以在这里修改循环条件%阵列流型Afor i=1:PA(:,i)=exp(-j*2*pi*d*[0:M-1]'/lambda*sin(doa(i)/180*pi));%均匀线性阵的阵列流型矢量。
end%信源模型建立S=zeros(P,N(g));for k=1:PS(k,:)=sqrt(10.^(SNR/10))*(randn(1,N(g))+j*randn(1,N(g)));%sqrt(10.^( snr/10))使信号符合该信噪比。
end%接收信号模型建立X=A*S+1/sqrt(2)*(randn(M,N(g))+j*randn(M,N(g)));%1/sqrt(2)使高斯白噪声的能量为1。
R=X*X'/N(g);[V,D]=eig(R);% [V,D]=eig(A):求矩阵R的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
[Y,I]=sort(diag(D));%diag是将对角阵的对角元素提取成一个向量.如果A是向量,sort(A) 对A中元素按照升序排列。
% 如果A是矩阵sort(A) 对A按每一列元素按照升序排列。
Y为排列后矩阵,I 是原矩阵中各元素位置所组成的新矩阵。
Un=V(:,I(1:M-P));%把原矩阵第1到M-P列中的数对应到V矩阵中的列数,建立新的矩阵赋值给Un。
Us=V(:,I(M-P+1:M));%信号子空间for k=1:K %试验次数%popsize=201; %群体大小chromlength=2; %字符串长度(个体长度)pop=initpop(popsize,chromlength);%随机产生初始群体for i=1: 200 %200为迭代次数pc=0.4*cos(i*pi/(2*200))+0.2; %交叉概率,进行自适应改变,随着代数增加,逐渐减小。
pm=0.045*sin(i*pi/(2*200))+0.05; %变异概率,随着代数增加,逐渐变大。
[objvalue]=calobjvalue(pop,M,d,lambda,R);%计算目标函数[newpop1]=selection(pop,objvalue);%复制[newpop2]=crossover(newpop1,pc); %交叉[newpop3]=mutation(newpop2,pm);%变异pop=newpop3;end[objvalue]=calobjvalue(newpop3,M,d,lambda,R);%计算目标函数[bestindividual,bestfit]=best(newpop3,objvalue); %求出群体中适应值最大的个体及其适应值y(k,:)=bestindividual;%最优个体y(k,:)=sort(y(k,:),2);%测得角度按顺序排列mistake(g,2*k-1:2*k)=y(k,:)-sort(doa);%每次实验的误差矩阵endRMSE(g,:)=sqrt(sum(mistake(g,:).^2,2)/2/K);%均方根误差endToc2.种群生成初始化(编码)% initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength 表示染色体的长度.%遗传算法子程序%Name: initpop.m%初始化function pop=initpop(popsize,chromlength)pop=(rand(popsize,chromlength)-0.5*ones(popsize,chromlength))*180; %行数为popsize,列数为chromlength的矩阵,%这样产生的初始种群。