主要内容

优化非光滑函数的使用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)”

图中包含一个轴对象。标题为p s _ e x a m p le (x)的axis对象包含一个类型为functionsurface的对象。

创建一个二维优化变量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

另请参阅

||

相关的话题