zoukankan      html  css  js  c++  java
  • Evolutionary Computing: 2. Genetic Algorithm(1)

    本篇博文讲述基因算法(Genetic Algorithm),基因算法是最著名的进化算法。

    内容依然来自博主的听课记录和教授的PPT。


     Outline

    1. 简单基因算法
    2. 个体表达
    3. 变异
    4. 重组
    5. 选择重组还是变异?

     1. 简单基因算法(Simple Genetic Algorithm)

    Holland's早期的基因算法被认为是“简单的基因算法”或是“权威的基因算法”。(simple genetic algorithm or canonical genetic algorithm)

    1.1 直接举例说明

      问题描述:利用遗传算法求解区间[0,31]上的二次函数y=x2的最大值

    乍一看,是个很白痴的问题,那我们就用GA算法来套一下,看一下流程。

       [0, 31] 中的点x就是个体(individual), 函数值f(x)恰好就可以作为x的适应度(fitness),区间[0, 31]就是一个种群(population) 。

    种群规模设定为4,用5位二进制数编码染色体。

    假定4个个体:

    S1: 13 = 01101(二进制) 

    S2: 24 = 11000

    S3: 8 = 01000

    S4: 19 = 10011

      

    第一列是编号,第二列是初始值的二进制值(initial population),第三列就是给定的初始值,第四列f(x) = x^2是适应度(fitness),当然适应度越高越符合预期。第五列是种群中各个体被选择的概率(prob)(根据第四列能算出来的)。第七列是个体在配对池(mating pool)中的个数。

    被选择作为父辈的概率计算公式为:

     

     这个选择叫做适应-比例选择(fitness proportional selection)。下章有具体讲述。

    下面开始重组配对(crossover):

      

    上图表格是配对重组的过程。第一列依然是编号,第二列是配对池,第三列表示重组开始的点,第四列是配对重组后的后代,第五列是新的后代的值,第六列是适应度。

    下面是变异(mutation):

      

    前两列内容和之前的一样,第三列是变异后的二进制值,编号1的个体在第一位发生了变异,编号4的个体在第三位发生了变异。数值发生了改变,适应度也发生了变化。

      :这里博主把教授的ppt给改了一下,因为博主不认为他原来写的数值是正确的。原数值如下:在S1的第四列,原ppt上的数字是26,第五列的数字是676。在S4的第四列,原ppt上的数字是18,第五列上的数字是324。当然下面的总和、平均值、最大值也都全部改了。

      有一个问题,为什么变异了第一个和第四个,而第二个却没有变异呢?计算机是如何判断让哪一个个体进行变异的呢?

    这里讲一个概念叫变异率(mutation rate),这是一个固定的值,在这个问题中我们设变异率0.001,也就是事先告诉计算机的一个数值。在基因的每一位上,也就是二进制码的每一位上,计算机会产生一个随机数,范围在[0,1]之间。接着计算机会将这个随机数与变异率进行比较,如果这个随机数小于这个变异率,那么在这一位上的基因将会发生反转。从这个变异的结果上来看,变异是朝着好的方向进行的。

    至此一轮的进化已经走完了,可以看到新的后代

    S1: x = 28, f(x) = 784

    S2: x = 25, f(x) = 625

    S3: x = 27, f(x) = 729

    S4: x = 20, f(x) = 400

    可以对比一下第一张表格和最后一张表格,平均适应度由开始的293增加到了634.5,最适应的种群有最开始的576增长到了784。当然最终最好的、我们想要的结果是31^2 = 961。

      

    1.2 特点总结

    • 有一个二进制的表示(a binary representation)
    • 适应的、成比例的选择(fitness proportionate selection)
    • 低可能性的变异(a low probability of mutation) 
    • 利用创新式的重组(recombination,crossover)来产生新的候补solution

    此外再补充一个教授ppt上的表格

      

      缺点总结:

    • Representation is too restrictive
    • Mutation & crossovers only applicable for bit-string & integer representations
    • Selection mechanism sensitive for converging populations with close fitness values
    • Generational population model (step 6 in SGA repr. cycle) can be improved with explicit survivor selection

    2. 个体表示(Representation of Individuals)

     

    2.1 二进制表示(Binary Representations)

    二进制表达是最简单的表达方式之一。比如上面的那个问题就是用的二进制表达。

    对于一个给定的问题,我们需要决定: 1.string的长度。2.如何用它来表示一个表型(phenotype)。

      具体来说,我们需要保证,我们的每一个二进制编码都能够表示一个有效的solution,反之亦然,所有可能的solution都可以被表达。

    教授的原文:In choosing the genotype-phenotype mapping for a specific problem, one has to make sure that the encoding allows that all possible bit strings denote a valid solution to the given problem and that, vice versa, all possible solutions can be represented.

    2.2 其他表达方法

    主要先拿二进制表达开刀,其他的表达先略过。

    除了二进制表示,还有一些其他表达方法,列举如下:

    • 整型表示(Integer Representations)
    • Real-Valued Representation
    • Floating-Point Representation
    • Permutation Representations

    有些问题并不总适用于二进制表示。比如在一个正方形网格地图上寻找路径的过程中,我们可能会使用整型{0,1,2,3}来表示方向{东,南,西,北}。这里显然整型会比二进制更加合适。

      

    3. 变异(Mutation)

    变异本来是个生物学的名词,这里就是表明变异算子(variation operators)通过对基因型的一些随机变化,仅仅用一个父辈创造出了一个新的后代。

    原文如下:Mutation is the generic name given to those variation operators that use only one parent and create one child by applying some kind of randomised change to the representation(genotype).

    3.1 二进制表达的变异(Mutation for Binary Representations)

    在最开始的例子中已经演示过二进制表达的变异。

    最常见的二进制变异就是考虑每一位上的基因是否反转(从1到0,从0到1),这个反转有一个极小的概率pm

    3.2 其他表达的变异

    主要先拿二进制表达开刀,其他的表达先略过。

    • 整型表达的变异(Mutation Operators for Integer Representations)
    • 浮点型表达的变异(Mutation Operators for Floating-Point Representations)
    • 排列型表达的变异(Mutation Operators for Permutation Representations)

    4. 重组(Recombination)

    重组被认为是基因算法中最重要的特征之一。

    重组的概念上一章讲过了,这里引一段教科书的描述。

    Recombination, the process whereby a new individual solution is created from the information contained within two (or more) parent solutions, is considered by many to be one of the most important features in genetic algorithms(GA).

    这里重组的概念,有时候会说recombination,有时候会说crossover。crossover更常用来表示two-parent case。

      重组算子(Recombination operators)的使用中会有一个重组率(crossover rate),这个概率的取值范围大约是[0.5,1.0]。通常在重组的过程中,一个位置上发生重组的概率会在[0,1),然后这个概率再和上面的我们实现设定好的重组率进行比较,倘若这个值低于了重组率,那么两个父辈就会通过重组产生两个新的后代。相反,则不发生重组,两个新的后代通过无性生殖(asexually)产生。也就是说,在经过一轮重组之后,有一部分后代(offspring)是直接copy父辈而产生的,另有一部分后代表达了之前没有见过的solutions。

    回顾一下重组率(crossover rate)和变异率(mutation rate)

    变异率(mutation rate)是用来控制染色体的一些部分如何独立地发生变化。所谓独立就只需要一个父辈就可以了。

    重组率(crossover rate)决定了一组父辈发生重组的机会。

    4.1 二进制表达的重组算子(Recombination Operators for Binary Representations)

    4.1.1 单个位置的交叉重组(One-Point Crossover)

    从某一个位置开始进行交叉重组。 

    4.1.2 多个位置的交叉重组(N-Point Crossover)

    从不止一个位置开始进行交叉重组。

    这两个划分看上去有点多余,但人家西方教科书就这么区分开了。

    4.1.3 均衡交叉重组(Uniform Crossover)

    与上面两种方式不同的是,uniform crossover这种重组方式是不依赖于基因的具体位置的。它首先在[0,1]上产生一组均匀分布的随机变量,组成一个string,其长度和父辈基因相同。然后有一个事先设定好的参数p(通常是0.5)。在第一个后代的每一位上,如果这个随机变量小于了这个参数,那么后代就遗传第一个父辈的基因,反之,如果这个随机变量大于了这个参数,那么后代就遗传第二个。第二个后代的基因则和第一个后代的重组方式完全相反。

      以上三种方式的小结和补充

    • n-point crossover has an inherent bias in that it tends to keep together genes that are located close to each other in the representation. This effect is known as positional bias.
    • In contrast, uniform crossover does not exhibit any positional bias, but does have a strong tendency towards transmitting 50% of the genes from each parent and against transmitting an offspring a large number of coadapted genes from one parent. This is known as distributional bias.
    • n-point crossover倾向于将位置接近的基因保持在一起。这种效果被称为位置偏向(positional bias)
    • uniform crossover,相反,没有任何的positional bias。他能够从每个父辈那里传递50%的基因并且防止单从某一个父辈那里获得大量的基因。这种效果被称作分布偏向(distributional bias)

    4.2 其他表达的重组算子

    • Recombination Operators for Integer Representations
    • Recombination Operators for Floating-Point Representations
    • Recombination Operators for Permutation Representations (下章写到)

    5. 选择重组还是变异?(crossover or mutation)

    在具体的问题中,一般会采取不同的方式。通常两种方法都采用。

    只有变异的进化算法(mutation-only-EA)有可能能够解决问题,而只有重组(crossover-only-EA)的进化算法往往不能达到效果。

    引教授PPT上的两句话:

    • Crossover is explorative, it makes a big jump to an area somewhere "in between" two (parent) areas.
    • Mutation is exploitative, it creates random small diversions, thereby staying near (in the area of) the parent.
  • 相关阅读:
    GCC编译器原理(三)------编译原理三:编译过程(3)---编译之汇编以及静态链接【2】
    xmind转为markdown
    XMind破解
    读取字符串中的数字
    "Cannot declare member function ...to have static linkage"错误
    error: cannot bind non-const lvalue reference of type
    (C++ Error: Incompatible types in assignment of ‘char*’ to ‘char [2])
    C++中的map
    17 jQuery阶段_操作样式_操作属性_动画_节点操作
    第一部分:网络多任务_day01_网络编程基础
  • 原文地址:https://www.cnblogs.com/adelaide/p/5659946.html
Copyright © 2011-2022 走看看