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

📄 crossover.m

📁 基于灰色系统方法的离散多目标优化设计程序
💻 M
字号:
function crosx=crossover(selecx,cros_ratio,pop,n,res_flg,gk,hk,cmax,tpop,tmax,flag_x,dis_date,float_date)
%本程序为交叉算子,cros_ratio为交叉概率,采用算术交叉。
%输出矩阵corsx[J,n],J为交叉后得到的染色体数,由程序运行情况决定。
         %++++++++++++++++++++++++++++++++++++++
    r=unifrnd(0,1,1,pop);   %产生[0,1]间均匀分布的伪随机数。
    xxk=zeros(1,pop);
for k=1:pop
 %本循环确定预选参与交叉的染色体标记为xx(k)=1。
    if  r(1,k)<=cros_ratio
        xxk(1,k)=1;
    else
        xxk(1,k)=0;
    end
end
        %++++++++++++++++++++++++++++++++++++++++
[y1,y2]=find(xxk);   %确定xxk中非零元素的下标值。
[a,b]=size(y2);      %测试y2的维数。
J=floor(b/2);        %floor向负无穷方向取整,使J为2的整数倍。
J=2*J;               %J为参与交叉的路软色体各个数
xxkk=zeros(1,pop);
yy=zeros(J,n);
for i=1:J
    %本循环确定参与交叉的染色体yy。
    yy(i,:)=selecx(y2(i),:);
    xxkk(1,y2(i))=1;  %给最后选出参与交叉的染色体置标志1
end
        %+++++++++++++++++++++++++++++++++++++++++
    fcrosx=zeros(J,n);    
for i=1:2:(J-1)
    %本循环为交叉操作,交叉后得到的子染色体为fcrosx(J,n)。
    f_x=zeros(4,n);  %临时工作数组
    f_x0=zeros(1,4); %临时工作数组
    fcrosx(i,:)=0.6*yy(i,:)+0.4*yy(i+1,:);
    fcrosx(i+1,:)=0.4*yy(i,:)+0.6*yy(i+1,:);
    fcrosx(i,:)=discrete(fcrosx(i,:),n,flag_x,dis_date,float_date); %离散化处理
    fcrosx(i+1,:)=discrete(fcrosx(i+1,:),n,flag_x,dis_date,float_date);%离散化处理
    f_x=[yy(i,:);yy(i+1,:);fcrosx(i,:);fcrosx(i+1,:)];
    f_x0(1,1)=fitfunction(yy(i,:),res_flg,gk,hk,cmax,tpop,tmax);
    f_x0(1,2)=fitfunction(yy(i+1,:),res_flg,gk,hk,cmax,tpop,tmax); 
    f_x0(1,3)=fitfunction(fcrosx(i,:),res_flg,gk,hk,cmax,tpop,tmax);
    f_x0(1,4)=fitfunction(fcrosx(i+1,:),res_flg,gk,hk,cmax,tpop,tmax);
    [b,index]=sort(f_x0);
    fcrosx(i,:)=f_x(index(3),:);
    fcrosx(i+1,:)=f_x(index(4),:);
    %pause
end
     ppch=1;
     for  i=1:pop  
         %交叉后群体重组,输出交叉操作后的群体crosx(pop,n).
           if  xxkk(1,i)==1
               crosx(i,:)=fcrosx(ppch,:);
               ppch=ppch+1;
           else
               crosx(i,:)=selecx(i,:);
           end
      end
                 
    
         
         

⌨️ 快捷键说明

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