遗传算法(三)——适应度与选择

适应度(fitness)

含义:
个体的适应度(fitness)指的是个体在种群生存的优势程度度量,用于区分个体的“好与坏”。适应度使用适应度函数(fitness function)来进行计算。适应度函数也叫评价函数,主要是通过个体特征从而判断个体的适应度。

评价一个个体的适应度的一般过程:

  1. 对个体编码串进行解码处理后,可得到个体的表现型。
  2. 由个体的表现型可计算出对应个体的目标函数值。
  3. 根据最优化问题的类型,由目标函数值按一定的转换规则求出个体的适应度。

设计要求:
单值、连续、非负、最大化、合理、一致性、计算量尽可能小、通用新尽可能强等。

注:下面例子都是针对单目标优化问题,并且三种设计都是 F i t ( x ) Fit(x) Fit(x)越大证明个体越好

举例1:

  • 对于 m a x f ( x ) maxf(x) maxf(x),取 F i t ( x ) = f ( x ) Fit(x)=f(x) Fit(x)=f(x)
  • 对于 m i n f ( x ) minf(x) minf(x),取 F i t ( x ) = − f ( x ) Fit(x)=-f(x) Fit(x)=f(x)

举例2:

  • 对于 m a x f ( x ) maxf(x) maxf(x)
    F i t ( x ) = f ( x ) − f m i n Fit(x)=f(x)-f_{min} Fit(x)=f(x)fmin,其中, f m i n f_{min} fmin f ( x ) f(x) f(x)的下界(最小值)
  • 对于 m i n f ( x ) minf(x) minf(x)
    F i t ( x ) = f m a x − f ( x ) Fit(x)=f_{max}-f(x) Fit(x)=fmaxf(x),其中, f m a x f_{max} fmax f ( x ) f(x) f(x)的上界(最大值)

进一步地,如果提高效率,当 F i t ( x ) < 0 Fit(x)<0 Fit(x)<0时,令 F i t ( x ) = 0 Fit(x)=0 Fit(x)=0

举例3:

  • 对于 m a x f ( x ) maxf(x) maxf(x)
    F i t ( x ) = 1 1 + c + f ( x ) Fit(x)=\frac{1}{1+c+f(x)} Fit(x)=1+c+f(x)1,其中, c ≥ 0 c≥0 c0 c + f ( x ) ≥ 0 c+f(x)≥0 c+f(x)0
  • 对于 m i n f ( x ) minf(x) minf(x)
    F i t ( x ) = 1 1 + c − f ( x ) Fit(x)=\frac{1}{1+c-f(x)} Fit(x)=1+cf(x)1,其中, c ≥ 0 c≥0 c0 c − f ( x ) ≥ 0 c-f(x)≥0 cf(x)0

这个方法与举例2有点类似,但是可以通过 c c c F i t ( x ) Fit(x) Fit(x)的范围进行控制。

适应度函数的尺度变换:
为了防止适应度计算的过程中适应度的值分布不合理或者难以体现个体的特性,可以进行适应度的尺度变换调整,变换的方法包括线性变换、幂函数变换、指数变换(类似于模拟退火)、Goldberg线性拉伸变换。
具体的变换过程推荐看这个文档。

重要性:
适应度函数的设计需要得当,不然很容易使得遗传算法出现欺骗现象(早熟现象,陷入局部),具体表现在:

  • 进化初期,个别超常适应度的个体直接控制了选择的过程;
  • 进化后期,个体差异太小,多样性受到破坏,陷入局部峰值。

选择(Select)

选择操作就是用来确定如何从父代群体中按某种方法选取哪些个体作为父母,然后进行交配(重组/交叉)操作,生成新的个体的过程。

在自然界中,一个种群中并不是所有个体都能“有幸地”成为父母然后顺利“传宗接代”的,足够强大的个体会有更高的概率生成下一代。因此,选择其实也是存在概率的,选择概率由该个体的适应度来决定。

个体选择概率的两种分配方法:

  • 按比例的适应度选择(proportional fitness assignment):完全由适应度大小来决定选择概率:

某个个体 i i i,其适应度为 f i f_i fi,则其被选中的概率 P i P_i Pi为:
P i = f i ∑ i = 1 n f i P_i=\frac{f_i}{\sum_{i=1}^n f_i} Pi=i=1nfifi

  • 按排序的适应度选择(Rank-based fitness assignment):选择过程考虑了个体在种群中的排序位置,意思是如果按上面的三种例子所示的计算方法得到的适应度虽然值很低,但是你在种群中排前五,证明这个个体还是很好的。

线性排序(by Baker):
P i = 1 μ [ η m a x − ( η m a x − η m i n ) ⋅ i − 1 μ − 1 ] , 1 ≤ η m a x ≤ 2 , η m i n = 2 − η m a x P_i=\frac{1}{\mu}[\eta_{max}-(\eta_{max}-\eta_{min})\cdot \frac{i-1}{\mu-1}], 1\leq\eta_{max}\leq2, \eta_{min}=2-\eta_{max} Pi=μ1[ηmax(ηmaxηmin)μ1i1],1ηmax2,ηmin=2ηmax
其中, η \eta η为种群大小, i i i为个体序号, η m a x \eta_{max} ηmax代表选择压力
非线性排序(by Michalewicz):
P i = c ( 1 − c ) i − 1 P_i=c(1-c)^{i-1} Pi=c(1c)i1
其中, i i i为个体序号, c c c为排序第一的个体的选择概率

几个概念:

  • 选择压力(selection pressure):最佳个体选中的概率与平均个体选中概率的比值
  • 偏差(bias):个体正规化适应度与其期望再生概率的绝对差值
  • 个体扩展(spread):单个个体子代个数的范围
  • 多样化损失(loss of diversity):选择阶段未选择的个体数目比例
  • 选择强度(selection intensity):将正规高斯分布应用于选择方法,期望平均适应度
  • 选择方差(selection variance):将正规高斯分布应用于选择方法,期望种群适应度的方差

常用的选择方法:

  1. 轮盘赌选择法(roulette wheel selection)
    出发点是适应度值越好的个体被选择的概率越大。
    如,在求解最大化问题时,可以直接用适应度/总适应度来计算个体的选择概率,然后直接通过概率对个体进行选择。如果是求解最小化问题,那么就要对适应度函数进行转换,转化为最大化问题。
    如下图所示,可以在选择时生成一个[0,1]区间内的随机数,若该随机数小于或等于个体的累积概率(累计概率就是个体列表该个体前面的所有个体概率之和)且大于个体1的累积概率,选择个体进入子代种群。
    遗传算法(三)——适应度与选择_第1张图片
  2. 随机遍历抽样法(stochastic universal sampling)
    像轮盘赌一样计算选择概率,只是在随机遍历选择法中等距离的选择体,设npoint为需要选择的个体数目,等距离的选择个体,选择指针的距离是1/npoint,第一个指针的位置由[0,1/npoint]的均匀随机数决定。
    遗传算法(三)——适应度与选择_第2张图片
  3. 锦标赛选择法(tournament selection)
    锦标赛方法选择策略每次从种群中取出一定数量个体(成为竞赛规模),然后选择其中最好的一个进入子代种群。重复该操作,直到新的种群规模达到原来的种群规模。

另外提一提

一般来说,锦标赛选择策略会比轮盘赌选择策略有更好的通用性,而且性能更优。

当然还有一些其他的选择策略,比如随机竞争选择(Stochastic Tournament)、无妨会随机选择/期望值选择(Excepted Value Selection)、确定式选择、局部选择法(Local Selection)、截断选择法(Truncation Selection)等等。

基本遗传算法达到收敛的代数(number of generations)和选择强度(selection intensity)成反比,选择强度越高,那就收敛越慢,一般来说较高的选择强度是很好的选择方法,但是太高又会导致收敛过快(早熟,陷入局部最优)。

你可能感兴趣的:(遗传算法)