主要内容

求解非光滑问题的行为

这个例子说明了为优化问题选择合适的求解器的重要性。它还表明,一个非光滑的单点可能导致优化工具箱™求解器的问题。

通常,求解器决策表提供了对您的问题最适合哪些求解器的指导。为了平稳的问题,看优化决策表.对于不平滑的问题,请参见选择求解器的表格首先,有关更多信息咨询全局优化工具箱求解器特性

一个具有单一非光滑点的函数

这个函数 F X = | | X | | 1 / 2 在点0处是不光滑的,这是最小值点。这是一个使用矩阵规范对于4-D点 [ X 1 X 2 0. 0. ]

图x = linspace(-5,5,51);[xx,yy] = meshgrid(x);zz = zeros(尺寸(xx));为了II = 1:长度(x)为了jj = 1:长度(x) zz ii, jj =√(规范([xx (ii, jj), yy (ii, jj), 0, 0)));结尾结尾冲浪(XX,YY,ZZ)Xlabel(“x”(1)) ylabel (“x”(2))标题('常态([x(1),x(2); 0,0])^ {1/2}'

图中包含一个轴。标题为Norm([x(1),x(2);0,0])^{1/2}的轴包含一个类型曲面的对象。

此示例使用2×6矩阵的矩阵标准X.矩阵范数与奇异值分解有关,它不像欧几里得范数那样光滑。看2-Norm矩阵

最小化使用patternsearch

patternsearch是推荐的第一求解器,用于尝试非现场问题。看选择求解器的表格.开始patternsearch从一个非0的2 × 6矩阵X0.,并尝试找到最少的 F .对于此尝试,以及所有其他尝试,请使用默认的求解器选项。

返回接近于零的解,目标函数值,也应该接近于零,以及进行的函数计算的次数。

有趣= @ (x)规范([x (1:6); (7:12))) ^ (1/2);x0 = (1:6; 7:12);rng默认x0 = x0 + rand(size(x0))
X0 =2×61.8147 2.1270 3.6324 4.2785 5.9575 6.1576 7.9058 8.9134 9.0975 10.5469 11.9649 12.9706
(xps、fvalps eflagps outputps] = patternsearch(有趣,x0);
优化终止:网孔尺寸小于选项。网孔公差。
xps、fvalps eflagps outputps.funccount
XPS =2×610.-4× 0.1116 -0.1209 0.3503 -0.0520 -0.1270 0.2031 -0.3082 -0.1526 0.0623 0.0652 0.4479 0.1173
fvalps = 0.0073
EFLAGPS = 1
ANS = 10780.

patternsearch达到一个良好的解决方案,如退出标志1所示。但是,它需要超过10,000个功能评估来融合。

最小化使用fminsearch.

文件指出fminsearch.有时可以处理不连续性,所以这是一个合理的选择。

(广播xfm fvalfms、eflagfms outputfms] = fminsearch(有趣,x0);
退出:已超过最大函数计算数-增加maxfuneval选项。当前函数值:3.197063
XFMS,FVALFMS,EFLAGFM,OutputFMS.Funccount
XFMS =2×62.2640 1.1747 9.0693 8.1652 1.7367 -1.2958 3.7456 1.2694 0.2714 -3.7942 3.8714 1.9290
FVALFMS = 3.1971.
eflagfms = 0
ans = 2401

使用默认选项,fminsearch.在它收敛到一个解之前用完函数计算。退出标志0表示缺乏收敛。报道的解决方案很差。

使用partminleswarm.

partminleswarm.建议作为下一个求解器尝试。看选择求解器之间的索音问题

[XPSW,FVALPSW,EFL​​AGPSW,OUTPUTPSW] = ParticleSwarm(Fun,12);
优化结束:在最后一个选项中客观值的相对变化。MaxStallIterations迭代比OPTIONS.FunctionTolerance小。
xpsw、fvalpsw eflagpsw outputpsw.funccount
xpsw =1×1210.-12× -0.0386 - 0.01282 -0.0560 - 0.0904 - 0.0771 -0.0541 -0.1189 0.1290 -0.0032 0.0165 0.0728 -0.0026
fvalpsw = 4.5222 e-07
EFLAGPSW = 1
ans = 37200

partminleswarm.找到了比patternsearch,但需要超过35,000个函数计算。退出标志1表示该解决方案是好的。

使用GA.

GA.是一个受欢迎的求解器,但不建议作为第一个尝试的求解器。看看它对这个问题有多好。

[XGA,FVALGA,EFLAGGA,Outputga] = GA(乐趣,12);
优化终止:平均变化的适应度值小于选项。功能公差。
xga、fvalga eflagga outputga.funccount
XGA =1×12-0.0061 -0.0904 0.0816 -0.0484 0.0799 -0.1925 0.0048 0.3581 0.0848 0.0232 0.0237 -0.1294
fvalga = 0.6257
EFLAGGA = 1
ans = 65190

GA.没有找到良好的解决方案patternsearchpartminleswarm.,并大约需要两倍的函数评估partminleswarm..在这种情况下,退出标志1具有误导性。

使用Fminunc.从优化工具箱

Fminunc.不推荐用于非光驱功能。看看它是如何执行这个的。

[xfmu,fvalfmu,eflagfmu,outputfmu] = fminunc(fun,x0);
局部最小值。Fminunc停止是因为当前步长小于步长公差值。
XFMU,FVALFMU,EFLAGFMU,OUTPORFMU.FUNCCOUNT
xfmu =2×6-0.5844 -0.9726 -0.4356 0.1467 0.3263 -0.1002 -0.0769 -0.1092 -0.3429 -0.6856 -0.7609 -0.6524
fvalfmu = 1.1269
EFLAGFMU = 2
ans = 429.

Fminunc.解决的不如解决的好GA.解决方案。然而,Fminunc.在相对较少的函数评估中得到相当差的解决方案。退出标志2意味着您应该注意,报告的解决方案不满足一阶最优性条件。

使用粉刺从优化工具箱

粉刺有时可以最小化非光滑函数。看看它是如何执行这个的。

[XFMC,FVALFMC,EFLAGFMC,OutputFMC] = Fmincon(乐趣,X0);
局部最小值。约束满足。Fmincon停止,因为当前步骤的大小小于步长的值,但是在约束公差的值内满足约束。
XFMC,FVALFMC,EFLAGFMC,OUTPUTFMC.FUNCCOUNT
XFMC =2×610.-10×-0.1407 0.8738 0.9526 0.5668 0.8921 0.6830 0.4008 -0.1290 0.0410 -0.6440 0.0190 -0.2374
fvalfmc = 1.3212 e-05
EFLAGFMC = 2
ans = 863

粉刺默认选项后,在少于1000个功能评估后会产生准确的解决方案。退出标志2并不意味着解决方案是不准确的,但不满足一阶的最优性条件。这是因为解决方案在目标函数的梯度不为零。

结果摘要

选择合适的求解器导致更好,结果更快。本摘要显示了结果如何存在。解决方案质量是“可怜的”如果目标函数值大于0.1,‘好’如果小于0.01,则'平庸'除此以外。

求解器= {'patternsearch';“fminsearch”;'particleswarm';'ga';'fminunc';“fmincon”};SolutionQuality = {‘好’;“可怜的”;‘好’;“可怜的”;“可怜的”;‘好’};FVal = [fvalps fvalfms、fvalpsw fvalga, fvalfmu, fvalfmc) ';NumEval = [outputps.funccount outputfms.funcCount outputpsw.funccount,......outputga.funccount、outputfmu.funcCount outputfmc.funcCount]”;结果=表(解算器,SolutionQuality、FVal NumEval)
结果=6×4表解算器SolutionQuality FVal NumEval  _________________ _______________ __________ _______ {' patternsearch}{‘好’}0.0072656 10780{‘fminsearch}{“贫穷”}2401 - 3.1971{‘particleswarm}{‘好’}4.5222 e-07 37200 {ga的}{“贫穷”}65190 - 0.62572{‘fminunc}{“贫穷”}429 - 1.1269{‘fmincon}{‘好’}1.3212 e-05 863

结果的另一个看法。

图保存为了II = 1:长度(FVAL)CLR = RAND(1,3);绘图(Numeval(II),FVAL(II),“o”“MarkerSize”10,“MarkerEdgeColor”,clr,'markerfacecolor',clr)文本(Numeval(ii),fval(ii)+ 0.2,solver {II},“颜色”, clr);结尾ylabel ('fval')包含('numeval')标题(“由求解器报告的最小值和评估”)举行

图中包含一个轴。具有标题的轴报告由求解器的最小值和评估包含12个类型的类型线,文本。

partminleswarm.实现最低的目标函数值,它通过占用三倍多的函数评估而这样做patternsearch,超过30倍粉刺

粉刺通常不推荐用于非本地问题。在这种情况下它是有效的,但这种情况只有一个非空间点。

相关的话题