遗传算法中的混合方案
本例展示了如何使用遗传算法和另一种优化方法来使用混合方案优化函数。遗传算法
可以快速地到达局部最小值的邻域,但它可能需要许多函数求值来实现收敛。为了加快解决过程,首先运行遗传算法
让少数几代人接近一个最优点。然后用遗传算法
作为初始点的另一个优化求解器执行更快,更有效的局部搜索。
。海涅的功能
这个例子使用Rosenbrock的函数(也称为Dejong的第二函数)作为适应度函数:
.
Rosenbrock函数在优化中是臭名昭著的,因为大多数方法在试图最小化该函数时表现出缓慢的收敛。Rosenbrock函数在点x* =(1,1)处有一个唯一的最小值,在那里它有一个函数值 .
罗森布洛克函数的代码在dejong2fcn
文件。
类型dejong2fcn.m
dejong2fcn(pop) % dejong2fcn计算dejong2fcn的第二个函数。该函数也被称为Rosenbrock函数版权所有2003-2004 The MathWorks, Inc.得分=零(size(pop,1),1);如果I = 1:size(pop,1) p = pop(I,:);分数(i) = 100 * (p (1) ^ 2 - p (2)) ^ 2 + (1 - p (1)) ^ 2;结束
绘制-2 <= x(1) <= 2范围内的Rosenbrock函数;-2 <= x(2) <=2。
ploobjective (@dejong2fcn,[-2 2;-2 2]);
遗传算法求解
首先,使用遗传算法
来求Rosenbrock函数的最小值。
健身fcn = @dejong2fcn;numberOfVariables = 2;
包括绘图函数来监控优化过程。
选项= optimoptions(@ga,“PlotFcn”, {@gaplotbestf, @gaplotstopping});
为可再现性设置随机数流,并运行遗传算法
使用选项。
rng默认的[x, fval] = ga (FitnessFcn numberOfVariables ,[],[],[],[],[],[],[], 选项)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
x =1×20.3454 - 0.1444
Fval = 0.4913
使用默认的停止条件,遗传算法
并不能提供一个非常精确的解决方案。你可以改变停止标准来尝试找到一个更准确的解决方案,但是遗传算法
需要多次函数求值才能接近全局最优x* =(1,1)。
相反,执行从何处开始的更有效的本地搜索遗传算法
中使用混合函数选项停止遗传算法
.
添加Hybrid功能
杂化函数的起点是遗传算法
停止。混合函数的选择包括fminsearch
,patternsearch
,或fminunc
.由于此优化示例平滑且不受约束,因此使用fminunc
就是杂化函数。提供fminunc
在指定混合函数时,使用plot选项作为附加参数。
fminuncOptions = optimoptions(@fminunc,“PlotFcn”, {“optimplotfval”,“optimplotx”});选项= optimoptions(选项,“HybridFcn”, {@fminunc, fminuncOptions});
运行遗传算法
再次与fminunc
就是杂化函数。
[x, fval exitflag,输出]= ga (FitnessFcn numberOfVariables ,[],[],[],[],[],[],[], 选项)
优化终止:适应度值的平均变化小于options.FunctionTolerance。
找到局部极小值。优化完成,因为梯度的大小小于最优性公差的值。
x =1×21.0000 - 1.0000
Fval = 1.7215e-11
Exitflag = 1
输出=带字段的结构:问题类型:'unconstrained' rngstate: [1x1 struct] generations: 51 funccount: 2534 message: '优化终止:健康值的平均变化小于options.FunctionTolerance....' maxconstraint: [] hybridflag: 1
的遗传算法
图中显示了每一代人口的最佳值和平均值。图标题标识了通过遗传算法
当它停止时。杂化函数fminunc
从发现最好的点开始遗传算法
.的fminunc
图显示了解决方案x
而且fval
,这是使用的结果遗传算法
而且fminunc
在一起。在这种情况下,使用混合函数可以提高解决方案的准确性和效率。的output.hybridflag
Field显示fminunc
以退出标志1停止,表示x
是真正的局部极小值。