主要内容

遗传算法是如何运作的吗

算法的轮廓

以下概述总结了遗传算法的工作原理:

  1. 该算法首先创建了一个随机初始种群。

  2. 该算法然后创建一个新的种群序列。在每个步骤中,该算法使用个体在当前一代创建下一个人口。创建新的人口,算法执行以下步骤:

    1. 分数每个成员目前的人口通过计算它的健身价值。这些值被称为原始健身的分数。

    2. 健康量表原始分数转换成更有用的值。这些比例值称为预期值。

    3. 选择成员,叫家长,根据他们的期望。

    4. 一些个体在当前人口较低的健康选择精英。这些精英个体传递给下一个人。

    5. 生产孩子的父母。孩子们要么通过随机变化产生单亲-突变或者通过结合一对父母——向量条目交叉

    6. 替换当前的人口与孩子们形成了下一代。

  3. 该算法满足停止条件之一时停止。看到该算法停止条件

  4. 线性的算法需要修改步骤和整数约束。看到整数和线性约束

  5. 该算法对非线性约束进一步修改。看到非线性约束求解算法

初始种群

该算法首先创建了一个随机的初始种群,如下列图所示。

在这个例子中,初始种群包含20.个人。注意,初始种群中所有个体躺在画面的右上角象限,即他们的坐标躺在0和1之间。对于这个示例,InitialPopulationRange选择是[0,1]

如果你知道大约一个函数最小点所在,你应该设置InitialPopulationRange所以点靠近中间的范围。举个例子,如果你相信Rastrigin最小点的函数在点附近[0 0],你可以设置InitialPopulationRange(1;1)。然而,正如这个例子所显示的,遗传算法能找到最低甚至低于最优选择InitialPopulationRange

创建下一代

每一步,遗传算法使用当前的人口创造孩子们的下一代。算法选择一群人在当前人口父母,贡献自己基因向量的孩子——条目。算法通常选择个人,有更好的健康值作为父母。您可以指定函数,该算法使用选择的父母SelectionFcn选择。看到选择选项

遗传算法为下一代创造了三种类型的孩子:

  • 精英是个体在当前一代最好的健身价值。这些个体自动生存到下一代。

  • 交叉是由结合向量一对父母。

  • 突变孩子们通过引入随机变化,创建或突变,单亲。

下面的示意图显示了三种类型的孩子。

变异和交叉解释了如何指定的儿童数量的每种类型的算法生成,它使用功能进行交叉和变异。

下面的部分解释算法创建交叉和变异的孩子。

交叉的孩子

算法创建交叉结合对儿童父母在当前的人口。在每个子向量的坐标,默认转换函数随机选择一个条目,或基因在同一坐标的两个父母和分配到孩子。对于线性约束问题,默认转换函数创建子的随机加权平均的父母。

突变的孩子

算法产生突变的孩子通过随机改变个体的基因的父母。默认情况下,无约束问题的算法增加了从一个高斯分布随机向量的父母。为有界或线性约束问题,孩子仍然是可行的。

下图显示了初始种群的孩子,也就是说,在第二代人口,并表明是否他们是精英,交叉或变异的孩子。

情节的后人

下面的图显示了人口在迭代60,80年、95年和100年。

随着一代又一代的数量增加,人口的个人一起靠近,接近最小值点[0 0]

该算法停止条件

遗传算法使用以下选项来决定何时停止。在运行每个选项的默认值选择= optimoptions (ga)

  • MaxGenerations——算法停止当代达到的数量MaxGenerations

  • MaxTime——算法停止运行后的时间秒等于MaxTime

  • FitnessLimit——算法停止当适应度函数的值最好的点在当前人口小于或等于FitnessLimit

  • MaxStallGenerations——算法停止当适应度函数值的平均相对变化MaxStallGenerations小于功能公差

  • MaxStallTime——算法停止如果没有改善的目标函数在一个区间的时间秒数等于MaxStallTime

  • FunctionTolerance——算法运行直到适应度函数值的平均相对变化MaxStallGenerations小于功能公差

  • ConstraintTolerance- - -ConstraintTolerance不是作为停止准则。它是用来确定可行性对非线性约束。同时,max (sqrt (eps), ConstraintTolerance)确定可行性对线性约束。

该算法停止只要其中任何一个条件满足。

选择

选择函数选择父母对下一代基于健身比例缩放值函数。按比例缩小的健身值称为预期值。一个人可以选择不止一次作为一个家长,在这种情况下,它的基因有助于一个以上的孩子。默认选择选项,@selectionstochunif勾勒出一条线,线的每个家长都对应于一个部分的长度成比例缩放值。中沿着直线移动的算法步骤相同的大小。在每个步骤中,该算法分配父母从部分土地。

一个确定性选择选项@selectionremainder,执行两个步骤:

  • 在第一步中,函数选择父母确定性根据缩放值为每个单独的整数部分。例如,如果一个人的比例值为2.3,功能选择,个人作为一个家长的两倍。

  • 在第二步中,选择函数选择额外的父母使用的小数部分缩放值,如随机均匀的选择。函数列出了一个线部分的长度比例的缩放值的小数部分个体,并沿着线等于措施选择父母。

    注意,如果分数部分的比例值等于0,所有可能发生的使用缩放、选择是完全确定的。

和更多的选择选项的详细信息,请参见选择选项

复制选项

复制选项控制遗传算法产生下一代。选项是

  • EliteCount——个人的数量这一代最好的健身价值,保证生存给下一代。这些人被称为精英的孩子

    EliteCount至少是1,最好的健身价值只能减少从一代到另一个。这是你想要发生什么,因为遗传算法适应度函数最小化。设置EliteCount高价值导致适者个人主导人口,从而使搜索更有效。

  • CrossoverFraction——个人的分数在下一代,除了精英孩子,由交叉。设置交叉部分描述了如何的价值CrossoverFraction影响遗传算法的性能。

因为精英个人已经评估,遗传算法不重新繁殖期间精英个体的适应度函数。这种行为假设个体的适应度函数并不是随机的,但是是一个确定性的函数。改变这种行为,使用一个输出函数。看到EvalElites国家结构

变异和交叉

遗传算法使用个体在当前一代创造孩子们的下一代。除了精英孩子,这对应于个体在当前一代最好的健身价值,该算法创建

  • 交叉的孩子通过选择向量条目,或基因,从一对个体在当前一代和他们的结合形成一个孩子

  • 突变的孩子通过随机改变单一的个体在当前一代创造一个孩子

遗传算法流程都是必不可少的。交叉使得该算法提取的最佳来自不同个体的基因,重组成潜在的优越的孩子。突变增加了种群的多样性,从而提高算法的可能性将生成个人更好的健身价值。

看到创建下一代例如遗传算法的变异和交叉。

您可以指定有多少的每种类型的儿童算法创建如下:

  • EliteCount指定数量的精英的孩子。

  • CrossoverFraction指定的人口比例,除了精英的孩子,是孩子交叉。

例如,如果PopulationSize20.,EliteCount2,CrossoverFraction0.8每种类型的儿童的数量在下一代如下:

  • 有两个精英的孩子。

  • 孩子有18个人以外的精英,所以该算法轮0.8 * 18 = 14.4 14交叉的孩子的数量。

  • 剩下的四个人,除了精英的孩子,是孩子突变。

整数和线性约束

当一个问题整数或线性约束(包括边界),该算法修改人口的发展。

  • 当问题既有整数和线性约束时,生成的软件修改所有个人对这些约束是可行的。您可以使用任何创建、突变或交叉功能,整个人口仍然可行的关于整数和线性约束。

  • 只有线性约束问题时,软件不能修改个人对这些约束是可行的。您必须使用创建、变异和交叉功能保持可行性对线性约束。否则,人口会变得不可行,结果可能是不可行的。默认的运营商保持线性的可行性:gacreationlinearfeasiblegacreationnonlinearfeasible为创造,mutationadaptfeasible突变,crossoverintermediate交叉。

整数和线性可行性的内部算法类似surrogateopt。当问题整数和线性约束时,算法首先创建线性可行点。然后由舍入算法试图满足整数约束线性可行点整数使用启发式试图保持点线性可行。当这个过程是成功获得足够的可行点构造一个人口,算法调用intlinprog试图找到更多可行的对边界点,线性约束和整数约束。

后来,当突变或交叉人口创造了新的成员,确保新成员都是整数的算法和线性可行采取类似的措施。每一个新的成员被修改,如果有必要,要尽可能接近原来的价值,同时也满足了整数和线性约束和边界。

相关的话题