主要内容

比较代理优化与其他求解器

这个例子比较surrogateopt给另外两个解算者:fmincon,平滑问题的推荐解决方案,和patternsearch,非光滑问题的推荐解决方案。这个例子使用了一个二维区域上的非光滑函数。

类型nonSmoothFcn
函数[f, g] = nonSmoothFcn(x) %非光滑目标函数%elseif x (1) < 3 f (i) = 2 * sin (x(我,1))——(x(我,1)* x(我,2)^ 2)/ 10 + 15;elseif x (1) < 0 f (i) = 0.5 * x(我,1)^ 2 + 20 + abs (x(我,2))+ patho (x(我,:));elseif x (1) > = 0 f (i) = 3 * sqrt (x(我,1))+ 25 + abs (x(我,2))+ patho (x(我,:));计算梯度g = NaN;如果x(i,1) < -7 g = 2*[x(i,1)];x(我,2)];elseif x(我,1)< 3 g = (2 * cos (x(我,1))- (x(我,2)^ 2)/ 10;x - x(1) *(我,2)/ 5];Elseif x(i,1) < 0 [fp,gp] = patho(x(i,:)); if x(i,2) > 0 g = [x(i,1)+gp(1); 1+gp(2)]; elseif x(i,2) < 0 g = [x(i,1)+gp(1); -1+gp(2)]; end elseif x(i,1) >0 [fp,gp] = patho(x(i,:)); if x(i,2) > 0 g = [.15/sqrt(x(i,1))+gp(1); 1+ gp(2)]; elseif x(i,2) < 0 g = [.15/sqrt(x(i,1))+gp(1); -1+ gp(2)]; end end function [f,g] = patho(x) Max = 500; f = zeros(size(x,1),1); g = zeros(size(x)); for k = 1:Max %k arg = sin(pi*k^2*x)/(pi*k^2); f = f + sum(arg,2); g = g + cos(pi*k^2*x); end
mplier = 0.1;%缩放控制变量Objfcn = @ (x) nonSmoothFcn (mplier * x);%目标函数的句柄Range = [-6 6;-6 6]/mplier;%用于绘制目标函数的范围rng默认的重置全局随机数生成器showNonSmoothFcn (Objfcn、范围);标题(“非光滑目标函数”)视图(-151年,44岁)

图中包含一个轴对象。标题为非光滑目标函数的轴对象包含曲面、轮廓等4个对象。

drawnow

看看surrogateopt在默认迭代次数内定位全局最小值。

磅= 6 * 1(1、2)/ mplier;乌兰巴托=磅;[x, fvals eflags、输出]= surrogateopt (Objfcn磅,乌兰巴托);

图优化Plot函数包含一个轴对象。标题为“最佳函数值:13”的轴对象包含一个类型为line的对象。该对象表示最佳函数值。

surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
流("找到的最小值= %g.\r"fvals)
最低找到的值= 13。
图showNonSmoothFcn (Objfcn、范围);视图(-151年,44)p1 = plot3 (xs (1) x (2), fvals,“om”“MarkerSize”15岁的“MarkerFaceColor”“米”);传奇(p1, {“解决方案”})举行

图中包含一个轴对象。轴对象包含面、轮廓、线5个对象。该对象表示Solution。

patternsearch

patternsearch选择使用相同数量的函数求值,从边界内的随机点开始。

rng默认的X0 = lb + rand(size(lb))。*(乌兰巴托-磅);optsps = optimoptions (“patternsearch”“MaxFunctionEvaluations”, 200,“PlotFcn”“psplotbestf”);(xps、fvalps eflagps outputps] = patternsearch (x0 Objfcn ,[],[],[],[], 磅,乌兰巴托,[],optsps);
优化终止:网格尺寸小于选项。网格公差。

图模式搜索包含一个轴对象。标题为“最佳函数值:13”的轴对象包含一个类型为line的对象。

图showNonSmoothFcn (Objfcn、范围);视图(-151年,44)p1 = plot3 (x0 x0 (1), (2), Objfcn (x0),“ob”“MarkerSize”12“MarkerFaceColor”“b”);p2 = plot3 (xps (1) xps (2), fvalps,“om”“MarkerSize”15岁的“MarkerFaceColor”“米”);传奇((p1, p2) {“起点”“解决方案”})举行

图中包含一个轴对象。轴对象包含面、轮廓、线等6个对象。这些对象表示起点,解决方案。

patternsearch找到了相同的解surrogateopt

限制函数计算的次数,然后再试一次。

optsurr = optimoptions (“surrogateopt”“MaxFunctionEvaluations”, 40);[x, fvals eflags、输出]= surrogateopt (Objfcn磅,乌兰巴托,optsurr);

图优化Plot函数包含一个轴对象。标题为Best Function Value: 13.0238的轴对象包含一个类型为line的对象。该对象表示最佳函数值。

surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
optsps。MaxFunctionEvaluations = 40;(xps、fvalps eflagps outputps] = patternsearch (x0 Objfcn ,[],[],[],[], 磅,乌兰巴托,[],optsps);
超过的最大函数求值数:

图模式搜索包含一个轴对象。标题为Best Function Value: 13.0983的轴对象包含一个类型为line的对象。

同样,两个解算者很快就找到了全局解决方案。

fmincon

fmincon在求解起点附近的局部解时是有效的。然而,在非凸或非光滑问题中,它很容易陷入远离全局解的困境。

fmincon选择使用绘图函数,与以前的求解器相同数量的函数计算,以及相同的起始点patternsearch

选择= optimoptions (“fmincon”“PlotFcn”“optimplotfval”“MaxFunctionEvaluations”, 200);[fmsol, fmfval eflag fmoutput] = fmincon (x0 Objfcn ,[],[],[],[], 磅,乌兰巴托,[],选择);

图优化Plot函数包含一个轴对象。标题为“当前功能值:30.1703”的axis对象包含一个类型为line的对象。

局部最小值。约束满足。Fmincon停止,因为当前步长小于步长公差的值,约束满足到约束公差的值之内。
图showNonSmoothFcn (Objfcn、范围);视图(-151年,44)p1 = plot3 (x0 x0 (1), (2), Objfcn (x0),“ob”“MarkerSize”12“MarkerFaceColor”“b”);fmsol p2 = plot3 (fmsol (1), (2), fmfval,“om”“MarkerSize”15岁的“MarkerFaceColor”“米”);传奇((p1, p2) {“起点”“解决方案”})举行

图中包含一个轴对象。轴对象包含面、轮廓、线等6个对象。这些对象表示起点,解决方案。

fmincon在开始点附近陷入局部极小值。

另请参阅

||

相关的话题