主要内容

变化和交叉变化

设置突变的数量

遗传算法使用突变使用MutationFcn选择。默认的突变选项,@mutationgaussian,增加随机数,或突变从高斯分发中选择,每个条目父向量。通常,突变的量与分布的标准偏差成比例,在每次新一代降低。您可以控制算法应用于每代一代中的父级的平均突变量规模收缩单元格数组中包含的输入:

选项= Optimoptions('GA'...'mutationfcn',{@ mutationgaussian scale};

规模收缩是默认值的标量1每个。

  • 规模控制第一代突变的标准偏差。这个值是规模乘以初始群体的范围,您可以指定InitialPopulationRange选择。

  • 收缩控制平均变异量减少的速度。标准差线性减小,最终值为1 -收缩乘以第一代的初始值。例如,如果收缩有默认值1然后,在最后一步,突变量减少至0。

通过选择plot函数,可以看到突变的效果@gaplotdistance.@gaplotrange,然后在一个问题上运行遗传算法,如在尽量减少Rastrigin的功能.下图显示了设置随机数发生器后的曲线。

rng.默认的再现性的百分比选项= Optimoptions('GA''plotfcn'{@gaplotdistance, @gaplotrange},...'maxstallgenerations', 200);%要长期跑步[x,fval] = ga(@ restriginsfcn,2,[],[],[],[],[],[],[],选项);

上曲线显示每代点之间的平均距离。随着突变的量减少,个体之间的平均距离所以在最终一代中约为0。下曲线显示在每一代的垂直线,显示从最小到最大适应值的范围,以及平均适应值。随着突变量减少,范围也是如此。这些绘图表明,减少突变量降低了随后世代的多样性。

为便于比较,下图显示了您设置时相同的图收缩0.5

选项= Optimoptions('GA'选项,...'mutationfcn',{@ mutationgaussian,1,.5});[x,fval] = ga(@ restriginsfcn,2,[],[],[],[],[],[],[],选项);

这一次,变异的平均数量在最后一代中减少了1/2。因此,个体之间的平均距离比以前减少得更少。

设置交叉分数

CrossoverFraction选项指定除精英儿童外,由跨界儿童组成的每个人口的比例。的交叉分数1意味着除精英个体外的所有孩子都是跨界儿童,而跨界比例为0意味着所有孩子都是突变儿童。以下示例显示,这些极端之外都不是优化功能的有效策略。

该示例使用适应度函数,该函数在某一点的值是各点坐标绝对值的和。也就是说,

f x 1 x 2 ... x n | x 1 | + | x 2 | + + | x n |

通过将适应度函数设置为,可以将此函数定义为匿名函数

@(x)sum(abs(x))

运行默认值为的示例0.8随着CrossoverFraction选择。

fun = @(x)sum(abs(x));nvar = 10;选项= Optimoptions('GA'...'initialpopulationrange',[ -  1; 1],...'plotfcn', {@gaplotbestf, @gaplotdistance});rng(14日“旋风”再现性的百分比[x, fval] = ga(有趣,据nvar ,[],[],[],[],[],[],[], 选项)

优化终止:FITHS值的平均变化小于选项。功能化。X = -0.0020 -0.0134 -0.0067 -0.0028 -0.0241-0.0118 0.0021 0.0113 -0.0021 -0.0036 FVAL = 0.0799

交叉,变异

看看遗传算法如何在没有突变时执行,设置CrossoverFraction选择1.0并重新运行求解器。

选项。CrossoverFraction = 1;[x, fval] = ga(有趣,据nvar ,[],[],[],[],[],[],[], 选项)

X = -0.0275 -0.0043 0.0372 -0.0118 -0.0377 -0.0444 -0.0258 -0.0520
优化终止:平均改变健身价值较少的options.FunctionTolerance。X = 0.4014 0.0538 0.7824 0.1930 0.0513 -0.4801 0.9988 -0.0059 0.0875 0.0302 FVAL = 3.0843

在这种情况下,算法从初始种群中的个体中选择基因,并将它们重组。算法不能创造任何新的基因,因为没有突变。该算法在第8代生成它可以使用这些基因的最佳个体,在第8代,最佳适应度图成为水平。在此之后,它创造出最佳个体的新副本,然后将其选择为下一代。到第17代,种群中的所有个体都是相同的,即最佳个体。当这种情况发生时,个体之间的平均距离是0。由于算法在第8代之后不能提高最优适应度值,所以在50代之后停止,因为摊位代被设定为50

没有交叉的突变

要查看遗传算法在没有交叉时的执行情况,请设置CrossoverFraction选择0

选项。CrossoverFraction = 0;[x, fval] = ga(有趣,据nvar ,[],[],[],[],[],[],[], 选项)

在这种情况下,算法适用的随机改变永远不会改善第一代中最好的个人的健身值。虽然它改善了其他个体的个体基因,尽可能通过对健身功能的平均值的降低在上部图中看到,但是这些改进的基因永远不会与最佳个人的基因组合,因为没有交叉。结果,最佳的健身图是水平,并且在第50的第50阶段的算法停顿。

比较不同交叉分数的结果

这个例子决定性的斯特鲁姆将遗传算法应用于拉斯特里金函数的结果与应用于拉斯特里金函数的结果进行比较CrossoverFraction选项设置为0.2.4.6.8, 和1.该示例运行了10代。在每一代中,该示例绘制出前几代的最佳适应度值的均值和标准差CrossoverFraction选择。

要运行示例,请输入

确定性学生

在Matlab.®提示。示例完成后,绘图如下图所示。

下面的图显示了10代以上的最佳适应度值的平均值和标准差,每个值的交叉分数。上面的图用彩色编码显示了每一代的最佳适应度值。

适用于此健身功能,设置交叉部分0.8产生最好的结果。但是,对于另一个健身功能,不同的设置交叉部分可能会产生最佳结果。

相关话题