遗传算法中的混合方案

这个例子展示了如何使用混合方案使用遗传算法和另一种优化方法来优化一个函数。遗传算法该算法可以快速到达局部极小值的邻域,但需要对多个函数求值才能达到收敛性。要加快解决方案的进程,首先要运行遗传算法使少数几代人接近一个最佳点。然后使用溶液遗传算法作为初始点,另一个优化求解器执行更快、更有效的局部搜索。

。海涅的功能

这个例子使用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

Rosenbrock函数的代码位于dejong2fcn文件。

类型dejong2fcn.m
函数得分= dejong2fcn(pop) % dejong2fcn计算dejong第二个函数。%This function is also known as Rosenbrock's function % Copyright 2003-2004 The MathWorks, Inc. scores = 0 (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。

plotobjective (@dejong2fcn [2 2; 2 2]);

遗传算法的解决方案

首先,使用遗传算法找到罗森布洛克函数的最小值。

FitnessFcn = @dejong2fcn;numberOfVariables = 2;

包括绘图功能,以监控优化过程。

选择= optimoptions (@ga,“PlotFcn”,{@gaplotbestf, @gaplotstopping});

为再现性设置随机数流,并运行遗传算法使用选项。

rng默认的[x, fval] = ga (FitnessFcn numberOfVariables,[],[],[],[],[],[],[],选项)
终止优化:适应度值的平均变化小于选择。功能公差。

x =1×20.3454 - 0.1444
fval = 0.4913

使用默认的停止条件,遗传算法不能提供非常精确的解决方案。您可以更改停止条件以尝试找到更精确的解决方案,但是遗传算法需要许多函数计算来接近全局最优x* =(1,1)。

相反,执行从何处开始的更有效的本地搜索遗传算法停止使用混合功能选项在遗传算法

添加混合函数

混合函数从点开始遗传算法停止。混合函数的选择如下fminsearch,patternsearch,或fminunc。由于此优化示例是平滑且无约束的,请使用fminunc作为混合函数。提供fminunc在指定混合函数时,使用绘图选项作为附加参数。

fminuncOptions = optimoptions (@fminunc,“PlotFcn”,{“optimplotfval”,“optimplotx”});选择= optimoptions(选项,“HybridFcn”,{@fminunc, fminuncOptions});

运行遗传算法再次与fminunc作为混合函数。

[x, fval] = ga (FitnessFcn numberOfVariables,[],[],[],[],[],[],[],选项)
终止优化:适应度值的平均变化小于选择。功能公差。

局部最小值。优化完成是因为梯度的大小小于最优容差的值。

x =1×21.0000 - 1.0000
fval = 1.7215 e-11

第一个图显示了每一代人口的最优值和均值。情节标题确定了所发现的最佳价值遗传算法当它停止。混合函数fminunc从找到的最佳点开始遗传算法。第二个图显示了解决方案xfval,这是使用的结果遗传算法fminunc在一起。在这种情况下,使用混合函数可以提高求解的准确性和效率。

相关的话题