回 帖 发 新 帖 刷新版面

主题:求助matlab上的一个绘图,遗传算法的

proj_trans为适应度值,我想把每一代的proj_trans最高的和最低的都绘成图,请教怎么做呢。我自己做的绘出来是一个函数郁闷。


function  [proj,scale,translation,freq,phase]=select_best_GA_else3(signal_r,N,a_base,j_min,j_max,u_base,p_min,v_base,k_min,w_base,i_min,i_max);
%定义遗传算法参数
Nind=20;                                        %个体数目(Number of individuals)
MAXGEN=100;                                     %最大遗传代数(Maximum number of generations)
Lind=20;                                       %变量的二进制位数(Length of individuals)
%GGAP=0.9;                                      %代沟(Generation gap)
proj_trans=0; 
proj=0;                                        %寻优结果的初始值

 FieldD=[rep([Lind],[1,4]);[0 0 0 0;log2(N) N 2*pi 2*pi];rep([1;0;1;1],[1,4])];

[Chrom, Lind, BaseV] = crtbp(Nind, Lind*4);            %初始种群
gen=0;                                                     %代计数器
variable=bs2rv(Chrom, FieldD);                         %计算初始种群的十进制转换
variable_j=variable(:,1);
variable_j=round(variable_j);
for i=1:20
variable_s(i)=a_base^variable_j(i);                 %----20,即种群个体数量
end
variable_u=variable(:,2);
variable_v=variable(:,3);
variable_w=variable(:,4);
t=0:N-1;                 %----N:信号长度
for i=1:20
t1=(t-variable_u(i))/variable_s(i);
g=(1/sqrt(variable_s(i))).*exp(-pi*t1.*t1).*cos(variable_v(i)*t1+variable_w(i));       %     g=(1/sqrt(s))*exp(-pi*t.*t).*cos(u*t+w)
g=g/sqrt(sum(g.*g)); 
proj_trans(i)=sum(signal_r.*g);%计算目标函数值
end
for gen=0:MAXGEN
    proj_trans1=proj_trans';
   FitnV=ranking(proj_trans1);                                %分配适应度值(Assign fitness values)         
   SelCh=select('sus', Chrom, FitnV);                        %选择         
   SelCh1=recombin('xovsp', SelCh,0.7);                       %重组            
   SelCh2=mut(SelCh1);                                         %变异
   variable1=bs2rv(SelCh2, FieldD);                       %子代个体的译码
  variable_j2=variable1(:,1);
  variable_j2=round(variable_j2);
   for i=1:20
  variable_s2(i)=a_base^variable_j2(i);
   end
  variable_u2=variable1(:,2);
  variable_v2=variable1(:,3);
  variable_w2=variable1(:,4);
   t2=0:N-1;
   for i=1:20
   t3=(t2-variable_u2(i))./variable_s2(i);
   g1=(1/sqrt(variable_s2(i))).*exp(-pi*t3.*t3).*cos(variable_v2(i).*t3+variable_w2(i));       %     g=(1/sqrt(s))*exp(-pi*t.*t).*cos(u*t+w)
   g1=g1/sqrt(sum(g1.*g1));  
   proj_transSel(i)=sum(signal_r.*g1);                           %计算子代的目标函数值

   if abs(proj_transSel(i))>abs(proj)
               proj=proj_transSel(i);
               scale=variable_s2(i);
               translation=variable_u2(i);
               freq=variable_v2(i);
               phase=variable_w2(i);

   end    
  end 
   gen=gen+1;     %代计数器增加
  
end

回复列表 (共1个回复)

沙发

其实我想做的很简单,就是把proj_trans在每个空间里得到的最大值保存下来绘成图,但是不知道为什么我自己弄的却是不断变化的折线……

我来回复

您尚未登录,请登录后再回复。点此登录或注册