此示例示出了如何使用混合方案来优化使用遗传算法和另一个优化方法的功能。GA
该算法可以快速到达局部极小值的邻域,但需要对多个函数求值才能达到收敛性。要加快解决方案的进程,首先要运行GA
对于小数目的世代的接近最佳点。然后使用从溶液中GA
作为初始点再优化求解器进行更快速,更高效的本地搜索。
这个例子使用Rosenbrock的函数(也称为Dejong的第二个函数)作为适应度函数:
。
的ROSENBROCK的功能是因为收敛速度慢的努力,以尽量减少此功能时,大多数方法表现出在优化臭名昭著。的ROSENBROCK的函数在该点处具有独特的最小x * =(1,1),在那里它有一个函数值 。
为的Rosenbrock函数的代码是在dejong2fcn
文件。
类型dejong2fcn.m
功能评分= dejong2fcn(POP)%DEJONG2FCN计算DeJongs第二功能。%该功能也被称为的ROSENBROCK的函数%版权所有2003-2004 MathWorks公司分数=零(大小(弹出,1),1);对于i = 1:尺寸(弹出,1)P =弹出(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.FunctionTolerance平均变化。
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,[],[],[],[],[],[],[],选项)
优化终止:在健身值小于options.FunctionTolerance平均变化。
当地最低发现。优化完成,因为倾斜的大小小于最优宽容的价值。
X =1×21.0000 1.0000
FVAL = 1.7215e-11
第一个图表显示了每一代人口的最佳值和平均值。情节标题识别最佳的价值发现GA
当它停止。混合动力功能fminunc
从最好的点开始发现GA
。的第二曲线示出了该解决方案X
和FVAL
,其使用导致GA
和fminunc
一起。在这种情况下,使用混合函数提高解的精度和效率。