与非光滑的问题解决行为

这个例子显示了选择用于优化问题的适当求解器的重要性。这也表明,非光滑的单点可能会导致优化工具箱™求解的问题。

通常,解决方案决策表提供了关于哪种解决方案最适合您的问题的指导。对于平滑问题,参见优化决策表(优化工具箱)。对于非光滑问题,参见表中选择一个解算器首先,更多信息请咨询全局优化工具箱求解器的特点

使用单点非光滑A功能

功能 f ( x ) = | | x | | 1 / 2 是在点0,这是最小化非光滑点。下面是使用2-d情节矩阵范数对于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)= SQRT(范数([XX(II,JJ),YY(II,JJ); 0,0]));结束结束冲浪(yy, xx zz)包含('×(1)')ylabel('×(2)')标题(“规范([x (1), (2), 0, 0)) ^ {5}”)

这个例子对一个2×6矩阵使用矩阵范数x。矩阵范数涉及奇异值分解,这是不顺利,因为欧几里得范数。看到矩阵的2范数(MATLAB)。

尽量减少使用patternsearch

patternsearch是推荐的第一个解决方案,以尝试非光滑的问题。看到表中选择一个解算器。开始patternsearch从一个非零2×6矩阵x0,并尝试找出的最小值 f 。对于此尝试和所有其他尝试,请使用默认解决方案选项。

返回该溶液中,这应该是接近零,目标函数值,该值同样应该接近零,以及函数评估的数目作出。

有趣= @(x)的范数([X(1:6); X(7:12)])^(1/2);X0 = [1:6; 7:12];RNG默认的x0 = x0 + rand(大小(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×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有时可以处理不连续,所以这是一个合理的选择。

[xfms,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.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.1290 -0.0032 - 0.0165 - 0.0728 -0.0026
fvalpsw = 4.5222e-07
eflagpsw = 1
ANS = 37200

particleswarm找到一个更精确的解比patternsearch,但需要超过35,000个功能评价。出口标志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

遗传算法没有找到一个好的解决方案patternsearch要么particleswarm,并需要大约两倍的函数计算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 = 442

fminunc解决方案是不如的遗传算法解决方案。然而,fminunc达到相对较少的功能评估的比较差的解决方案。出口标志2只意味着你应该小心,第一阶最优条件没有在报告的解决方案满足了。

采用fmincon从优化工具箱

fmincon有时可以最大限度地减少非光滑的功能。看看它在这个上的表现。

[xfmc, fvalfmc eflagfmc outputfmc] = fmincon(有趣,x0);
局部最小值。约束满足。fmincon之所以停止,是因为当前步长小于该步长公差的值,且约束满足约束公差的值内。
xfmc、fvalfmc eflagfmc outputfmc.funcCount
xfmc =2×610-10年×0.1530 0.0951 -0.2098 0.1464 -0.2330 0.1503 0.3891 -0.2477 -0.2373 -0.0222 0.4761 -0.2413
fvalfmc = 8.2669 e-06
eflagfmc = 2
ans = 1052

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'} { '好'} 0.0072656 10780 { 'fminsearch'} { '可怜'} 3.1971 2401 { 'particleswarm'} { '好'} 4.5222e-07 37200 {'嘎'} {' 可怜 '} 0.62572 65190 {' fminunc”} { '可怜'} 1.1269 442 { 'fmincon'} { '好'} 8.2669e-06 1052

结果的另一种观点。

身材保持i = 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”)xlabel(“NumEval”)标题(“报告最小和评估通过求解”)保持

particleswarm达到最低的目标函数值,它是通过占用三倍多的函数计算来实现的patternsearch,是其30多倍fmincon

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

相关话题