遗传算法中的混合方案
此示例显示了如何使用遗传算法和另一种优化方法来优化函数的方法。GA
可以快速到达当地最低限度的社区,但是它可能需要许多功能评估才能达到收敛。为了加快解决方案过程,首先运行GA
对于少数几代人接近最佳点。然后使用解决方案GA
作为另一个优化求解器的初始点,可以执行更快,更有效的本地搜索。
Rosenbrock的功能
此示例使用Rosenbrock的功能(也称为Dejong的第二个函数)作为健身函数:
。
Rosenbrock的功能在优化方面是臭名昭著的,因为在尝试最小化此函数时,大多数方法都显示出大多数方法。Rosenbrock的函数在点x* =(1,1)的唯一最小值,其中它具有函数值 。
Rosenbrock功能的代码在dejong2fcn
文件。
类型dejong2fcn.m
函数得分= deJong2fcn(pop)%dejong2fcn计算DEJONGS第二函数。%此函数也称为Rosenbrock的功能%版权2003-2004 The MathWorks,Inc。scores = zeros(size(pop,1),1);对于i = 1:size(pop,1)p = pop(i,:);得分(i)= 100 *(p(1)^2 -p(2))^2 +(1 -p(1))^2;结尾
将Rosenbrock的函数绘制在范围内–2 <= x(1)<= 2;–2 <= x(2)<= 2。
plotObjective(@dejong2fcn,[-2 2; -2 2]);
遗传算法溶液
首先,使用GA
单独找到Rosenbrock功能的最小值。
fitnessfcn = @dejong2fcn;numberOfvariables = 2;
包含绘图功能以监视优化过程。
选项= Optimoptions(@GA,'plotfcn',{@gaplotbestf,@gaplotstopping});
设置随机数流以进行可重复性,并运行GA
使用选项。
RNG默认[x,fval] = ga(fitnessfcn,numberofvariables,[],[],[],[],[],[],[],[],[options)
优化终止:健身价值的平均变化小于选项。功能耐力。
x =1×20.3454 0.1444
FVAL = 0.4913
使用默认停止条件,GA
不提供非常准确的解决方案。您可以更改停止条件以尝试找到更准确的解决方案,但是GA
需要许多功能评估来接近全局最佳x* =(1,1)。
相反,执行更有效的本地搜索,该搜索从哪里开始GA
通过使用混合功能选项停止GA
。
添加混合功能
混合功能从GA
停止。混合功能选择是fminsearch
,,,,模式搜索
, 或者fminunc
。因为此优化示例是平稳且不受约束的,请使用fminunc
作为混合功能。提供fminunc
在指定混合功能时,将图选项作为附加参数。
fminuncoptions = optimoptions(@fminunc,,'plotfcn',{“ optimplotfval',,,,“ optimplotx”});选项= optimoptions(选项,'hybridfcn',{@fminunc,fminuncoptions});
跑GA
再次与fminunc
作为混合功能。
[x,fval,exitflag,output] = ga(fitnessfcn,numberOfvariables,[],[],[],[],[],[],[],[],[],options),options)
优化终止:健身价值的平均变化小于选项。功能耐力。
找到局部最低限度。完成优化是因为梯度的大小小于最佳公差的值。
x =1×21.0000 1.0000
FVAL = 1.7215E-11
出口= 1
输出=带有字段的结构:问题类型:“无约束” rngstate:[1x1 struct]世代:51 funccount:2534消息:'优化终止:健身价值的平均变化小于选项。FunctionTolerance。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
这GA
情节显示了每一代人口的最佳和平均值。情节标题标识了最佳价值GA
当它停止时。混合功能fminunc
从发现的最佳点开始GA
。这fminunc
图显示了解决方案X
和FVAL
,这是由于使用而产生的GA
和fminunc
一起。在这种情况下,使用混合功能可以提高溶液的准确性和效率。这输出。杂化
字段显示fminunc
用出口标志1停止,表明X
是真正的当地最低限度。