自适应遗传算法.docx
- 文档编号:2787080
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:17
- 大小:160.25KB
自适应遗传算法.docx
《自适应遗传算法.docx》由会员分享,可在线阅读,更多相关《自适应遗传算法.docx(17页珍藏版)》请在冰点文库上搜索。
自适应遗传算法
自适应遗传算法
一.主要流程:
1.参数的初始化。
设定遗传种群规模N,阵元数M,信源数P等。
2.编码。
采用十进制编码方法。
3.初始种群的产生。
随机数生成。
4.适应度函数的评价。
选取
(1)
其中,
(2)
PA是A的投影矩阵,A是阵列流型。
(3)
是数据协方差矩阵的最大似然估计。
5.选择。
比例选择方法与精英选择方法结合使用,在当代种群中选择优良个体遗传到下一代。
既保证了种群的多样性,也使最优个体得以保留。
1)比例选择方法(赌轮盘法):
每个个体被选中的概率与它的适应度函数值大小成正比,即适应度函数越高的个体被选中的概率也就越高。
2)精英选择方法:
让种群中适应度函数值最高的个体不进行配对交叉,直接复制到下一代中。
但是容易陷入局部最优解,全局搜索能力差。
6.交叉。
按照概率Pc对种群中个体两两配对,进行交叉操作。
本文中选取算数交叉的方式。
算数交叉:
是由两个个体的线性组合来产生新的个体,假设第t代的两个个体为A(t)、B(t),则算数交叉后产生的新个体是
(4)
(5)
其中,α选取(0,1)之间的随机数。
交叉概率:
使交叉概率随着遗传代数的增长,逐渐减小,目的是进化前期注重交叉运算,全局搜索能力强。
(6)
其中,T是进化代数,K是总进化次数。
7.变异。
按照概率Pm对种群个体进行变异。
本文中选取均匀变异的方式。
均匀变异:
如某基因座上的基因值为Xk,其取值范围为[Umin,Umax],对其进行变异后的值为
(7)
其中,r选取[0,1]之间的随机数。
变异概率:
使变异概率随着遗传代数的增长,逐渐增加,目的是进化后期注重变异运算,局部搜索能力强。
(8)
其中,T是进化代数,K是总进化次数。
8.终止条件判断。
若已达到设定的最大遗传代数,则迭代终止,输出最优解;若不满足终止条件,则返回第4步,进行迭代寻优过程。
图1遗传算运算流程图
二.仿真实验
1.种群容量对角度均方根误差的影响
实验条件:
由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的波达方向分别为-20°和60°,快拍数取值128,信噪比取值20dB。
种群容量范围[50,400],间隔50取值,循环代数200,交叉概率取值
,变异概率取值
。
蒙特卡洛实验次数200。
图2种群容量对角度均方根误差的影响
通过图2可知,当循环代数一定时,随着种群容量的增加,角度均方根误差逐渐减小。
2.循环代数对角度均方根误差的影响
实验条件:
由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的波达方向分别为-20°和60°,快拍数取值128,信噪比取值20dB。
种群容量200,循环代数范围[50,400],间隔50取值,交叉概率取值
,变异概率取值
。
蒙特卡洛实验次数200。
图3循环代数对角度均方根误差的影响
通过图3可知,当种群容量一定,随着循环代数的增加,角度均方根误差曲线平稳,角度测量准确度无改善。
3.信噪比对角度均方根误差的影响
实验条件:
由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的波达方向分别为-20°和60°,快拍数取值128,信噪比取值[-10,20]dB,步进4dB。
种群容量200,循环代数200,交叉概率取值
,变异概率取值
。
蒙特卡洛实验次数200。
图4信噪比对角度均方根误差的影响
通过图4可知,随着信噪比的增加,角度均方根误差逐渐减小,并趋于平稳,小于1°。
4.小快拍数下角度差值对角度均方根误差的影响
实验条件:
由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的入射角相差[5,35]°,步进5°,快拍数取值20,信噪比取值20dB。
种群容量200,循环代数200,交叉概率取值
,变异概率取值
。
蒙特卡洛实验次数100。
图5小快拍条件下入射角度差值对均方根误差的影响
通过图5可知,在相同条件下,随着入射角度之间差值增大,对角度测量的误差减小。
5.低信噪比下快拍数对角度均方根误差的影响
实验条件:
由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的入射角分别为-20°、50°,快拍数取值[25,150],步进5,信噪比取值-10dB。
种群容量200,循环代数200,交叉概率取值
,变异概率取值
。
蒙特卡洛实验次数100。
图6低信噪比下快拍数对角度均方根误差的影响
通过图6可知,低信噪比情况下,随着快拍数的增长,角度均方根误差的逐渐减小,但是角度估计的准确度低。
6.高信噪比下快拍数对角度均方根误差的影响
实验条件:
由8个阵元构成均匀线性阵列,阵元间距为半个波长,空间中有2个互不相关的窄带信号源,存在于该阵列的远场区域内。
两个信号源的入射角分别为-20°、50°,快拍数取值[25,150],步进5,信噪比取值20dB。
种群容量200,循环代数200,交叉概率取值
,变异概率取值
。
蒙特卡洛实验次数100。
图7高信噪比下快拍数对角度均方根误差的影响
通过图7可知,在信噪比较大的情况下,在不同的快拍数下,角度均方根误差变化趋于平稳,波动小。
3.仿真程序
1.基于自适应遗传算法的最大似然估计
%下面举例说明遗传算法%
%求下列函数的最大值%
%适应值函数:
max{trace(PA*R)},theta∈[-90,90]%
%十进制种群均匀线阵赌轮盘法精英选择法
%编程
%-----------------------------------------------
clearall
clc
tic
M=8;
doa=[-2050];
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;
forg=1:
length(SNR)%可以在这里修改循环条件
%阵列流型A
fori=1:
P
A(:
i)=exp(-j*2*pi*d*[0:
M-1]'/lambda*sin(doa(i)/180*pi));%均匀线性阵的阵列流型矢量。
end
%信源模型建立
S=zeros(P,N(g));
fork=1:
P
S(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));%信号子空间
fork=1:
K%试验次数
%popsize=201;%群体大小
chromlength=2;%字符串长度(个体长度)
pop=initpop(popsize,chromlength);%随机产生初始群体
fori=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);%每次实验的误差矩阵
end
RMSE(g,:
)=sqrt(sum(mistake(g,:
).^2,2)/2/K);%均方根误差
end
Toc
2.种群生成
初始化(编码)
%initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度.
%遗传算法子程序
%Name:
initpop.m
%初始化
functionpop=initpop(popsize,chromlength)
pop=(rand(popsize,chromlength)-0.5*ones(popsize,chromlength))*180;%行数为popsize,列数为chromlength的矩阵,
%这样产生的初始种群。
3.计算目标函数值
%计算目标函数值
%calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。
%遗传算法子程序
%Name:
calobjvalue.m
%实现目标函数的计算
function[objvalue]=calobjvalue(pop,M,d,lambda,R)
[px]=size(pop,1);
fori=1:
px
A1(:
i)=exp(-j*2*pi*d*[0:
M-1]'/lambda*sin(pi*pop(i,1)/180));%导向矢量
A2(:
i)=exp(-j*2*pi*d*[0:
M-1]'/lambda*sin(pi*pop(i,2)/180));%导向矢量
objvalue(i,:
)=(trace([A1(:
i)A2(:
i)]*pinv([A1(:
i)A2(:
i)]'*[A1(:
i)A2(:
i)])*[A1(:
i)A2(:
i)]'*R));%计算目标函数值(最大似然法)
%objvalue(i,:
)=(trace([A1(:
i)A2(:
i)]*pinv([A1(:
i)A2(:
i)]'*[A1(:
i)A2(:
i)])*[A1(:
i)A2(:
i)]'*Us*Us'));%计算目标函数值(子空间拟合算法)
End
4.选择
%选择复制
%选择或复制操作是决定哪些个体可以进入下一代。
程序中采用赌轮盘选择法选择,这种方法较易实现。
%根据方程pi=fi/∑fi=fi/fsum,选择步骤:
%1)在第t代,由
(1)式计算fsum和pi
%2)产生{0,1}的随机数rand(.),求s=rand(.)*fsum
%3)求∑fi≥s中最小的k,则第k个个体被选中
%4)进行N次2)、3)操作,得到N个个体,成为第t=t+1代种群
%遗传算法子程序
%Name:
selection.m
%选择复制
function[newpop]=selection(pop,objvalue)
totalfit=sum(objvalue);%求适应值之和
objvalue1=objvalue/totalfit;%单个个体被选择的概率
objvalue2=cumsum(objvalue1);%如fitvalue=[1234],则cumsum(fitvalue)=[13610]
[px]=size(pop,1);
ms=sort(rand(px,1));%从小到大排列
fitin=1;
newin=1;
whilenewin<=px
if(ms(newin)) newpop(newin,: )=pop(fitin,: ); newin=newin+1; else fitin=fitin+1; end end [a,b]=max(objvalue); newpop(1,: )=pop(b,: );%选出最优的个体,插入到新种群的第一行。 5.交叉 %交叉 %交叉(crossover),群体中的每个个体之间都以一定的概率pc交叉,即两个个体从各自字符串的某一位置 %(一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。 例如,假设2个父代个体x1,x2为: %x1=49...67 %x2=30...-20 %交又后得到2个新的子代个体y1,y2分别为: %y1=49...-20 %y2=30...67 %这样2个子代个体就分别具有了2个父代个体的某些特征。 利用交叉我们有可能由父代个体在子代组合成具有更高适合度的个体。 %遗传算法子程序 %Name: crossover.m %交叉 function[newpop]=crossover(pop,pc) [px,py]=size(pop); newpop=ones(size(pop)); fori=2: 2: px%第一行最优个体不进行算数交叉 if(rand alpha=rand; newpop(i,: )=alpha*pop(i+1,: )+(1-alpha)*pop(i,: ); newpop(i+1,: )=alpha*pop(i,: )+(1-alpha)*pop(i+1,: ); else newpop(i,: )=pop(i,: ); newpop(i+1,: )=pop(i+1,: ); end End 6.变异 %变异 %变异(mutation),基因的突变普遍存在于生物的进化过程中。 变异是指父代中的每个个体的每一位基因都以概率pm改变。 %遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。 %遗传算法子程序 %Name: mutation.m %变异 function[newpop]=mutation(pop,pm) [px,py]=size(pop); newpop=ones(size(pop)); fori=2: px%第一行最优个体,不进行变异。 if(rand forj=1: py newpop(i,j)=-90+rand*180; end else newpop(i,: )=pop(i,: ); end end 7.求解最优个体 %求出群体中最大得适应值及其个体 %遗传算法子程序 %Name: best.m %求出群体中适应值最大的值 function[bestindividual,bestfit]=best(pop,objvalue) [m,n]=max(objvalue); bestindividual=pop(n,: ); bestfit=m; (此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自适应 遗传 算法