赞
踩
轮盘赌算法的基本思想是:各个个体被选中的概率与其适应度函数值大小成正比,它是为了防止适应度数值较小的个体被直接淘汰而提出的。
轮盘赌算法的核心在于两个概率和个体选择策略:
(1)个体选择概率
(2)累积概率
(3)如何选择某个个体
1、个体个体选择概率比较好理解,适应度数值越高,它被选中的概率就越大,使用以下公式来表示。其中,xi为某个个体。
P
(
x
i
)
=
f
(
x
i
)
∑
j
=
1
N
f
(
x
j
)
P\left(x_{i}\right)=\frac{f\left(x_{i}\right)}{\sum_{j=1}^{N} f\left(x_{j}\right)}
P(xi)=∑j=1Nf(xj)f(xi)
累积概率把各个个体的概率使用不同长度的线段来表示,这些线段组合成一条直线,直线的长度为1(各个个体概率之和),这样在该直线中,某段的线段最长,就代表该个体被选中的概率越大。它的机理为:
(1)任意选择所有个体的一个排列序列(这个序列可以随便排,因为是某线段之间的长度为代表某个体的选择概率)
(2)任意个体的累积概率为该个体对应的前几项数据的累加和。
某个个体的累加概率公式如下:
Q
(
x
i
)
=
∑
k
=
1
i
p
(
x
k
)
Q\left(x_{i}\right)=\sum_{k=1}^{i} p\left(x_{k}\right)
Q(xi)=k=1∑ip(xk)
这样,如果某个个体的适应度数值高,它所对应的个体选择概率就会越大,通过累积概率转换后对应的线段会越长。
在这里插入图片描述
选择某个个体策略为在区间[0 1]中随机产生一个数,看看该数字落在那个区间,很明显,对于适应度值较大的个体,对应的线段长度会长,这样随机产生的数字落在此区间的概率就大,该个体被选中的概率也大。同时,对于适应度较小的个体,线段长度会相对较短,随机数字在该区间的概率相对较小,但是也有被选中的可能,避免了适应度数值较小的个体被直接淘汰的问题。
这里我选取了较小值问题,函数值越小选中的概率越大
%% 轮盘赌 clear clc % 在极小值问题中,值越小表示选中的概率越大 %比如M=[2,1,5,8,1,2,3]数组中1最小,那么这个数应该占据的比例比较大,轮盘赌选中的概率也比其他的高 M=[2,1,5,8,1,2,3]; %把数组用积累概率表示,先将每项取导,累计求和。计算每项对应的累计概率的值 FitSel=(M).^-1; CumulFit=cumsum(FitSel); %使用轮盘赌输出要选择的序号A P=CumulFit/max(CumulFit); A=Roulette(P); Target=M(A); %% 轮盘赌的函数 % Roulette wheel Function %输入每项对应的累计概率矩阵,输出序号 function out=Roulette(Fitness) out=0; %刚开始的时候设为0 R=rand; %比较R与Fitness的大小,找到R应该在累计概率中的位置,如果f(4)<R<f(5),那么就把序号(5)输出 while R>Fitness(out+1) out=out+1; end out=out+1; end
点击run,每次运行的结果都不同,但是可以看到大概率会选中较小的值。
学习原文地址:https://blog.csdn.net/qq_33649817/article/details/86582420
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。