主题:求助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
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