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

    
function P = Genetic_select(vecpop)
%此为遗传算法的自然选择函数

%参数初始化
Genetic_init

%定义适应度
Fitness = zeros(1,popSize);
FitnessRate = zeros(1,popSize);
P = cell(1,popSize);
P_k = 1;

bestFitness = 0;
bestFitness_num = 0;

for i=1:popSize
    Fitness(i) = 1/evaluate(vecpop{i});
    if Fitness(i) > bestFitness
        bestFitness = Fitness(i);
        bestFitness_num = i;
    end
    totalFitness = totalFitness+Fitness(i);
end


for i=1:popSize
    for j=1:i
        FitnessRate(i) = Fitness(j)/totalFitness+FitnessRate(i);
    end
end

select_num = rand(1,popSize);
for k=1:popSize
    for i=1:popSize
        if i == 1
            if select_num(k)<FitnessRate(i)
                P{P_k} = vecpop{i};
            end
        else
            if i == popSize
                if select_num(k)>FitnessRate(i-1)
                    P{P_k} = vecpop{i};
                end
            else
            if select_num(k)>=FitnessRate(i-1) && select_num(k)<=FitnessRate(i)
                P{P_k} = vecpop{i-1};
            end
            end
        end
        
    end
    P_k=P_k+1;
end

bestGeneration = vecpop{bestFitness_num};
P{popSize+1} = bestGeneration;
P{popSize+2} = bestFitness;

disp('完成一次自然选择');