为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于遗传算法的稀疏阵

2011-10-10 6页 doc 46KB 29阅读

用户头像

is_273637

暂无简介

举报
基于遗传算法的稀疏阵%遗传算法主函数,一维稀疏线阵 clc,clear,clf; format; T1=clock; s1=sprintf('程序正在运行中,请稍等......'); disp(s1); N=154; %阵元数 L=200; %总栅格数 popsize=100; %设置初始种群规模 d=0.5; %栅格间距 pc=0.7; %设置初始交叉概率 pm=0.05; %设置初始变异概率 numitera=1; %设置迭代次数 chromlength=N-2; %设置初始决策变量个数 In=1; %设各个阵元激励是等幅同相的 res=18...
基于遗传算法的稀疏阵
%遗传算法主函数,一维稀疏线阵 clc,clear,clf; format; T1=clock; s1=sprintf('程序正在运行中,请稍等......'); disp(s1); N=154; %阵元数 L=200; %总栅格数 popsize=100; %设置初始种群规模 d=0.5; %栅格间距 pc=0.7; %设置初始交叉概率 pm=0.05; %设置初始变异概率 numitera=1; %设置迭代次数 chromlength=N-2; %设置初始决策变量个数 In=1; %设各个阵元激励是等幅同相的 res=18000; %设置采样点数,也就是分辨率 theta=0:pi/res:pi; %theta 是观察方向与阵轴的夹角 theta0=90/180*pi; %theta0 为波束指向,当为 0.5*pi 时为侧射阵 u=cos(theta)-cos(theta0); pop=initpop(popsize,chromlength,L);%运行初始化函数,产生初始化种群 num=1; %初始化循环变量(现在是只有完成所要求的迭代次数,循环才会终止) bestindividual=ones(numitera,L+1); %保存每次迭代的最佳值 while num<=numitera %设置程序终止条件 [SLLmax,Elog]=calobjvalue(pop,popsize,L,d,u,res);%计算目标函数,并求出最大峰值旁瓣 fitvalue=calfitvalue(SLLmax,popsize);%计算适应度值的大小 newpop=select(fitvalue,popsize,pop); %newpop为经过轮盘赌选择之后的新的种群 newpop1=crossover(newpop,popsize,pc,L); %进行交叉运算 newpop2=mutation(newpop1,popsize,pm,L); %进行变异运算 %遗传操作之后再重新计算适应度函数大小 [newSLLmax,newElog]=calobjvalue(newpop2,popsize,L,d,u,res); newfitvalue=calfitvalue(newSLLmax,popsize); %求出最佳个体,并保存最小峰值旁瓣和最佳个体 [Minvalue,Index]=min(newfitvalue); bestindividual(num,1)=Minvalue; %每一代中的最小峰值旁瓣保存在第一列 bestindividual(num,2:L+1)=newpop2(Index,:); %每一代最小峰值旁瓣所对应的最优染色体(也即是阵元所在的位置) pop=newpop2; %重新赋值进行循环 num=num+1; %自变量加1 end %求出bestindividual中的最小值及最优染色体 bestindividual1=abs(bestindividual); %取绝对值 [Minfit,I]=max(bestindividual1(:,1)); %求出 bestindividual1 中最大值,也就是 bestindividual 中的最小值及其所在的行 Minfit=-1*Minfit; %求出最低峰值旁瓣电平 chromosome=bestindividual(I,2:L+1); %最优染色体 str1=sprintf('进化到第%d代\n',I); str2=sprintf('对应的染色体:%s\n',num2str(chromosome)); str3=sprintf('最优值为:%.3f\n',Minfit); disp(str1); disp(str2); disp(str3); %画出方向图 S=zeros(1,length(u)); %初始化阵因子 for m=1:L S(1,:)=S(1,:) + chromosome(1,m)*exp(j*2*pi*u*(m-1)*d); end S=abs(S); Slog = 20*log10(S/max(S)); plot(theta*180/pi,Slog,'k','linewidth',1); %绘制阵因子方向图 xlabel('方位角(degree)','FontSize',11); ylabel('PSLL(dB)','FontSize',11); axis([0 180 -50 0]); %计算程序运行时间 T2=clock; T3=T2-T1; if T3(6)<0 %计算秒 T3(6)=T3(6)+60; T3(5)=T3(5)-1; end if T3(5)<0 %计算分钟 T3(5)=T3(5)+60; T3(4)=T3(4)-1; end if T3(4)<0 %计算小时 T3(4)=T3(4)+24; T3(3)=T3(3)-1; end s2=sprintf('程序运行耗时:%d 小时 %d 分钟 %.4f 秒',T3(4),T3(5),T3(6)); disp(s2); function pop=initpop(popsize,chromlength,L) pop1=zeros(popsize,L-2); a=round(chromlength/2); %阵元数的一半放在中间位置 b=round((chromlength-a)/2); %阵元数的 1/4 放在左边 c=chromlength-a-b; %阵元数的 1/4 放在右边 d=round((L-2)/2); %求出中间位置 e=round(a/2); f=a-e; for i=1:popsize %放好了中间位置 for j=(d-e+1):(d+f) %开区间内放置 pop1(i,j)=1; end end %放置左边的阵元 for i=1:popsize g=randperm(d-e); g1=g(1:b); for j=1:b pop1(i,g1(j))=1; end end %放置右边的阵元 for i=1:popsize h=randperm(L-2-d-f); h1=L-1-h; h2=h1(1:c); for j=1:c pop1(i,h2(j))=1; end end pop=cat(2,ones(popsize,1),pop1,ones(popsize,1)); %产生最终初始种群 % 随机种群 function pop=initpop(popsize,chromlength,L) pop1=zeros(popsize,L-2); for i=1:popsize a=randperm(L-2); b=a(1:chromlength); for j=1:chromlength pop1(i,b(j))=1; end end pop=cat(2,ones(popsize,1),pop1,ones(popsize,1)); %产生最终初始种群 %遗传算法子程序,计算目标函数值的大小 function [SLLmax,Elog]=calobjvalue(pop,popsize,L,d,u,res) E=zeros(popsize,length(u)); %E为阵元无方向性时的方向性函数,也即是阵因子 FFmax=zeros(popsize,1); %用于保存主瓣峰值 index=zeros(popsize,1); %用于保存主瓣峰值所在的位置 for m=1:popsize for n=1:L E(m,:)=E(m,:)+pop(m,n)*exp(j*2*pi*u*(n-1)*d); %计算目标函数 end E(m,:)=abs(E(m,:)); %适应度函数都是非负的,且是为了下面的对数用算 Elog(m,:)=20*log10(E(m,:)/max(E(m,:))); %以分贝数来表示,其中log10表示以10为底的对数 [FFmax(m),index(m)]=max(Elog(m,:)); %求出主瓣位置并保存 end %求出最大旁瓣 for i=1:popsize for n=index(i):res %用于求出最靠近主瓣右边的凹陷点的位置 if Elog(i,n)>Elog(i,n+1) continue end if Elog(i,n)Elog(i,m-1) continue end if Elog(i,m)规则
,只有随机数小于交叉概率才可以进行交叉 cpoint=round(rand*(L-3)+2); %产生交叉位置,位于[2,L-1]区间 if sum(newpop(i,cpoint:L))==sum(newpop(i+1,cpoint:L)) %用来判断在满足交叉概率后,是否可以用来交叉(只有交叉点之后1的个数相等,方可以交叉) newpop1(i,:)=[newpop(i,1:cpoint),newpop(i+1,cpoint+1:L)]; %单点交叉,交换数据 newpop1(i+1,:)=[newpop(i+1,1:cpoint),newpop(i,cpoint+1:L)]; else newpop1(i,:)=newpop(i,:); %不满足交叉条件,不进行交叉 newpop1(i+1,:)=newpop(i+1,:); end else newpop1(i,:)=newpop(i,:); %不满足交叉条件,不进行交叉 newpop1(i+1,:)=newpop(i+1,:); end end %遗传算法子程序:变异运算 function newpop2=mutation(newpop1,popsize,pm,L) for i=1:popsize if (rand<=pm) %变异规则,只有随机数小于变异概率才进行变异操作 mpoint=round(rand*(L-3)+2); %产生变异位置,位置区间为[2,L-1] if (newpop1(i,mpoint)==0) a=find(newpop1(i,:)==1); a0=round(rand*(length(a)-3)+2); %a(a0)随即找一个为1的位置 [2,L-1] newpop1(i,mpoint)=1; newpop1(i,a(a0))=0; else b=find(newpop1(i,:)==0); b0=round((length(b)-1)*rand)+1; %b(b0)随即找一个为0的位置 newpop1(i,mpoint)=0; newpop1(i,b(b0))=1; end else newpop1(i,:)=newpop1(i,:); end end newpop2=newpop1;
/
本文档为【基于遗传算法的稀疏阵】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索