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

📄 crossover.m

📁 免疫算法实现多峰、多极值函数平面曲面拟合
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function new_antibodies=crossover(antibodies)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 本函数实现四点交叉操作,五个九位二进编码(即45位)执行相互交叉操作。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bit_length=9;
new_antibodies=antibodies;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for j=1:size(antibodies,1)
    if rand>0.2     % 交叉概率为0.8
        % 分别将两个个体的第j个基因译码为45位二进编码
        temp1(size(antibodies,2)-1)=antibodies(j,size(antibodies,2),1)*60;
        temp1(1:size(antibodies,2)-2)=antibodies(j,2:size(antibodies,2)-1,1)*120+240;
        bin1=rem(floor(round(temp1)'*pow2(1-bit_length:0)),2)';
        temp2(size(antibodies,2)-1)=antibodies(j,size(antibodies,2),1)*60;
        temp2(1:size(antibodies,2)-2)=antibodies(j,2:size(antibodies,2)-1,2)*120+240;
        bin2=rem(floor(round(temp2)'*pow2(1-bit_length:0)),2)';
        % 确定四个交叉点
        [ignore,cross_site]=sort(rand(1,bit_length*(size(antibodies,2)-1)));
        cross_site=sort(cross_site(1:4));
        % 进行交叉操作
        for k=1:2:3
            temp=bin1(cross_site(k)+1:cross_site(k+1));
            bin1(cross_site(k)+1:cross_site(k+1))=bin2(cross_site(k)+1:cross_site(k+1));
            bin2(cross_site(k)+1:cross_site(k+1))=temp;
        end
        % 将交叉完的两个二进编码串恢复为基因形式
        twos = pow2(bit_length-1:-1:0);
        new_antibodies(j,2:size(antibodies,2),1)=sum(bin1'.* twos(ones(size(antibodies,2)-1,1),:),2)'/120;
        new_antibodies(j,2:size(antibodies,2),2)=sum(bin2'.* twos(ones(size(antibodies,2)-1,1),:),2)'/120;
        new_antibodies(j,size(antibodies,2),:)=new_antibodies(j,size(antibodies,2),:)*2;
        new_antibodies(j,2:size(antibodies,2)-1,:)=new_antibodies(j,2:size(antibodies,2)-1,:)-2;
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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