您好,欢迎来到九壹网。
搜索
您的当前位置:首页稀疏天线阵的GA优化

稀疏天线阵的GA优化

来源:九壹网


本程序运行需一个小时左右。优化准则是旁瓣电平最小。取栅格间距为lemda/2,阵元间距为栅格间距的整数倍。放阵元的位置放1,否则放0

initpop.m 种群初始化

function pop=initpop(popsize,indivlength,atennum)

pop=zeros(popsize,indivlength);

for i=1:popsize

pop(i,1)=1;

pop(i,indivlength)=1;

a=randperm(indivlength-2)+1;%²úÉú2--indivlength-1Ö®¼äÈÎÒâÁ½¸ö²»ÏàµÈµÄÏòÁ¿

for j=1:atennum-2

pop(i,a(j))=1;%ÿÐжÔÓ¦µÄλÖÃÖÃ1

end

end

calfitval.m计算适应度值

%popsizeȾɫÌå¸öÊý£¬indivlengthȾɫÌ峤¶È£¬popÖÖȺ

function [fitvalue]=calfitval(popsize,indivlength,pop)

%dÈ¡lemda/2£¬k*dµÈÓÚpi

m=0;%±ê־λ

global atennum;

array=zeros(popsize,3);

array(:,1)=atennum;

array(:,3)=atennum;

fitvalue=ones(popsize,1);

for theta=0:pi/1800:pi/2

for i=1:popsize

a=0;

for k=1:indivlength

a=a+pop(i,k)*exp(j*pi*(k-1)*sin(theta));

end

a=abs(a);

if a>array(i,3)&&m==0

array(i,2)=array(i,3);

m=1;

end

array(i,3)=a;

%if a<0.5

% m=1;

%end

%´æ´¢0~piÖ®¼ä×î´óµÄǰÁ½¸ö·½ÏòÐÔº¯ÊýÖµ

if m==1&&a>array(i,2)

array(i,2)=a;

end

end

end

%disp(array);

for i=1:popsize

fitvalue(i,1) =

array(i,1)/array(i,2);%ÊÊÓ¦¶ÈÖµµÈÓÚÖ÷°ê×î´óÖµ³ýÒÔ¸±°ê×î´óÖµ£»

end

best.m 保留每代最优值

function [bestindivdual,bestfit]=best(pop,fitvalue)

[Maxvalue,index]=max(fitvalue);%½«µ±Ç°ÖÖȺÖÐ×îÓŽⱣ´æÔÚMaxValue

bestfit=Maxvalue;

bestindivdual=pop(index,:);

select.m选择

%Ñ¡Ôñ¸´ÖÆ

function [selection]=select(fitvalue,pop)

[m,n]=size(pop);

selection=zeros(m-1,n);

[Minvalue,index1]=min(fitvalue);%½«µ±Ç°ÖÖȺÖÐ×î´Î½â±£´æÔÚMinValue

[Maxvalue,index2]=max(fitvalue);%½«µ±Ç°ÖÖȺÖÐ×îÓŽⱣ´æÔÚMaxValue

bestchrom = pop(index2,:);%×î¼ÑȾɫÌå±£´æ

pop(index1,:)=bestchrom;

index=[1:m];

index(index1)=0;

index=nonzeros(index);%ʹ×îÓÅȾɫÌå×øÔÚµÄλÖÃΪÁ㣬±ãÓÚÇå¿Õ£¬Ê¹×îÓŵÄȾɫÌåµÄÔ­À´Î»Öò»²ÎÓë±¾´ÎµÄÑ¡Ôñ¡¢½»²æ¡¢±äÒì

newpop=pop(index,:);%²ÎÓëÑ¡Ôñ½»²æ£¬±äÒìµÄÖÖȺ

fitvalue=fitvalue(index,:);%²ÎÓëÑ¡Ôñ¡¢½»²æ¡¢±äÒìµÄÊÊÓ¦¶Èº¯ÊýÖµ

%evo_popsize=m-1;%²ÎÓëÑ¡Ôñ¡¢½»²æ¡¢±äÒìµÄÖÖȺ´óС

fitvalue=cumsum(fitvalue)/sum(fitvalue);

rndpos=sort(rand(m-1,1));%²úÉúËæ¼´¸ÅÂÊ

j=1;

for i=1:m-1

while rndpos(i)>fitvalue(j)

j=j+1;

end

selection(i,:)=pop(j,:);

end

cross.m交叉

%½»²æ

function [newpop]=cross(selection,pc)

[m,n]=size(selection);

newpop=ones(m,n);

s=rand(1,m);%Ëæ»ú²úÉúÓë½»²æ¸ÅÂÊÏà±È½ÏµÄ¸ÅÂÊ

y1=find(s%y1

y2=find(s>=pc);%²»²ÎÓë½»²æÎ»

len1=length(y1);

if

len1>2&&mod(len1,2)==1 %Èç¹ûÓÃÀ´½øÐн»²æµÄȾɫÌåµÄÌõÊýÎªÆæÊý£¬½«Æäµ÷ÕûΪżÊý

y2(length(y2)+1)=y1(len1);

len1=len1-1;

end

%len1

if len1>=2

for p=1:len1/2

crosspos=round((n-2)*rand())+1;

a=selection(y1(2*p-1),crosspos:n);

b=selection(y1(2*p),crosspos:n);

while ~(length(find(a==1))==length(find(b==1)))

crosspos=round((n-2)*rand())+1;

a=selection(y1(2*p-1),crosspos:n);

b=selection(y1(2*p),crosspos:n);

end

%crosspos

newpop(y1(2*p-1),:)=[selection(y1(2*p-1),1:crosspos-1),selection(y1(2*p),crosspos:n)];

newpop(y1(2*p),:)=[selection(y1(2*p),1:crosspos-1),selection(y1(2*p-1),crosspos:n)];

end

end

newpop(y2,:)=selection(y2,:);

mutation.m变异

%±äÒì

function [newpop]=mutation(newpop,pm)

[m,n]=size(newpop);

s=rand(1,m);%Ëæ»ú²úÉúÓë±äÒì¸ÅÂÊÏà±È½ÏµÄ¸ÅÂÊ

for i=1:m

if s(i)<=pm

mutapos=round((n-3)*rand())+2;%Ëæ¼´²úÉú±äÒìλÖÃ

if newpop(i,mutapos)==0

a=find(newpop(i,:)==1);

a0=round((length(a)-3)*rand())+2;%a(a0)Ëæ¼´ÕÒÒ»¸öΪ1µÄλÖÃ

newpop(i,mutapos)=1;

newpop(i,a(a0))=0;

else

b=find(newpop(i,:)==0);

b0=round((length(b)-1)*rand())+1;%b(b0)Ëæ¼´ÕÒÒ»¸öΪ0µÄλÖÃ

newpop(i,mutapos)=0;

newpop(i,b(b0))=1;

end

else

newpop(i,:)=newpop(i,:);

end

end

main.m主程序

%ÒÅ´«Ëã·¨ÓÅ»¯Ï¡ÊèÌìÏßÕóÎÊÌâ

clear all

clc

format long e;

indivlength=1000; %¸öÌå´®³¤¶È

popsize=50; %³õʼÖÖȺ´óС

global atennum;

atennum=500; %ÕóÔª¸öÊý

eranum=200; %×î´óµü´ú´ÎÊý

pc=0.8; %½»²æ¸ÅÂÊ

pm=0.05; %±äÒì¸ÅÂÊ

%pcmin=0.5;

%pmmin=0.03;

%deltapc=(pc-pcmin)*100/eranum;

%deltapm=(pm-pmmin)*100/eranum;

T1=clock;

s=sprintf('³ÌÐòÕýÔÚÔËÐÐÖÐ,ÇëÉÔµÈ......');

disp(s);

%µÚÒ»²½£¬ÊµÊý±àÂë

%²úÉú³õʼÖÖȺ

trace=zeros(eranum,indivlength+1); %×îÓŹ켣

pop=initpop(popsize,indivlength,atennum);

for i=1:eranum

[fitvalue]=calfitval(popsize,indivlength,pop);

[bestindivdual,bestfit]=best(pop,fitvalue);

[selection]=select(fitvalue,pop);

[newpop]=cross(selection,pc);

[newpop]=mutation(newpop,pm);

pop=[newpop;bestindivdual];

trace(i,1)=bestfit;

trace(i,2:indivlength+1)=bestindivdual;

%if mod(i,100)==0

% pc=pc-deltapc;

%pm=pc-deltapm;

%end

end

t=1:eranum;

plot(t,-20*log10(trace(:,1)));

xlabel('µü´ú´ÎÊý');

ylabel('ÿ´ú×îÓÅÖµdB');

figure;

%trace(:,1);

[bestfit,index]=max(trace(:,1));%×îÓÅÊÊÓ¦¶ÈÖµ

bestchrom=trace(index,2:indivlength+1);%×îÓÅȾɫÌå

str1=sprintf('½ø»¯µ½ %d

´ú,¶ÔӦȾɫÌåΪ: %s£¬µÃ±¾´ÎÇó½âµÄ×îÓÅÖµ%.5fdB\\n',index,num2str(bestchro

m),-20*log10(bestfit));

disp(str1);

str2=find(bestchrom==1);

str3=sprintf('ÕóÔª·ÅÖÃλÖÃΪ£º%s\\n',num2str(str2));%ÏÔʾÕóԪλÖÃ

disp(str3);

i=1;

a=zeros(1,1801);%·ÅÖ÷½ÏòÐÔº¯ÊýÖµ

for theta=-pi/2:pi/1800:pi/2

for k=1:indivlength

a(i)=a(i)+bestchrom(k)*exp(j*pi*(k-1)*sin(theta));

end

a(i)=20*log10(abs(a(i))/atennum);%ȡdB

i=i+1;

end

theta=-pi/2:pi/1800:pi/2;

plot(theta*180/pi,a);

xlabel('½Ç¶È');

ylabel('·øÉäÇ¿¶È/dB');

T2=clock;

%¼ÆËãÔËÐÐʱ¼ä

elapsed_time=T2-T1;

if elapsed_time(6)<0,

elapsed_time(6)=elapsed_time(6)+60; elapsed_time(5)=elapsed_time(5)-1;

end %Ãë

if elapsed_time(5)<0,

elapsed_time(5)=elapsed_time(5)+60;elapsed_time(4)=elapsed_time(4)-1;

end %·Ö

if elapsed_time(4)<0,

elapsed_time(4)=elapsed_time(4)+24;elapsed_time(3)=elapsed_time(3)-1;

end %ʱ

str2=sprintf('³ÌÐòÔËÐкÄʱ %d Сʱ %d ·ÖÖÓ %.4f Ãë',elapsed_time(4),elapsed_time(5),elapsed_time(6));

disp(str2);

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务