此示例显示如何使用混合方案来使用遗传算法和另一种优化方法优化函数。GA.
可以快速到达局部最少的邻居,但它可能需要许多功能评估来实现融合。为了加快解决方案过程,首先运行GA.
对于少数世代接近最佳点。然后使用解决方案GA.
作为另一优化求解器的初始点,以执行更快,更高效的本地搜索。
此示例使用RosenBrock的功能(也称为dejong的第二个功能)作为健身功能:
。
Rosenbrock的功能在优化中是臭名昭着的,因为大多数方法在尝试最小化这个功能时展示了慢的融合。RosenBrock的函数在点X * =(1,1)处具有唯一的最小值,其中它具有函数值 。
Rosenbrock函数的代码在于dejong2fcn.
文件。
类型dejong2fcn.m.
功能分数= dejong2fcn(pop)%dejong2fcn计算Dejongs第二功能。%此功能也被称为RosenBrock的功能版权所有2003-2004 MathWorks,Inc。Scors = Zeros(大小(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,[],[],[],[],[],[],[],选项)
优化终止:FITHS值的平均变化小于选项。功能化。
X =1×20.3454 0.1444
fval = 0.4913.
使用默认停止条件,GA.
不提供非常准确的解决方案。您可以更改停止标准以尝试找到更准确的解决方案,但GA.
需要许多函数评估来接近全局最佳X * =(1,1)。
相反,执行更高效的本地搜索,该搜索开始在哪里GA.
使用混合函数选项停止GA.
。
混合函数从点开始GA.
停止。混合函数选择是fminsearch.
那Patternsearch.
, 或者Fminunc.
。因为这种优化示例是平滑且无限制的,所以使用Fminunc.
作为混合函数。提供Fminunc.
在指定混合函数时,将绘图选项作为附加参数。
fminuncoptions = Optimoptions(@Fminunc,'plotfcn',{'OptimplotFval'那'Optimplotx'});选项= Optimoptions(选项,'hybridfcn',{@ fminunc,fminuncoptions};
跑步GA.
再次Fminunc.
作为混合函数。
[x,fval,出口,输出] = ga(fitnessfcn,numberofvariables,[],[],[],[],[],[],[],选项)
优化终止:FITHS值的平均变化小于选项。功能化。
发现本地最低限度。优化完成,因为梯度的大小小于最优耐受性的值。
X =1×21.0000 1.0000
fval = 1.7215e-11
EXITFLAG = 1
输出=结构与字段:问题型:'不受约束'rngstate:[1x1 struct]代:51 funccount:2534消息:'优化终止:健身值的平均变化小于选项.Functiontolectance ....'maxconstraint:[] hybridflag:1
这GA.
情节显示了每一代人口的最佳和平均值。绘图标题标识所找到的最佳值GA.
当它停止。混合函数Fminunc.
从发现的最佳点开始GA.
。这Fminunc.
绘图显示解决方案X
和fval.
,由使用GA.
和Fminunc.
一起。在这种情况下,使用混合函数提高了解决方案的准确性和效率。这output.hybridflag.
字段显示Fminunc.
停止退出标志1,表明这一点X
是一个真正的地方最低限度。