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

📄 cross.m

📁 本程序为遗传算法源程序
💻 M
字号:
function  [cpop ,bits]=cross(child,bounds,CP)
%交叉函数,采取点交叉
%[newpop ,len]=cross(child,bounds,CP)
%child      复制后的种群
%bounds     边界约束
%CP         交叉概率
%newpop     交叉后的新种群
%len        每个变量的编码长度
%           如len返回为[4 3 3];表示有三个变量,第一个变量的二进制编码长度为4,依次类推

[n ,m]=size(child);
B=[];t=[];bits=[];
mychild=child;
v=[];
bits=bounds(:,3)';
p=rand(1,n);
k=1;
    for i=1:n
        if p(i)<CP
            v(k)=i;                %v(k)要交叉的行
            k=k+1;
        end
    end
%在k个要交换的样本中任意选择两个样本v(j)和v(j-1)
 for j=1:k-1                       %共有k-1个样本要交换
    if (rem(j,2)==0)
       temp=floor(rand*(k-1))+1;  
       v(j-1)=temp;
    end
end 
%要交换的样本转化成二进制
if (~isempty(v))
    for i=1:k-1
        %[bval] = ff2bit(fval,bounds,bits)
        [B(i,:)] = ff2bit(mychild(v(i),:),bounds,bits);
        %[B(i,:),len]=B2F(mychild(v(i),:),bounds);
    end
end

for i=1:2:k-2
    p2=floor(rand*sum(bits));
    t=zeros(1,p2);
    t(i,:)=B(i,1:p2);
    B(i,1:p2)=B(i+1,1:p2);
    B(i+1,1:p2)=t(i,:);
end
for i=1:k-1
   %mychild(v(i),:)=F2B(B(i,:),bounds,len);
   [mychild(v(i),:)] = bit2ff(B(i,:),bounds,bits);
   %function [fval] = b2f(bval,bounds,bits);
end
cpop=mychild;




⌨️ 快捷键说明

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