NSGA-II改进之父代选择

1-父代选择方式的选择

在父代选择方式中,原采用的选择方式锦标赛选择方式。从锦标赛的选择方式来看,随机从种群中选择指定数量的个体进行竞争得到父代个体,优点是任何个体都有可能参与到竞争,一个适应值大的个体有可能作为多个父代的个体,可以保证父代选择公平,保证种群进化有一定的搜索范围,避免陷入局部最优中。

但锦标赛的选择方式也有一定的缺点,从锦标赛的实现方式来看,父代的选择近似于随机选择,在整个种群的进化过程中,影响进化的速度,其进化过程的搜索能力不能得到保证。为了保证算法的收敛速度;在算法的前期要保证算法的搜索能力,扩大搜索空间,避免陷入局部最优;在后期要加大父代选择的压力,保证算法的收敛,使算法可以更好的毕竟真实值;选择基于线性排名的父代选择方式

2-基于线性排名的父代选择方式

假设 N 为种群的规模,在线性选择排名中,将种群的个体按照适应值从小到大,在 NSGA-II 中是先对等级进行降序排序,在对拥挤距离进行升序排序。**排名越低(适应值越大),选择概率越高。**然后按照某个有关的线性函数来分配每个个体的选择概率。
假设 x 1 为排名最高的个体, x n 为排名最低的个体。那么个体 x i 的选择概率为 : p i = 1 N ( η − + ( η + − η − ) i − 1 N − 1 ) 其中 i = 1 , 2 , 3... N , η − 和 η + 为指定的一个常数,且要求 η − + η + ,并且 0 ≤ η − ≤ 1 。 根据选择概率,可以知道当 η − = 0 , η + = 2 时,种群的选择压力最大,当 η − = η + = 1 时, 选择当时为随机选择,这时选择压力最小。 而为了可以在计算过程中,逐渐加大父代种群的选择压力,可以根据当前代数与最大代数的关系 逐步改变 η − 和 η + 的值。 \begin{aligned} &假设x_1为排名最高的个体,x_n为排名最低的个体。那么个体x_i的选择概率为: %\end{aligned} \\ \\& p_i=\frac{1}{N}(\eta^-+(\eta^+-\eta^-)^\frac{i-1}{N-1}) \\ %\begin{aligned} \\& 其中i=1,2,3...N,\eta^- 和\eta^+为指定的一个常数,且要求\eta^-+\eta^+, 并且0\leq\eta^-\leq1。 \\& 根据选择概率,可以知道当\eta^-=0,\eta^+=2时,种群的选择压力最大,当\eta^-=\eta^+=1时, \\& 选择当时为随机选择,这时选择压力最小。 \\& 而为了可以在计算过程中,逐渐加大父代种群的选择压力,可以根据当前代数与最大代数的关系 \\& 逐步改变\eta^- 和\eta^+的值。 \end{aligned} 假设x1为排名最高的个体,xn为排名最低的个体。那么个体xi的选择概率为:pi=N1(η+(η+η)N1i1)其中i=1,2,3...N,ηη+为指定的一个常数,且要求η+η+,并且0η1根据选择概率,可以知道当η=0,η+=2时,种群的选择压力最大,当η=η+=1时,选择当时为随机选择,这时选择压力最小。而为了可以在计算过程中,逐渐加大父代种群的选择压力,可以根据当前代数与最大代数的关系逐步改变ηη+的值。

3-MATLAB代码实现

function parent_pop = select_parent(pop,ud,up,parent_size)
% 采用线性排名选择父代个体
[sizepop,td] = size(pop);
%对种群的等级和拥挤距离进行排序
pop = sortrows(pop,[-(td-1),td]);

parent_pop = [];
pi = zeros(1,sizepop);
for i = 1:sizepop
    %计算每一个个体选择的概率
    pi(1,i) = 1/sizepop*(ud+(up-ud)*((i-1)/(sizepop-1))); 
end
pi = cumsum(pi);
r = sort(rand(1,parent_size));

fitin = 1; % 表示第几个个体
newin = 1; % 表示第几个随机数
while newin<=parent_size
    if(r(newin)) <= pi(fitin)
        parent_pop = [parent_pop;pop(fitin,:)];
        newin = newin+1;
    else
        fitin = fitin+1;
    end
end
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值