稀疏天线阵的GA优化 (MATLAB程序)

本程序运行需一个小时左右。优化准则是旁瓣电平最小。取栅格间距为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);
ee22selection=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<pc);%参与交叉位
%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(bestchrom),-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);

本文发布于:2024-09-22 06:50:03,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/314980.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:染色体   交叉   变异
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议