gusucode.com > 十大算法matlab程序说明 > 十大算法matlab程序说明/遗传算法/用MATLAB实现遗传算法程序/cross.m

    function  [cpop ,len,v]=cross(child,bounds,CP)
%交叉函数,采取点交叉
%[newpop ,len]=cross(child,bounds,CP)
%child      复制后的种群
%bounds     边界约束
%CP         交叉概率
%newpop     交叉后的新种群
%len        每个变量的编码长度
%           如len返回为[4 3 3];表示有三个变量,第一个变量的二进制编码长度为4,依次类推
%           作者:机自01-2班曾新海
%           zxh21st@163.com
if isempty(CP)
    CP=0.25;
end
[n ,m]=size(child);
B=[];len=[];t=[];
mychild=child(:,1:end-1);
v=[];
p=rand(1,n);
k=1;
    for i=1:n
        if p(i)<CP
            v(k)=i;
            k=k+1;
        end
    end
    if (rem(k,2)==0)
        temp=v(k-1);
        while (temp==v(k-1))
        temp=round(rand*(n-1))+1;
    end
    v(k)=temp;
    k=k+1;
   end 
if isempty(v)
    [B(i,:),len]=B2F(mychild(1,:),bounds);
    B=[];
else
    for i=1:k-1
[B(i,:),len]=B2F(mychild(v(i),:),bounds);
end
for i=1:2:k-2
    p2=round(rand*sum(len)-1)+1;
    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);
end
end
cpop=mychild;