这个例子说明了为优化问题选择一个合适的解算器的重要性。它还表明,单点不平滑可能会导致最优化工具箱™求解器出现问题。
一般来说,求解器决策表提供了关于哪个求解器可能最适合您的问题的指导。关于平滑问题,请参见优化决策表(优化工具箱)。对于非光滑问题,请参见选择求解器的表格首先,要了解更多信息请咨询全局优化工具箱求解器特性.
这个函数 在点0处是不光滑的,点0是最小值点。这是一个二维图矩阵范数4-D点 .
图x = linspace(- 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}”)
这个例子使用了一个2 × 6矩阵的矩阵范数x
.矩阵范数与奇异值分解有关,奇异值分解不像欧几里得范数那样平滑。看到2-Norm矩阵(MATLAB)。
patternsearch
patternsearch
是推荐的第一个解决非光滑问题的方法。看到选择求解器的表格.开始patternsearch
从一个非0的2 × 6矩阵x0
,并尝试确定最小值
.对于此尝试和所有其他尝试,使用默认的求解器选项。
返回应接近零的解决方案,目标函数值同样应接近零,以及所采取的功能评估数。
有趣= @ (x)规范([x (1:6); (7:12))) ^ (1/2);x0 = (1:6; 7:12);rng默认的X0 = X0 + rand(size(X0))
x0 =2×6.1.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×6.10-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);
退出:超过了函数计算的最大数量-增加MaxFunEvals选项。当前功能值:3.197063
广播xfm、fvalfms eflagfms outputfms.funcCount
广播xfm =2×6.2.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);
优化结束:相对于上一个选项的目标值的变化。MaxStallIterations迭代小于options . functional tolerance。
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);
优化终止:适应度值的平均变化小于选项。
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.609 -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×6.10-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}{“贫穷”}2401 - 3.1971{‘particleswarm}{‘好’}4.5222 e-07 37200 {ga的}{“贫穷”}65190 - 0.62572{‘fminunc}{“贫穷”}442 - 1.1269{‘fmincon}{‘好’}8.2669 e-06 1052
另一种观点的结果。
图持有在为ii = 1:length(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”)标题(“由求解器报告的最低和评估)举行从
而particleswarm
达到最低的目标函数值,它通过采取超过三倍的函数评估patternsearch
,是。的30多倍fmincon
.
fmincon
一般不建议用于非光滑问题。在这种情况下是有效的,但这种情况只有一个非光滑点。