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

📄 main2.m

📁 为了有效地应用遗传算法解决 鲁棒控制系统设计问题
💻 M
📖 第 1 页 / 共 3 页
字号:
     n_xn2_0=size(chrom,1);
     number_01=1;
     chrom_slip1=[];chrom_slip2=[];chrom_slip3=[];chrom_slip4=[];
     chrom_objv1=[];chrom_objv2=[];chrom_objv3=[];chrom_objv4=[];
     selch1_thl1=[];selch1_thl2=[];selch1_thl3=[];selch1_thl4=[];
     best1=[];best2=[];best3=[];best4=[];
     while number_01<=n_xn2_0,
       if  (chrom_space1(number_01)>5)|(chrom_space2(number_01)>5),
           chrom_slip1=[ chrom_slip1;chrom(number_01,:)];
           chrom_objv1=[chrom_objv1;objv_or_fitnv(number_01)];
       else
         if  (chrom_space1(number_01)>=3)|(chrom_space2(number_01)>=3)&(chrom_space1(number_01)~=chrom_space2(number_01)),
             chrom_slip1=[ chrom_slip1;chrom(number_01,:)];
             chrom_objv1=[chrom_objv1;objv_or_fitnv(number_01)];
         else 
             if  (chrom_space1(number_01)>=3)|(chrom_space2(number_01)>=3)&(chrom_space1(number_01)==chrom_space2(number_01)),
                 chrom_slip2=[chrom_slip2;chrom(number_01,:)];
                 chrom_objv2=[chrom_objv2;objv_or_fitnv(number_01)];
             else
                 if  (chrom_space1(number_01)>=1)|(chrom_space2(number_01)>=1)&(chrom_space1(number_01)~=chrom_space2(number_01)),
                      chrom_slip2=[chrom_slip2;chrom(number_01,:)];
                      chrom_objv2=[chrom_objv2;objv_or_fitnv(number_01)];
                  else
                      if  (chrom_space1(number_01)>=1)|(chrom_space2(number_01)>=1)&(chrom_space1(number_01)==chrom_space2(number_01))
                           chrom_slip3=[chrom_slip3;chrom(number_01,:)];
                           chrom_objv3=[chrom_objv3;objv_or_fitnv(number_01)];
                       else
                           if  (chrom_space1(number_01)<=0)&(chrom_space2(number_01)<=0),
                                chrom_slip4=[chrom_slip4;chrom(number_01,:)];
                                chrom_objv4=[chrom_objv4;objv_or_fitnv(number_01)];
                           end
                       end
                  end
              end
          end
      end
         number_01=number_01+1;
      end
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    chrom_slip_number=1;
    while  chrom_slip_number<=4,
        if chrom_slip_number==1,
           chrom=chrom_slip1;
           chrom_objv=chrom_objv1;
           n_xn1=size(chrom,1);
           m2=fix(n_xn1*ftaotailv1);
           if m2<n_xn1,
              chrom(m2+1:n_xn1,:)=[];
           end
           selch1_thl1=chrom;
       end
        if chrom_slip_number==2,
           chrom=chrom_slip2;
           chrom_objv=chrom_objv2;
           n_xn1=size(chrom,1);
           m2=fix(n_xn1*ftaotailv2);
           if m2<n_xn1,
              chrom(m2+1:n_xn1,:)=[];
           end
           selch1_thl2=chrom;
       end
       if chrom_slip_number==3,
          chrom=chrom_slip3;
          chrom_objv=chrom_objv3;
          n_xn1=size(chrom,1);
          m2=fix(n_xn1*ftaotailv3);
           if m2<n_xn1,
              chrom(m2+1:n_xn1,:)=[];
           end
          selch1_thl3=chrom;
       end
        if chrom_slip_number==4,
          chrom=chrom_slip4;
          chrom_objv=chrom_objv4;
          n_xn1=size(chrom,1);
          m2=fix(n_xn1*ftaotailv4);
           if m2<n_xn1,
              chrom(m2+1:n_xn1,:)=[];
           end
          selch1_thl4=chrom;
       end
        if size(selch1_thl1)>=best_num,
           best1=selch1_thl1(1:best_num,:);
        else
           best1=[];
        end
       if size(selch1_thl2)>=best_num,
           best2=selch1_thl2(1:best_num,:);
        else
           best2=[];
        end
       if size(selch1_thl3)>=best_num,
           best3=selch1_thl3(1:best_num,:);
        else
           best3=[];
        end
        if size(selch1_thl4)>=best_num,
           best4=selch1_thl4(1:best_num,:);
        else
           best4=[];
        end
    %%%%%%%%%%%%%%%%%%%%%%%%%  
       chrom_slip_number= chrom_slip_number+1;
    end
  %%%%%%%%%%%%%%%%%%%%%%%% 
  best=[best1;best2;best3;best4];
  chrom=[selch1_thl1;selch1_thl2;selch1_thl3;selch1_thl4];
  %%%%%%%%%%%%%%%%%%%%%%%%
end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % 第二步寻找PARETO全部解中使用结束
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     if  space~=0,
    %%%%%%%%%%%%%%%%%%%%%%%% 第一步寻找PARETO部分解中使用 
    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=[];
     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_xn_warm=size(selch1_thl,1);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调整最优个体库
    stock_nub=fix(nind*stockbi);
    best=selch1_thl(1:best_num,:);
    chrom=selch1_thl(1:stock_nub,:);
    objv1=f1333(chrom(:,:));
    objv2=f2333(chrom(:,:));
    distancea1=sqrt((objv1(2:stock_nub)-objv1(1:(stock_nub-1))).^2+(objv2(2:stock_nub)-objv2(1:(stock_nub-1))).^2);
    distanceb1=sqrt((objv1(stock_nub)-objv1(1)).^2+(objv2(stock_nub)-objv2(1)).^2);
    distance01=[distanceb1;distancea1];
    [distance0_01,distance0_id11]=sort(distance01);
    selch1_0thl=chrom(distance0_id11,:);
    selch1_0thlnhy=selch1_0thl;
    selch1_0thlnhy(1:(stock_nub-nind),:)=[];
    stock_001=selch1_0thlnhy;
    chrom=selch1_thl;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调整最优个体库结束
    %%复杂排序结束
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%淘汰
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    n_xn1=size(objv_or_fitnv,2); 
    m2=fix(n_xn1*ftaotailv);
    objv_or_fitnvfd=find(objv_or_fitnv>(ftaotaibili*(sum(objv_or_fitnv))/n_xn1));
    selch100=chrom;
    chrom(objv_or_fitnvfd',:)=[];
    n_xn12=size(chrom,1);
    if n_xn12<(nind*youqunbi),
       selch100((m2+1):n_xn1,:)=[];
       chrom=selch100;
    else
    n_xn2=size(chrom,1);
    number_1=fix(m2/n_xn2);
    selch1=chrom;
       if number_1>=1,
           number_0=1;
           while number_0<number_1,
                  number_0=number_0+1;
                  chrom=[chrom;selch1];
            end
           chrom=[chrom;selch1(1:(m2-n_xn2*number_1+1),:)];
       else
           chrom((m2+1):n_xn2,:)=[];
       end
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%淘汰结束
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%选择最优解式扩张种群,第一步寻找PARETO部分解中使用
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    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_15=[];
     while  number_1<=number,
     suiji_5=suiji_5+probability;
    if suiji_5>probability_sup,
      probability_below1=fix(suiji_5/probability_sup); 
      probability_below2=suiji_5-probability_below1*probability_sup;
      if probability_below2<(probability_below/5),
      suiji_5= probability_below;
     else
      suiji_5= probability_below2; 
     end
    end
     suiji= suiji_5;
    %suiji_1=rand;
    %suiji=probability+ suiji_1*(1-2*probability);
    objv02_15(number_1,:)=suiji.*objv01(1,:)+(1-suiji).*objv01(2,:);
    number_1=number_1+1;
  end
    objv02_15_1=sort(objv02_15,1);
    objv0=(objv02_15_1(1,:)+objv02_15_1(number,:))./2;
    %%%%%%%%%%%%%%%%%%%%%%%%
    fitnv0=ranking(objv0');
    m3=size(chrom,1);
    q=fix(ggap* m3);
    selch=sus(fitnv0,q);
    selch1=chrom(selch,:);
    chrom=selch1;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%以下为排序
     suiji_6=suiji_6+probability;
    if suiji_6>probability_sup,
      probability_below1=fix(suiji_6/probability_sup); 
      probability_below2=suiji_6-probability_below1*probability_sup;
      if probability_below2<(probability_below/5),
      suiji_6= probability_below;
     else
      suiji_6= probability_below2; 
     end
    end
     suiji= suiji_6;
    %suiji_1=rand;
    %suiji=probability+ suiji_1*(1-2*probability);
    objv1=f1333(chrom(:,:));
    objv2=f2333(chrom(:,:));
    objv01=[objv1';objv2'];
    objv0=suiji.*objv01(1,:)+(1-suiji).*objv01(2,:);
    [objv0_11,oid_0]=sort(objv0);
    oid_1=oid_0';
    selch1=chrom(oid_1,:);
    chrom=selch1;
    %%%%%%%%%%%%%%%%%%%%%%%%%%排序结束
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%选择最优解式扩张种群,第一步寻找PARETO部分解中使用结束
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    trace1(gen,1)=min(f1333(v_end));
    trace1(gen,2)=sum(f1333(v_end))/length(f1333(v_end));
    trace2(gen,1)=min(f2333(v_end));
    trace2(gen,2)=sum(f2333(v_end))/length(f2333(v_end));
    trace3(gen,1)=min(f1333(v_end)+f2333(v_end));
    trace3(gen,2)=sum(f1333(v_end))/length(f1333(v_end)+f2333(v_end))/length(f2333(v_end));
    gen=gen+1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%主循环体结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pause(1);%显示>0.1秒
[dst,GD,Ds]=GD_Ds(objv_end,P1,P2);%调用函数GD_Ds%种群与P1;P2的最短平均距离;;绝对误差;;和;;目标函数的相对波动情况
figure(2);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值');
figure(3);clf;
plot(trace2(:,1));hold on;plot(trace2(:,2),'-.');
plot(trace2(:,1),'.');plot(trace2(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值');
figure(4);clf;
plot(trace3(:,1));hold on;plot(trace3(:,2),'-.');
plot(trace3(:,1),'.');plot(trace3(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值');
figure(5);clf;
plot(f1333(v_end));hold on;plot(f2333(v_end),'r-.');
grid;



    

⌨️ 快捷键说明

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