主要内容

遗传算法中的混合方案

本例展示了如何使用遗传算法和另一种优化方法来使用混合方案优化函数。遗传算法可以快速地到达局部最小值的邻域,但它可能需要许多函数求值来实现收敛。为了加快解决过程,首先运行遗传算法让少数几代人接近一个最优点。然后用遗传算法作为初始点的另一个优化求解器执行更快,更有效的局部搜索。

。海涅的功能

这个例子使用Rosenbrock的函数(也称为Dejong的第二函数)作为适应度函数:

f x ) 1 0 0 x 2 ) - x 1 ) 2 ) 2 + 1 - x 1 ) ) 2

Rosenbrock函数在优化中是臭名昭著的,因为大多数方法在试图最小化该函数时表现出缓慢的收敛。Rosenbrock函数在点x* =(1,1)处有一个唯一的最小值,在那里它有一个函数值 f x ) 0

罗森布洛克函数的代码在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]);

图中包含一个轴对象。坐标轴对象包含曲面、轮廓等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功能

杂化函数的起点是遗传算法停止。混合函数的选择包括fminsearchpatternsearch,或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.hybridflagField显示fminunc以退出标志1停止,表示x是真正的局部极小值。

相关的话题