www.gusucode.com > matlab编程求解机器人的正逆解 采用遗传算法对机器人进行路径规划源码程序 > code/遗传算法/Genetic_cross.m

    function P = Genetic_cross(vecpop)

%此为遗传算法的杂交函数

%参数初始化
Genetic_init

P = cell(1,1);
len = length(vecpop);
CrossRadom = randperm(len);


for i=1:len/2
    P{P_k} = vecpop{CrossRadom(i)};
    P{P_k+1} = vecpop{CrossRadom(i*2)};    
    if rand<crossoverRate
                b = rand;
                b1 = 0.5+b;
                b2 = 0.5-b;
                tempA = P{P_k};
                tempB = P{P_k+1};
                P{P_k} = b1*tempA+b2*tempB;
                P{P_k+1} = b1*tempB+b2*tempA;
                if min(P{P_k})<-1/1000 || min(P{P_k+1})<-1/1000 || max(P{P_k})>1/1000 || max(P{P_k+1})>1/1000
                    bita = rand;
                    P{P_k} = bita*tempA+(1-bita)*tempB;
                    P{P_k+1} = bita*tempB+(1-bita)*tempA;
                end
    end
    P_k = P_k+1;
end
disp('完成一次基因交叉');