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

📄 main2.m

📁 为了有效地应用遗传算法解决 鲁棒控制系统设计问题
💻 M
📖 第 1 页 / 共 3 页
字号:
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离和结束
     n_xn2_0=size(chrom,1);
     chrom_space1=[];
     chrom_space2=[];
     chrom_space_end=[];
     distance000=zeros(n_xn2_0,n_xn2_0);
     happy=1;
     while happy<=2,
         if happy==1,
           objv1_objv2_max_min_end=objv1_objv2_max_min_end1;
           distance000=distance0001;
       else 
           objv1_objv2_max_min_end=objv1_objv2_max_min_end2;
           distance000=distance0002;
       end
       number_01=1;
     chrom_space1_lv_dis1=(objv1_objv2_max_min_end./nind);
     while number_01<=n_xn2_0,
         number_02=1;
         temp=0;
         while number_02<=n_xn2_0,
            if   distance000(number_01,number_02)<chrom_space1_lv_dis1,
                temp=temp+1;
            end
         number_02=number_02+1;    
         end
          if happy==1,
             chrom_space1(number_01)=temp-1;
          else
             chrom_space2(number_01)=temp-1;
          end
         number_01=number_01+1;
      end
     happy= happy+1;
  end
      chrom_space_end=chrom_space1+chrom_space2;
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离数字化结束
    %%排序并选择nind个个体
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求共享函数数字化
     n_xn2_0=size(chrom,1);
     number_01=1;
     v_end1_1=[];objv02=[];
     v_end1_2=[];
     v_end1_3=[];
     v_end1=[];
     while number_01<=n_xn2_0,
         if  (chrom_space1(number_01)>5)|(chrom_space2(number_01)>5),
             objv02(number_01)=objv02_thlhappy_1(number_01).*chrom_space1_dwon;
         else
                 if   chrom_space1(number_01)>=chrom_space2(number_01),
                      chrom_space_end(number_01)=chrom_space1(number_01)*2;
                 else
                      chrom_space_end(number_01)=chrom_space2(number_01)*2;
                 end
             objv02(number_01)= objv02_thlhappy_1(number_01);
         end
        if  ((chrom_space1(number_01)<=2)&(chrom_space2(number_01)<=2))&((chrom_space1(number_01)>0)|(chrom_space2(number_01)>0)),
              if   chrom_space1(number_01)==chrom_space2(number_01),
                     v_end1_2=[v_end1_2;chrom(number_01,:)]; 
                 else
                      v_end1_3=[v_end1_3;chrom(number_01,:)]; 
                 end
         end
         if  (chrom_space1(number_01)<=0)&(chrom_space2(number_01)<=0),
             v_end1_1=[v_end1_1;chrom(number_01,:)]; 
         end
         number_01=number_01+1;
      end
       v_end1=[ v_end1;v_end1_1];
       chiqun=size(v_end1,1)
       if   chiqun<nind,
          v_end1=[ v_end1;v_end1_2];
      end
       chiqun=size(v_end1,1)
       if   chiqun<nind,
          v_end1=[ v_end1;v_end1_3];
      end
       chiqun=size(v_end1,1)
        if   chiqun>nind,
          v_end1((nind+1):chiqun,:)=[];
      end
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%求共享函数数字化结束
    objv0_system=objv02+chrom_space_end.*objv1_objv2_max_min_end.*baoduolv_dis;%+(1-distance000_1./distance000_2).*objv1_objv2_max_min_end.*baoduolv_dis1;
    objv0=objv0_system';
    [objv0_11,oid_0]=sort(objv0);
    oid_1=oid_0';
    selch1=chrom(oid_1,:);
    chrom=selch1(1:nind,:);
    %%%%%%%%%%%%%%%%%%%%%%%%%
    v_end=chrom;
    objv1=f1333(chrom(:,:));
    objv2=f2333(chrom(:,:));
    objv0=[objv1';objv2'];
    objv_end=objv0;
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%距离加权定标结束
    %%排序并选择nind个个体结束
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%% %第二步寻找PARETO整个边界,共享函数法结束
if   (happy_kaiguan==1)|(happy_kaiguan==2),
    if happy_kaiguan==1,
        objv_end1_happy1=sum(objv1)./nind;
        objv_end1_happy2=sum(objv2)./nind;
    else
        objv_end2_happy1=sum(objv1)./nind;
        objv_end2_happy2=sum(objv2)./nind;
    end
end
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%区间界定结束
     %%保持种群的多样性结束
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     %本循环每运行10次,显示一次结果
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     if rem(gen,interval_2)==0,
      figure(1);
      plot(P1,P2,'r-.');
      hold on;
      plot(objv0(1,:),objv0(2,:),'.b');
      title(['Gen= ' num2str(gen)]);
      hold off;
      pause(.1);%显示>0.1秒
      end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%显示一次结果结束    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%交叉、变异,产生nind_amp*nind新个体
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       amp_n=1;
       selch0=[];
       while   amp_n<=nind_amp,
              amp_n=amp_n+1;  
              selch1=recombin('recdis',chrom,pcross);
              selch0=[selch0;selch1];
       end
        chrom=selch0;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%变异区间调整
  % if space~=0,
    %%%%%%%%%%%%%%%%%%%%%
      if rem(gen, interval_3_pmutation)==0,
         n_xn2_1=size(chrom,1);
         n_xn2_2=size(chrom,2);
         number=1;
         while number<=n_xn2_2,
               [tempt,oid_0]=sort(chrom(:,number)); 
               fieldr1_1(1,number)=tempt(1);
               fieldr1_1(2,number)=tempt(n_xn2_1);
               number=number+1;
          end
          fieldr1(1,:)=fieldr1_1(1,:)-(fieldr(2,:)-fieldr(1,:))./pmutation_zone;
          fieldr1(2,:)=fieldr1_1(2,:)+(fieldr(2,:)-fieldr(1,:))./pmutation_zone;
          number=1;
          while number<=n_xn2_2,
              if fieldr1(1,number)<fieldr(1,number),
                   fieldr1(1,number)=fieldr(1,number);
              end
              if fieldr1(2,number)>fieldr(2,number),
                   fieldr1(2,number)=fieldr(2,number);
              end
              number=number+1;
           end
    %%%%
       else
    %%%%
           fieldr1=fieldr;
       end
   %%%%%%%%%%%%%%%%%%%%%%%   
   %else  
   %%%%%%%%%%%%%%%%%%%%%%%     
   %     fieldr1=fieldr;
        %  end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%变异区间调整结束
    chrom=mutbga(chrom,fieldr1,[pmutation,little_pmutation]); 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%交叉、变异,产生nind_amp*nind新个体结束
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%复杂排序
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if space~=0,
    chrom=[stock_001;best;chrom];
    else
    chrom=[best;v_end1;chrom];
    end
    %%%%%%%% 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%第二步寻找PARETO全部解中使用
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if space==0,
    %%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离和
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     objv1=f1333(chrom(:,:));
     objv2=f2333(chrom(:,:));  
     objv01=[objv1';objv2'];
     if probability<0.05,
         probability1=0.1;
     else
         probability1=probability;
     end
     number=fix(1/probability1)+1;
     number_1=1;
     objv02_14=[];objv0=[];
     while  number_1<=number,
       suiji_4=suiji_4+probability;
      if suiji_4>probability_sup,
         probability_below1=fix(suiji_4/probability_sup); 
         probability_below2=suiji_4-probability_below1*probability_sup;
          if probability_below2<(probability_below/5),
             suiji_4= probability_below;
         else
             suiji_4= probability_below2; 
          end
       end
       suiji= suiji_4;
    %suiji_1=rand;
    %suiji=probability+ suiji_1*(1-2*probability);
        objv02_14(number_1,:)=suiji.*objv01(1,:)+(1-suiji).*objv01(2,:);
        number_1=number_1+1;
    end
    objv02_14_1=sort(objv02_14,1);
    objv0=(objv02_14_1(1,:)+objv02_14_1(number,:))./2;
    %%%%%%%%%%%%%%%%%%%%%%%%
    [objv0_1,oid_0]=sort(objv0);    
    oid_01=oid_0';   
    objv_or_fitnv=objv0_1;
    selch1_thl=chrom(oid_01,:);
    n_xn1=size(objv_or_fitnv,2); 
    m2=fix(nind.*ftaotailv0);
    chrom((m2+nind+1):n_xn1,:)=[];
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     n_xn2_0=size(chrom,1);
     distance0001=zeros(n_xn2_0,n_xn2_0);
     distance0002=zeros(n_xn2_0,n_xn2_0);
     distance000_1=[];
     happy=1;
     while happy<=2,
        number_01=1;
     while number_01<=n_xn2_0,
       number_02=1;
       vbiaozhun1=chrom(number_01,:);
       objvbiaozhun11=f1333(vbiaozhun1(:,:));
       objvbiaozhun12=f2333(vbiaozhun1(:,:));
        while number_02<=n_xn2_0,
         vbiaozhun2=chrom(number_02,:);
         objvbiaozhun21=f1333(vbiaozhun2(:,:));
         objvbiaozhun22=f2333(vbiaozhun2(:,:));
          %%%%%%%%%%%%%%%%%%%%%%%%%%%
          if happy==1,
           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                  distance0001(number_01,number_02)=abs(objvbiaozhun11-objvbiaozhun21);
              else
                  distance0002(number_01,number_02)=abs(objvbiaozhun12-objvbiaozhun22);
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           end 
          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         number_02=number_02+1;
        end
       number_01=number_01+1;
      end
      happy=happy+1;
  end
      %distance000_1(number_01)=sum(distance000(number_01,:));
      %distance000_2=max(distance000_1);
      %[distance000_3,distance000_iod]=sort(distance000_1);
      %selch1=chrom(distance000_iod,:);
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离和结束
     n_xn2_0=size(chrom,1);
     chrom_space1=[];
     chrom_space2=[];
     distance000=zeros(n_xn2_0,n_xn2_0);
     happy=1;
     while happy<=2,
       if happy==1,
           objv1_objv2_max_min_end=objv1_objv2_max_min_end1;
           distance000=distance0001;
       else 
           objv1_objv2_max_min_end=objv1_objv2_max_min_end2;
           distance000=distance0002;
       end
     number_01=1;
     chrom_space1_lv_dis1=(objv1_objv2_max_min_end./nind);
     while number_01<=n_xn2_0,
         number_02=1;
         temp=0;
         while number_02<=n_xn2_0,
            if   distance000(number_01,number_02)<chrom_space1_lv_dis1,
                temp=temp+1;
            end
         number_02=number_02+1;    
         end
          if happy==1,
             chrom_space1(number_01)=temp-1;
          else
             chrom_space2(number_01)=temp-1;
          end
         number_01=number_01+1;
      end
     happy= happy+1;
  end
      chrom_space_end=chrom_space1+chrom_space2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求各个体的距离数字化结束  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -