⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soa_wgyh_zyk_dai_57.m

📁 对电力系统57接点应用随机搜索法进行潮流分析,及电压稳定分析
💻 M
📖 第 1 页 / 共 2 页
字号:
%                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 + -