function [selectpop,selectfit] = myselect(allpop,allfit,popnum) [sfit,ind]=sort(allfit); %根据精英保留法保留种群数80%的部分 pop1 = allpop(ind(1:popnum*0.8),:); fit1 = sfit(1:popnum*0.8); %剩余的部分 restpop = allpop(ind(popnum*0.8+1:end),:); restfit = sfit(popnum*0.8+1:end); %再从剩余的部分用轮盘赌选择20%种群 f=restfit+1; f=1./f; f=f./sum(f); f=cumsum(f); % 轮盘赌的准备 t = 1; temp = zeros(length(f),1);的伪代码
时间: 2023-10-23 09:09:42 浏览: 89
这段伪代码实现的是一个基于精英保留法和轮盘赌选择的种群选择算法。具体步骤如下:
1. 首先,将所有个体按照适应度从小到大排序,并选取适应度最好的前20%的个体作为精英个体,保留至下一代。
2. 接着,将剩余80%的个体作为备选个体,按照适应度大小转换为概率分布,使用轮盘赌算法选择20%的个体,加入到下一代中。
这段伪代码的具体实现步骤如下:
1. 首先,将所有个体按照适应度从小到大排序,并选取适应度最好的前20%的个体作为精英个体,保留至下一代。
```
[sfit,ind]=sort(allfit); %将适应度从小到大排序
pop1 = allpop(ind(1:popnum*0.8),:); %选择适应度最好的前80%个体
fit1 = sfit(1:popnum*0.8); %对应的适应度值
```
2. 接着,将剩余80%的个体作为备选个体,按照适应度大小转换为概率分布,使用轮盘赌算法选择20%的个体,加入到下一代中。
```
restpop = allpop(ind(popnum*0.8+1:end),:); %剩余的备选个体
restfit = sfit(popnum*0.8+1:end); %对应的适应度值
f=restfit+1; %为了避免适应度值为0,将适应度值加上1
f=1./f; %将适应度值转换为概率
f=f./sum(f); %归一化
f=cumsum(f); %计算累积概率
for i=1:length(f) %轮盘赌选择
while t<=length(f) && temp(t)<f(i)
t=t+1;
end
selectpop(i+popnum*0.8,:)=restpop(t,:);
selectfit(i+popnum*0.8)=restfit(t);
temp(i)=rand(1); %生成0~1之间的随机数
end
```
最终,`selectpop`和`selectfit`分别表示选择出的种群和对应的适应度值。
阅读全文