优化非光滑函数的使用patternsearch
,具体问题具体分析
这个例子展示了如何在基于问题的方法中使用直接搜索最小化非光滑函数。函数求最小值,ps_example (x)
,在运行此示例时包含。
画出目标函数。
fsurf (@ (x, y)重塑(ps_example ([x (:), y(:))),大小(x)),...[-6 2 -4 4],“线型”,“没有”,“MeshDensity”, 300) colormap“喷气机”视图(-26年,43)包含(“x”(1)) ylabel (“x”(2))标题(“ps \ _example (x)”)
创建一个二维优化变量x
.的ps_example
函数期望变量是行向量,因此指定x
作为一个2元行向量。
X = optimvar(“x”、1、2);
使用ps_example
作为目标函数,将函数转换为优化表达式,使用fcn2optimexpr
.
Fun = fcn2optimexpr(@ps_example,x);
创建一个具有目标函数的优化问题ps_example
.
问题=优化问题(“客观”、有趣的);
指定初始点x0
作为一个带场的结构x
取值(2.1 - 1.7)
.
x0。x= [2.1 1.7];
解决问题,指定patternsearch
解算器。
[sol,fval] = solve(prob,x0,“规划求解”,“patternsearch”)
使用模式搜索解决问题。优化终止:网格尺寸小于options.MeshTolerance。
索尔=带字段的结构:X: [-4.7124 -7.6294e-07]
Fval = -2.0000
patternsearch
找到比默认值更好的解决方案(较低的函数值)fminunc
求解器,不推荐用于最小化非光滑函数。
[solfminunc,fvalfminunc] = solve(prob,x0)
使用fminunc解决问题。局部最小值。Fminunc停止,因为它不能沿着当前搜索方向减小目标函数。
solfminunc =带字段的结构:X: [1.9240 8.8818e-16]
Fvalfminunc = 2.9161
另请参阅
patternsearch
|fcn2optimexpr
|解决