当前位置:   article > 正文

【Matlab学习】轮盘赌算法设计_matlab选择适应度小的值

matlab选择适应度小的值

轮盘赌算法的基本思想是:各个个体被选中的概率与其适应度函数值大小成正比,它是为了防止适应度数值较小的个体被直接淘汰而提出的。
轮盘赌算法的核心在于两个概率和个体选择策略:
(1)个体选择概率
(2)累积概率
(3)如何选择某个个体

1.个体选择概率

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)

2.累积概率

累积概率把各个个体的概率使用不同长度的线段来表示,这些线段组合成一条直线,直线的长度为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=1ip(xk)
这样,如果某个个体的适应度数值高,它所对应的个体选择概率就会越大,通过累积概率转换后对应的线段会越长。
在这里插入图片描述
在这里插入图片描述

3.如何选择某个个体

选择某个个体策略为在区间[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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

运行结果

点击run,每次运行的结果都不同,但是可以看到大概率会选中较小的值。
在这里插入图片描述

学习原文地址:https://blog.csdn.net/qq_33649817/article/details/86582420

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/609455
推荐阅读
相关标签
  

闽ICP备14008679号