主要内容

与一个非光滑问题解决者的行为

这个例子显示了选择一个适当的解决优化问题的重要性。它还表明,单点non-smoothness可能导致优化工具箱™的问题解决者。

一般来说,解决决策表提供指导,解决可能最适合你的问题。光滑的问题,看到优化决策表。对于非光滑问题,明白了表选择一个解决首先,为更多的信息和咨询全局优化工具箱求解特征

一个函数与一个非光滑点

这个函数 f ( x ) = | | x | | 1 / 2 非光滑点0,即最小化。这是一个二维图使用矩阵范数4 - d点 ( x ( 1 ) x ( 2 ) 0 0 ]

图x = linspace (5、5、51);[xx, yy] = meshgrid (x);zz = 0(大小(xx));2 = 1:长度(x)jj = 1:长度(x) zz ii, jj =√(规范([xx (ii, jj), yy (ii, jj), 0, 0)));结束结束冲浪(yy, xx zz)包含(“x”(1))ylabel (“x”(2))标题(“规范([x (1), (2), 0, 0)) ^ {5}”)

图包含一个坐标轴对象。坐标轴对象与标题N o r m ([x (1), (2);0,0])toThePowerOf 1 / 2基线,包含x (1) ylabel x(2)包含一个类型的对象的表面。

这个示例使用2-by-6矩阵的矩阵范数x。矩阵范数与奇异值分解,这不是欧几里得范数一样光滑。看到2-Norm矩阵

尽量减少使用patternsearch

patternsearch是推荐的第一次尝试非光滑问题的解决者。看到表选择一个解决。开始patternsearch从一个非零2-by-6矩阵x0,并试图找到最低的 f 。对于这个尝试,和所有其他人,解决使用默认选项。

返回的解决方案,这应该是接近于零,目标函数值,同样应该接近于零,评价函数的数量。

有趣= @ (x)规范([x (1:6); (7:12))) ^ (1/2);x0 = (1:6; 7:12);rng默认的x0 = x0 +兰特(大小(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);
优化终止:网格大小小于options.MeshTolerance。
xps、fvalps eflagps outputps.funccount
xps =2×6104×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。然而,需要超过10000个函数评价收敛。

尽量减少使用fminsearch

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

(广播xfm fvalfms、eflagfms outputfms] = fminsearch(有趣,x0);
退出:评估已经超过了最大数量的函数——增加MaxFunEvals选项。当前函数值:3.197063
广播xfm、fvalfms eflagfms outputfms.funcCount
广播xfm =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表示缺乏融合。报告的解决方案是贫穷。

使用particleswarm

particleswarm建议尝试另一种解算器。看到选择非光滑问题的解决者

[xpsw, fvalpsw eflagpsw outputpsw] = particleswarm(有趣,12);
优化结束:相对客观价值的变化在过去的选择。小于OPTIONS.FunctionTolerance MaxStallIterations迭代。
xpsw、fvalpsw eflagpsw outputpsw.funccount
xpsw =1×1210-12年×-0.0386 -0.1282 -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

particleswarm发现一个更准确的解决方案patternsearch,但35000年接管功能评估。出口标志1表明,解决方案是好的。

使用遗传算法

遗传算法是一个流行的解决,但不推荐作为第一个解算器尝试。在这个问题上看看它是如何工作的。

(xga fvalga、eflagga outputga] = ga(有趣,12);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
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

遗传算法没有找到好的解决方案patternsearchparticleswarm,大约需要两倍的功能评估particleswarm。在这种情况下退出标志1是误导性的。

使用fminunc从优化工具箱

fminunc不建议非光滑函数。看看它的执行。

[xfmu, fvalfmu eflagfmu outputfmu] = fminunc(有趣,x0);
局部最小值。fminunc停止因为当前步骤的大小小于步长值的宽容。
xfmu、fvalfmu eflagfmu outputfmu.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 = 546

fminunc解决方案是不如遗传算法解决方案。然而,fminunc到达,而穷人解决方案在功能评价相对较少。退出旗2意味着你应该照顾,报道的一阶最优性条件不满足的解决方案。

使用fmincon从优化工具箱

fmincon有时可以减少非光滑函数。看看它的执行。

[xfmc, fvalfmc eflagfmc outputfmc] = fmincon(有趣,x0);
局部最小值。约束满足。fmincon停止因为当前步骤的大小小于一步尺寸公差的值和约束满足约束的值公差内。
xfmc、fvalfmc eflagfmc outputfmc.funcCount
xfmc =2×6109×0.0241 0.0613 -0.1337 -0.0030 0.1065 0.0378 -0.1376 0.0497 0.1443 -0.1176 0.0373 0.1430
fvalfmc = 1.7662 e-05
eflagfmc = 2
ans = 881

fmincon使用默认选项产生一个精确的解决方案后不到1000功能评估。退出旗2并不意味着解决方案是不准确的,但这并不满足一阶最优性条件。这是因为目标函数的梯度是不为零的解决方案。

总结的结果

选择合适的解算器导致更好、更快的结果。这个总结显示了完全不同的结果。解决方案质量“可怜的”如果目标函数值大于0.1,‘好’如果该值小于0.01,“平庸”否则。

解算器= {“patternsearch”;“fminsearch”;“particleswarm”;“遗传算法”;“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}{‘好’}10780 - 0.0072656 {‘fminsearch}{“贫穷”}2401 - 3.1971 {‘particleswarm}{‘好’}4.5222 e-07 37200 {ga的}{“贫穷”}65190 - 0.62572 {‘fminunc}{“贫穷”}546 - 1.1269 {‘fmincon}{‘好’}1.7662 e-05 881

另一个视图的结果。

图保存2 = 1:长度(FVal) clr =兰德(1、3);情节(NumEval (ii), FVal (ii),“o”,“MarkerSize”10“MarkerEdgeColor”clr,“MarkerFaceColor”clr)文本(NumEval (ii), FVal (ii) + 0.2,解算器{2},“颜色”,clr);结束ylabel (“FVal”)包含(“NumEval”)标题(解算器的最小和评估报告”)举行

图包含一个坐标轴对象。坐标轴对象与标题报道最小和评估通过解算器,包含NumEval, ylabel FVal包含12线类型的对象,文本。一个或多个行显示的值只使用标记

particleswarm达到最低的目标函数值,它是通过接管功能评估的3倍patternsearch,超过30倍fmincon

fmincon一般不建议非光滑问题。这是有效的在这种情况下,但本例中只有一个非光滑点。

相关的话题