哈喽!大家好,我是HappyGirl快乐女孩,最爱海贼王💞💞💞
是一位爱好技术的【技术Fans】!😜😜😜
💞💞💞 如果有对技术感兴趣的宅友,欢迎关注💞💞💞
❤️❤️❤️感谢各位❤️❤️❤️
————————————————
遗传算法(GA)中一种常见的选择算子-随机遍历抽样(Stochastic Universal Sampling,SUS)。因为SUS是基于轮盘赌选择(Roulette Wheel Selection,RWS)而改进的,所以首先介绍RWS,然后再介绍SUS。
🎒 🎒 🎒 文章目录 🎒 🎒 🎒
目录
🎒 🎒 🎒 目录结束 🎒 🎒 🎒
🏳️🌈 轮盘赌选择(RWS)
在RWS中,首先将个体适应度值映射到轮盘中,个体的适应度值越大,其在轮盘中分配到的角度就越大,因此被选中的概率就越大。
假设有5个个体,各适应度值分别为[6.82,1.11,8.48,2.57,3.08],总适应度值为22.06。分别计算各个适应度值占总适应度值之比,即为[0.31,0.05,0.38,0.12,0.14]。适应度值占比示意图和轮盘赌选择示意图分别如下图所示。
轮盘指针所指位置为个体3,此时执行一次轮盘赌选择操作所选择的个体为个体3。假设需要选择5个个体,则需转动5次转盘,每次转动轮盘指针所指位置即为被选择的个体。
🍁 随机遍历抽样(SUS)
从轮盘赌选择过程可以看出:如果需要选择N个个体,则需转动N次转盘。为了改进这一问题,SUS被提出。
在SUS中,如果需要选择N个个体,则只需一次生成N个等间距的标记指针位置,即可选择出N个个体。假设总适应度值为F,选择个体数目为N,则SUS具体步骤如下:
STEP1:计算指针的间距P=F/N;
STEP2:随机生成起点指针位置Start=[0~P之间的随机数];
STEP3:计算各指针的位置Pointers=[Start+i*P(其中i=[0,1,...N-1])];
STEP4:根据各指针位置,选择出N个个体。
📣 SUS实例讲解
继续以上述例子为例,5个个体的适应度值分别为[6.82,1.11,8.48,2.57,3.08],总适应度值为F=22.06。假设选择的个体数目为5,则SUS执行步骤如下:
STEP1:计算指针的间距P=F/N=22.06/5=4.41;
STEP2:假设随机生成起点指针位置Start=2;
STEP3:计算各指针的位置Pointers=[2+0*4.41,2+1*4.41,2+2*4.41,2+3*4.41,2+4*4.41]=[2,6.41,10.82,15.23,19.64];
STEP4:根据各指针位置,选择出N个个体,选择的个体序号为[1,1,3,3,5]。
上述SUS执行过程如下图所示:
💞 matlab代码
% 输入:
%FitnV 个体的适应度值
%Nsel 被选择个体的数目
% 输出:
%NewChrIx 被选择个体的索引号
function NewChrIx = Sus(FitnV,Nsel)
% Identify the population size (Nind)
[Nind,ans] = size(FitnV);
% Perform stochastic universal sampling
cumfit = cumsum(FitnV);
trials = cumfit(Nind) / Nsel * (rand + (0:Nsel-1)');
Mf = cumfit(:, ones(1, Nsel));
Mt = trials(:, ones(1, Nind))';
[NewChrIx, ans] = find(Mt < Mf & [ zeros(1, Nsel); Mf(1:Nind-1, :) ] <= Mt);
% Shuffle new population
[ans, shuf] = sort(rand(Nsel, 1));
NewChrIx = NewChrIx(shuf);
% End of function
end
文章来源于【随心390】
各位走过路过,不要错过,记得关注我哦