下面概述了遗传算法的工作原理:
该算法首先创建一个随机的初始群体。
然后,该算法创建新群的序列。在每一步中,算法使用的个人,在目前这一代创造下一代种群。要创建新的人口,该算法执行以下步骤:
分数通过计算其适应度值的当前群体的每个成员。这些值被称为原始分数健身。
秤的原始分数的健身将它们转换成数值更可用范围。这些比例值被称为期望值。
根据成员的期望选择成员(称为父成员)。
一些在目前的人口有较低的健身个人的被选择为精英. 这些精英被传给下一代。
从父母那里生孩子。孩子是通过对单亲进行随机更改而产生的-突变-or通过组合对的矢量条目parents-交叉。
替换当前人口与孩子形成下一代。
当满足其中一个停止条件时,算法停止。见停止条件算法。
该算法开始于创建一个随机的初始群体,如图中下图。
在此例子中,初始群体含有20
个人。请注意,在所有初始群体在于图片,即的右上象限中的个体,它们的坐标0和1之间位于对于此示例,该初始范围在里面人口选项是[0;1]
。
如果你知道约在极小点的作用在于,你应该设置初始范围,使该点的谎言范围的中间附近。例如,如果你相信的最小点Rastrigin的功能点附近[0 0]
,你可以设置初始范围成为[-1; 1]
. 然而,正如这个例子所显示的,即使在一个不太理想的选择下,遗传算法也能找到最小值初始范围。
在每一步中,遗传算法使用当前的人口创造了构成下一代的孩子们。该算法选择在当前人口一组个人,叫做父母,谁贡献自己的基因它们的载体,其子女-The条目。该算法通常选择具有更好的拟合值作为父母的人。您可以指定函数,该算法用来选择在父母选择函数领域选择选项。
遗传算法为下一代创造了三种类型的孩子:
原种在目前这一代的人最好的适应值。这些人会自动存活到下一代。
交叉通过组合一对父母的的矢量创建。
突变儿童是通过向单亲引入随机变化或突变而产生的。
下面的示意图说明了这三种类型的孩子。
变异和交叉说明如何指定每种类型的算法生成,并使用它来进行交叉和变异功能的儿童人数。
以下各节将解释该算法如何创建交叉子代和变异子代。
该算法通过组合当前种群中的双亲对来创建交叉子代。在子向量的每个坐标处,默认交叉函数随机选择一个条目,或者基因,同时从两个父母,并为其分配给孩子的一个坐标。线性约束问题,默认的交叉功能创建作为孩子家长的随机加权平均值。
该算法通过随机改变个体的父母的基因突变造成儿童。默认情况下,无约束问题的算法增加了从高斯分布于母公司随机向量。对于有界或线性约束问题,孩子仍然是可行的。
下图显示了初始的人口,也就是在第二代人口,并指出它们是否是精英,交叉或变异的孩子的孩子。
下图显示了迭代60、80、95和100时的总体。
|
|
|
|
随着世代数的增加,种群中的个体越来越接近最小值[0 0]
。
遗传算法使用以下条件来确定何时停止:
代-当生成数达到代。
时限- 以秒运行的时间量之后,算法停止等于时限。
健身极限- 当所述适应度函数的在当前人口的最佳点的值是该算法停止小于或等于健身极限。
失速代-当适应度函数值的平均相对变化超过失速代小于功能公差。
失速时间限制- 如果在目标函数中无改善该算法停止在秒的时间间隔期间等于失速时间限制。
失速测试-失速状态是平均变化
要么几何加权
. 为了几何加权
,加权函数是1/2ñ,其中ñ是当前之前的代数。两个失速条件都适用于适应度函数的相对变化失速代。
功能公差- 该算法运行,直到适应度函数值在平均相对变化失速代小于功能公差。
约束公差- 该约束公差不用作停止标准。它用于确定非线性约束的可行性。也,MAX(开方(EPS),ConstraintTolerance)
确定相对于线性约束可行性。
只要满足其中任何一个条件,算法就会停止。您可以在停止标准优化应用程序中的窗格。默认值显示在窗格中。
当您运行遗传算法,该运行求解器和查看结果面板显示导致该算法停止准则。
选项失速时间限制和时限防止算法太长时间运行。如果算法停止这些情况之一造成的,你可能会通过增加值改善您的结果失速时间限制和时限。
选择功能父母选择基于从健身缩放功能,其换算值下一代。缩放后的适应值被称为期望值。一个人可以选择多个一次作为家长,在这种情况下,它有利于它的基因不止一个孩子。默认选择的选项,随机均匀
,勾画出一个线,其中每个父对应于长度成比例的线到其换算值的截面。该算法沿大小相等的步骤的线移动。在每一步,算法分配从它的土地上的部分家长。
更确定的选择是余数
,它执行两个步骤:
在第一步骤中,所述功能选择父母确定性根据为每个单独的经缩放的值的整数部分。例如,如果一个人的换算值是2.3,则函数选择,作为父代个体两次。
在第二步中,选择函数使用缩放值的小数部分来选择额外的父对象,如在随机均匀选择中。该函数将一条直线分段排列,其长度与个体缩放值的小数部分成比例,并沿直线以相等的步骤移动以选择父对象。
注意,如果缩放值的小数部分都等于0,则可以使用顶部
缩放,选择是完全确定的。
有关详细信息和更多选择选项,请参见选择选项。
复制选项控制遗传算法如何创建下一代。可供选择的是
精英伯爵- 个人与当前一代,保证生存到下一代的最佳拟合值的数量。这些人被称为精英儿童。默认值精英伯爵是总人口的5%,四舍五入。
什么时候?精英伯爵至少为1,最好的适应值只能减少从一代到下一个。这是你想要的事情发生,因为遗传算法最小化适应度函数。设置精英伯爵到高值会导致优胜劣汰个人支配的人口,它可以使搜索效果较差。
交叉部分- 个人在下一代的分数,不是权贵子弟,由交叉创建的其他。设置交叉分数介绍了如何的价值交叉部分影响遗传算法的性能。
因为精英个人已经进行了评估,ga公司
再现期间不重新评估精英个体的适应度函数。这种行为假定个体的适应度函数不是随机的,而是确定性的功能。要改变这种行为,使用的输出功能。看到蒸发岩
在里面状态结构。
遗传算法使用的个人,在目前这一代创建弥补下一代的孩子们。除了精英孩子,这对应于目前这一代最好的适应值的个体,该算法创建
交叉儿童在当前一代选择矢量条目,或基因,从对个人的并将它们组合起来形成一个孩子
通过对当前代中的单个个体应用随机更改来对子代进行突变以创建子代
这两个过程对遗传算法都是必不可少的。交叉使算法能够从不同的个体中提取最好的基因,并将它们重组为潜在的优秀儿童。变异增加了种群的多样性,从而增加了算法生成具有更好适应值的个体的可能性。
看到创建下一代对于遗传算法是如何应用变异和交叉的例子。
您可以指定算法创建的每种子类型的数量,如下所示:
精英伯爵在繁殖选项,指定精英子级的数目。
交叉部分在繁殖选项,指定的人口比例,比权贵子弟等,是交叉的孩子。
例如,如果人口规模是20
中,精英伯爵是2
,以及交叉部分是0.8
,每种类型下一代儿童的数目如下:
有两个权贵子弟。
除了精英儿童外,还有18个个体,因此该算法将0.8*18=14.4到14进行取舍,得到交叉儿童的数量。
剩下的四个人,不是权贵子弟等,是突变的孩子。