此示例显示如何使用混合方案来使用遗传算法和另一种优化方法优化函数。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
输出=结构与字段:问题类型:'unconstrained' rngstate: [1x1 struct] generations: 51 funccount: 2534 message: 'Optimization terminated: average change in the fitness value less than options.FunctionTolerance....' maxconstraint: [] hybridflag: 1
这GA.
图中显示了每一代人口的最佳值和平均值。情节标题确定了最佳价值GA.
当它停止。混合函数Fminunc.
从发现的最佳点开始GA.
.这Fminunc.
绘图显示解决方案X
和fval.
,由使用GA.
和Fminunc.
在一起。在这种情况下,使用混合函数可以提高求解的准确性和效率。这output.hybridflag.
字段显示Fminunc.
停止退出标志1,表明这一点X
是一个真正的局部极小值。