📄 soa_wgyh_zyk_dai_57.m
字号:
% x_gdirect=(1+0.5*rand(1,Variables)).*gBestSreg(region,:)-E(s,:); %全局最优个体的方向
x_gdirect=gBestSreg(region,:)-E(s,:); %全局最优个体的方向
[order_tdirect,index_tdirect]=sort([F_t_2(s) F_t_1(s) F(s)]); %
E_tdirect=[E_t_2(s,:);E_t_1(s,:);E(s,:)];
x_tdirect=E_tdirect(index_tdirect(1),:)-E_tdirect(index_tdirect(3),:);
% x_direct=weight*x_tdirect+2*weight*rand(1,Variables).*x_gdirect+2*weight*rand(1,Variables).*x_ldirect; %weight*
% x_direct=weight*x_tdirect+weight*rand(1,Variables).*x_gdirect+(1-weight)*rand(1,Variables).*x_ldirect; %weight*
% x_direct=weight*x_tdirect+weight*rand(1,Variables).*x_gdirect+(w_max-weight)*rand(1,Variables).*x_ldirect; %weight*
% x_direct=(w_max-weight)*rand(1,Variables).*x_gdirect+weight*rand(1,Variables).*x_ldirect; %weight*
x_direct=weight*x_tdirect+rand(1,Variables).*x_gdirect+rand(1,Variables).*x_ldirect; %weight*
Sign_x=sign(x_direct);
Sign_x=(E(s,:)>=Variablesmax).*(-1)+(E(s,:)<=Variablesmin).*1+((E(s,:)>Variablesmin) & (E(s,:)<Variablesmax)).*Sign_x;
index_Sign=find(Sign_x==0);
%------ 随机方向 --------------------------------
num_Sign=length(index_Sign);
Sign_x(index_Sign)=round(rand(1,num_Sign));
index_Sign=find(Sign_x==0);
Sign_x(index_Sign)=-1;
%------ 保持上次方向 --------------------------------
%Sign_x(index_Sign)=Sign_x0(index_Sign);
% En = (1+0.5.*rand(1,Variables)).*gBestSreg(region,:)-E(s,:);
% En=weight.*En;
% radius = abs((1+0.5*randn(1,Variables)).*gBestSreg(region,:)-E(s,:));
% En=weight*radius;
% En = x_gdirect * weight;
delta_x=Sign_x.*(En.*(-2*log(mu)).^0.5);
% delta_x= weight*Sign_x.*(weight*rand(1,Variables).*En.*(-2*log(mu)).^0.5)+ weight*rand(1,Variables).*x_gdirect+(1-weight)*rand(1,Variables).*x_ldirect;
% delta_x= Sign_x.*(rand(1,Variables).*En.*(-2*log(mu)).^0.5)+weight*x_tdirect+(w_max-weight)*rand(1,Variables).*x_gdirect+weight*rand(1,Variables).*x_ldirect;
% delta_x=Sign_x.*En.*mu;
% delta_x= weight*x_tdirect+2*rand(1,Variables).*x_gdirect+2*rand(1,Variables).*x_ldirect;
delta_x=min(delta_xmax,max(delta_x,delta_xmin));
x_offspring=E(s,:)+delta_x;
% x_offspring=E(s,:)+Sign_x.*(En.*(-2*log(mu)).^0.5);
x_offspring=(x_offspring>=Variablesmax).*Variablesmax+(x_offspring<Variablesmax).*x_offspring;
x_offspring=(x_offspring<=Variablesmin).*Variablesmin+(x_offspring>Variablesmin).*x_offspring;
% En=weight*abs(E(IndexF(end),:)-E(IndexF(1),:)); %weight*
% aver_E=sum(E(startreg(region):endreg(region),:),1)/(startreg(region)-endreg(region)+1);
% En=weight*abs(gBestSreg(region,:)-aver_E); %
% % radius=(Variablesmax-Variablesmin)/3;
% % En=weight*radius.*rand(1,Variables);
% % En=weight*radius;
%
%
% for s=startreg(region):1:endreg(region), % kk+old_num-1,% %开始对种群逐个个体进行进化操作
% IndexF_local=find(IndexF==s);%+startreg(region)-1;
% mu=(mu_max-(mu_max-mu_min)*(Sizereg(region)-IndexF_local)/(Sizereg(region)-1));%*rand(1,Variables);
% % IndexF_local=find(IndexF==s)+startreg(region)-1;
% % mu=(mu_max-(mu_max-mu_min)*(Size-IndexF_local)/(Size-1));
% mu=mu+(1.0-mu).*rand(1,Variables);
%
% x_ldirect=lBestS(s,:)-E(s,:); %局部最优个体的方向
% x_gdirect=gBestSreg(region,:)-E(s,:); %全局最优个体的方向
% [order_tdirect,index_tdirect]=sort([F_t_2(s) F_t_1(s) F(s)]); %
% E_tdirect=[E_t_2(s,:);E_t_1(s,:);E(s,:)];
% x_tdirect=E_tdirect(index_tdirect(1),:)-E_tdirect(index_tdirect(3),:);
%
% x_direct=weight*x_tdirect+rand(1,Variables).*x_gdirect+rand(1,Variables).*x_ldirect; %weight*
%
% Sign_x=sign(x_direct);
% Sign_x=(E(s,:)>=Variablesmax).*(-1)+(E(s,:)<=Variablesmin).*1+((E(s,:)>Variablesmin) & (E(s,:)<Variablesmax)).*Sign_x;
% index_Sign=find(Sign_x==0);
% %------ 随机方向 --------------------------------
% num_Sign=length(index_Sign);
% Sign_x(index_Sign)=round(rand(1,num_Sign));
% index_Sign=find(Sign_x==0);
% Sign_x(index_Sign)=-1;
% %------ 保持上次方向 --------------------------------
% %Sign_x(index_Sign)=Sign_x0(index_Sign);
%
% delta_x=Sign_x.*(En.*(-2*log(mu)).^0.5);
% delta_x=min(delta_xmax,max(delta_x,delta_xmin));
% x_offspring=E(s,:)+delta_x;
% % x_offspring=E(s,:)+Sign_x.*(En.*(-2*log(mu)).^0.5);
%
% x_offspring=(x_offspring>=Variablesmax).*Variablesmax+(x_offspring<Variablesmax).*x_offspring;
% x_offspring=(x_offspring<=Variablesmin).*Variablesmin+(x_offspring>Variablesmin).*x_offspring;
%
E_t_2(s,:)=E_t_1(s,:);
E_t_1(s,:)=E(s,:);
E(s,:)=x_offspring;
end % end of "for s=1:1:Size, %开始对种群逐个个体进行进化操作"
end % region
end %k
% [BestFun,indexBestF]=min(F); %
% [WorstFun,indexWorstF]=max(F); %
%
% %weight=(G-k)/G; %inertia weight
% weight=w_max-k*(w_max-w_min)/gen_max;
%
% bFun(k)=BestFun;% 不同于gBestFun,当算法不收敛时,两者不相等
%
% if BestFun<=gBestFun,% 最小问题,所以gBestFun大时需更新
% gBestFun=BestFun; %全局最佳函数值
% gBestS=E(indexBestF(1),:); %全局最佳个体
% end
% gBestFun_xx(tr,k)=gBestFun;
% for region=1:1:numregion,
% [BestFunreg,IndexBestreg]=min(F(startreg(region):endreg(region)));
% IndexBestreg=IndexBestreg+startreg(region)-1;
% if gBestFunreg(region)>BestFunreg,% 最小问题,所以gBestFun大时需更新
% gBestFunreg(region)=BestFunreg;%全局最佳函数值
% gBestSreg(region,:)=E(IndexBestreg(1),:); %全局最佳个体
% end
% end
% for s=1:1:Size,
% if lBestFun(s)>F(s),% 最小问题,所以lBestFun大时需更新
% lBestFun(s)=F(s);
% lBestS(s,:)=E(s,:); %局部最佳个体
% end
% end
%
% if gBestFun<=thresholdFun & flag==0 %检查是否满足 求最小值问题
% flag=1;
% average_k(tr)=k;
% elseif gBestFun>thresholdFun & k==gen_max % 检查是否失败
% average_k(tr)=gen_max;
% failnum=failnum+1;
% end
%
% % check for fit_min stopping criteria
% if(gBestFun <= fit_min)
% disp('Minimum fitness achieved.');
% break;
% num_stop=k;
% end
%
% for region=1:1:numregion,
% [OderF,IndexF]=sort(F(startreg(region):endreg(region)),'descend');
% IndexF=IndexF+startreg(region)-1;
%
% %% 邻域间交流
% si=0;
% for region1=1:1:numregion,
% if region1~=region,
% si=si+1;
% E(IndexF(si),:)=gBestSreg(region1,:);
% F(IndexF(si))=gBestFunreg(region1);
% end
% end
%
% % En=weight*abs(E(IndexF(end),:)-E(IndexF(1),:)); %weight*
% aver_E=sum(E(startreg(region):endreg(region),:),1)/(startreg(region)-endreg(region)+1);
% En=weight*abs(gBestSreg(region,:)-aver_E); %
% % radius=(Variablesmax-Variablesmin)/3;
% % En=weight*radius.*rand(1,Variables);
% % En=weight*radius;
%
%
% for s=startreg(region):1:endreg(region), % kk+old_num-1,% %开始对种群逐个个体进行进化操作
% IndexF_local=find(IndexF==s);%+startreg(region)-1;
% mu=(mu_max-(mu_max-mu_min)*(Sizereg(region)-IndexF_local)/(Sizereg(region)-1));%*rand(1,Variables);
% % IndexF_local=find(IndexF==s)+startreg(region)-1;
% % mu=(mu_max-(mu_max-mu_min)*(Size-IndexF_local)/(Size-1));
% mu=mu+(1.0-mu).*rand(1,Variables);
%
% x_ldirect=lBestS(s,:)-E(s,:); %局部最优个体的方向
% x_gdirect=gBestSreg(region,:)-E(s,:); %全局最优个体的方向
% [order_tdirect,index_tdirect]=sort([F_t_2(s) F_t_1(s) F(s)]); %
% E_tdirect=[E_t_2(s,:);E_t_1(s,:);E(s,:)];
% x_tdirect=E_tdirect(index_tdirect(1),:)-E_tdirect(index_tdirect(3),:);
%
% x_direct=weight*x_tdirect+rand(1,Variables).*x_gdirect+rand(1,Variables).*x_ldirect; %weight*
%
% Sign_x=sign(x_direct);
% Sign_x=(E(s,:)>=Variablesmax).*(-1)+(E(s,:)<=Variablesmin).*1+((E(s,:)>Variablesmin) & (E(s,:)<Variablesmax)).*Sign_x;
% index_Sign=find(Sign_x==0);
% %------ 随机方向 --------------------------------
% num_Sign=length(index_Sign);
% Sign_x(index_Sign)=round(rand(1,num_Sign));
% index_Sign=find(Sign_x==0);
% Sign_x(index_Sign)=-1;
% %------ 保持上次方向 --------------------------------
% %Sign_x(index_Sign)=Sign_x0(index_Sign);
%
% delta_x=Sign_x.*(En.*(-2*log(mu)).^0.5);
% delta_x=min(delta_xmax,max(delta_x,delta_xmin));
% x_offspring=E(s,:)+delta_x;
% % x_offspring=E(s,:)+Sign_x.*(En.*(-2*log(mu)).^0.5);
%
% x_offspring=(x_offspring>=Variablesmax).*Variablesmax+(x_offspring<Variablesmax).*x_offspring;
% x_offspring=(x_offspring<=Variablesmin).*Variablesmin+(x_offspring>Variablesmin).*x_offspring;
%
% % flag_stable=1;
% % if flag_stable==1
% % %% For real, stable, minimum-phase digital IIR filters, this
% % %% is quite easy. Zeros and poles must be inside the unit circle and exist in complex
% % %% conjugate pairs. 但是,Zeros 在单位圆内看是否可行,
% % %% 因为desired滤波器本身就不具有minimum-phase
% % [z_s p_s K_s]=tf2zp(x_offspring(1:order_num),[1 x_offspring(order_num+1:Variables)]);
% % offspring_zp=[z_s p_s];
% % % find poles and zeros outside the unit circle
% % out = abs(offspring_zp) > 1;
% % if out~=[]
% % % reciprocate necessary poles and zeros
% % offspring_zp = (1./offspring_zp).*out + offspring_zp.*abs(1-out);
% %
% % %calculate the magnitude response of H n
% % H_n = abs(freqz(poly(offspring_zp(1:order_num)),poly(offspring_zp(order_num+1:Variables)),W));
% % % scale H_n by K_n
% % K_s = sum(H_d,2)./sum(H_n,2);
% % [num_temp den_temp]=zp2tf(offspring_zp(1:order_num),offspring_zp(order_num+1:Variables),K_s);
% % x_offspring=[num_temp den_temp(2:end)];
% % end
% % elseif flag_stable==2
% % %% the reflection coefficients ki have magnitudes less
% % %% than 1 in order to maintain stability of the designed
% % %% filter
% % k_latc=tf2latc(1,[1 x_offspring(order_num+1:Variables)]);
% % out=abs(k_latc) > 1;
% % if out~=[]
% % % reciprocate necessary poles and zeros
% % k_latc = (1./k_latc).*out + k_latc.*abs(1-out);
% % end
% % out=abs(k_latc) == 1;
% % if out~=[]
% % k_latc = rand(1,order_den).*out + k_latc.*abs(1-out);
% % end
% % den_temp=latc2tf(k_latc);
% % x_offspring(order_num+1:Variables)=den_temp(2:end);
% % end
%
% E_t_2(s,:)=E_t_1(s,:);
% E_t_1(s,:)=E(s,:);
% E(s,:)=x_offspring;
% end % end of "for s=1:1:Size, %开始对种群逐个个体进行进化操作"
% end % region
%
% end %k
average_time(tr)=cputime-time1;
% average_Fun=average_Fun+bFun;
fFun(tr,1:num_stop)=bFun;
stop_num(tr)=num_stop;
fBestFun(tr)=gBestFun;
fBestS(tr,:)=gBestS;
tr
hold on
figure(1)
iters=1:length(bFun);
%plot(iters,minc,'–',iters,globalmin,':');
plot(iters,gBestFun_xx(tr,:));%plot(iters,bFun);
plot(iters,bFun,':r');
xlabel('generation');ylabel('cost');
end %attempt
average_fBestFun=mean(fBestFun);
Std_fBestFun=std(fBestFun);
index_Best=find(fBestFun==min(fBestFun));
Best_fBestFun=fBestFun(index_Best(1));
fprintf('Execution time : %4.1f seconds\n',cputime - stall);
save test_mypso9;
disp('Design Complete!');
%result:[89.8317,0.0094,1547194.1881;]0.01309
%libsvm---[2.8129 0.0093365 5.5147e+007 0.039223]0.012585 [2.8384
%0.005079 7.5511e+007 0.0475]0.0099779
%[3.0496,0.0102,54432556.4589,0.0678;3.0388,0.01,22322500.366,0.077;]0.0112
%[3.0773,0.0104,47428359.9223,0.053;3.4995,0.0102,26472545.9996,0.0615;]0.0112
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -