主要内容

非光滑问题的求解行为

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

一般来说,求解器决策表提供了关于哪种求解器可能最适合您的问题的指导。关于平滑问题,请参见优化决策表.对于非光滑问题,请参见选择求解器的表格首先,并咨询更多信息全局优化工具箱求解器特征

具有单个非光滑点的函数

这个函数 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 (size(xx));Ii = 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), x (2);) toThePowerOf 1 / 2基线包含一个类型为surface的对象。

这个例子使用了2 × 6矩阵的矩阵范数x.矩阵范数涉及到奇异值分解,它不像欧几里得范数那样平滑。看到矩阵的2模

尽量减少使用patternsearch

patternsearch是非光滑问题的首选解决方案。看到选择求解器的表格.开始patternsearch一个非零的2 × 6矩阵x0,并试图找到的最小值 f .对于这个尝试和所有其他尝试,使用默认的求解器选项。

返回解(应该接近于零)、目标函数值(也应该接近于零)以及函数求值的次数。

Fun = @(x)范数([x(1:6);x(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(fun,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所示。然而,它需要超过10,000个函数求值才能收敛。

尽量减少使用fminsearch

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

[xfms,fvalfms,eflagfms,outputfms] = fminsearch(fun,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, egflagpsw,outputpsw] = particleswarm(fun,12);
优化结束:目标值相对于上一个OPTIONS发生了变化。MaxStallIterations的迭代小于OPTIONS.FunctionTolerance。
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.5222e-07
egflagpsw = 1
Ans = 37200

particleswarm找到了一个比patternsearch,但需要超过35000个功能评估。Exit flag 1表示解决方案良好。

使用遗传算法

遗传算法是一个流行的求解器,但不建议作为第一个尝试求解器。看看它在这个问题上的效果如何。

[xga,fvalga, egagga,outputga] = ga(fun,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
egagga = 1
Ans = 65190

遗传算法没有找到好的解决办法吗patternsearchparticleswarm,并且需要大约两倍的函数计算particleswarm.在这种情况下,退出标志1具有误导性。

使用fminunc从优化工具箱

fminunc不建议用于非光滑函数。看看它在这个上的表现。

[xfmu,fvalfmu,eflagfmu,outputfmu] = fminunc(fun,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(fun,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.7662e-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]';nummeval = [output .funccount,outputfm .funccount, outputpsw.funccount,...outputga.funccount、outputfmu.funcCount outputfmc.funcCount]”;results = table(Solver,SolutionQuality,FVal, nummeval)
结果=6×4表解算器SolutionQuality FVal NumEval  _________________ _______________ __________ _______ {' patternsearch}{‘好’}0.0072656 10780{‘fminsearch}{“贫穷”}2401 - 3.1971{‘particleswarm}{‘好’}4.5222 e-07 37200 {ga的}{“贫穷”}65190 - 0.62572{‘fminunc}{“贫穷”}546 - 1.1269{‘fmincon}{‘好’}1.7662 e-05 881

对结果的另一种看法。

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

图中包含一个轴对象。标题为“报告最小值”和“通过求解器计算”的axis对象包含12个类型为line, text的对象。

particleswarm达到最低的目标函数值,它通过接管三倍于patternsearch是美国的30多倍fmincon

fmincon一般不推荐用于非光滑问题。它在这种情况下是有效的,但这种情况下只有一个非光滑点。

相关的话题