遗传算法之一-随机遍历抽样

 
哈喽!大家好,我是HappyGirl快乐女孩,最爱海贼王💞💞💞
是一位爱好技术的【技术Fans】!😜😜😜


💞💞💞 如果有对技术感兴趣的宅友,欢迎关注💞💞💞
❤️❤️❤️感谢各位❤️❤️❤️
————————————————

遗传算法(GA)中一种常见的选择算子-随机遍历抽样(Stochastic Universal Sampling,SUS)。因为SUS是基于轮盘赌选择(Roulette Wheel Selection,RWS)而改进的,所以首先介绍RWS,然后再介绍SUS。

 🎒  🎒  🎒 文章目录 🎒  🎒  🎒

目录

🏳️‍🌈 轮盘赌选择(RWS)

🍁 随机遍历抽样(SUS)

📣 SUS实例讲解

💞 matlab代码


 🎒  🎒  🎒 目录结束 🎒  🎒  🎒


🏳️‍🌈 轮盘赌选择(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】

各位走过路过,不要错过,记得关注我哦

 

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HappyGirl快乐女孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值