主要内容

将非线性函数转换为优化表达式

本节展示如何选择是将非线性函数转换为优化表达式,还是根据对优化变量所支持的操作创建表达式。金宝app本节还展示了如何在必要时通过使用FCN2Optimexpr.

尽可能使金宝app用支持的操作

通常,通过在优化变量和表达式上使用受支持的操作来创建您的目标或非线性约束函数。金宝app这样做有这些优势:

一般来说,支持的运算包括金宝app所有初等数学运算:加、减、乘、除、幂,以及初等函数,如指数函数和三角函数及其逆。非平稳的操作,如最大限度腹肌如果, 和案件不受支持。金宝app有关完整描述,请参阅金宝app支持优化变量和表达式的操作

例如,假设您的目标函数是

f x y r 1 0 0 y - x 2 2 + r - x 2

在哪里 r 是你提供的参数,问题是最小化 f x y .这个目标函数是平方和,在这一点取最小值为0 x r y r 2

目标函数是多项式,因此您可以根据优化变量的基本操作来编写它。

r = 2;x = optimvar ('X');y = optimvar ('是');f = 100 *(y  -  x ^ 2)^ 2 +(r  -  x)^ 2;prob = OptimProblem(“客观的”,F);x0.x = -1;x0.y = 2;[溶胶,fval] =求解(prob,x0)
使用lsqnonlin解决问题。局部最小值。由于梯度的大小小于最优性公差的值,优化完成。
sol =结构与字段:X:2.0000 Y:4.0000
fval = 8.0661 e-29

利用目标函数的转换来解决相同的问题FCN2Optimexpr.(不推荐),首先将目标写成匿名函数。

= @(x,y)100*(y - x²)²+ (r - x)²;概率。目标= fcn2optimexpr(有趣,x, y);[sol2, fval2] =解决(x0概率)
使用fminunc解决问题。局部最小值。由于梯度的大小小于最优性公差的值,优化完成。
sol2 =结构与字段:X: 2.000 y: 3.9998
FVAL2 = 1.7143E-09

请注意,解决用途fminunc这一次代替了更有效率lsqnonlin以及报告的解决方案y与正确答案略有不同。此外,报告fval约为1e-9而不是1e-20(实际解值正好为0)解决不使用更高效的求解器。

此示例的其余部分显示了如何将函数转换为优化表达式FCN2Optimexpr.

函数文件

要在基于问题的方法中使用函数文件,必须将文件转换为表达式FCN2Optimexpr.

例如,Expfn3.M.文件包含以下代码:

类型Expfn3.M.
功能[f,g,mineval] = expfn3(u,v)mineval = min(eig(u));f = v'* u * v;f =  - 展开(-f);t = u * v;g = t'* t + sum(t) -  3;

这个函数不完全由受支持的操作组成,因为金宝appmin (eig (u)).因此,使用expfn3 (u, v)作为一个优化表达式,您必须首先使用FCN2Optimexpr.

使用expfn3作为优化表达式,首先创建合适大小的优化变量。

u = Optimvar(“u”3, 3,下界的,-1,“UpperBound”,1);%3-by-3变量v = optimvar (“v”,3,下界的,-2,“UpperBound”,2);% 3×1变量

将函数文件转换为优化表达式FCN2Optimexpr.

[f, g, mineval] = fcn2optimexpr (@expfn3, u, v);

属性指定表达式的大小可以节省计算时间,因为所有返回表达式都是标量“OutputSize”名称-值对的论点。另外,因为expfn3计算所有输出,您可以使用使用的更多计算时间重新定位名称值对。

[f,g,mineval] = fcn2optimexpr(@ expfn3,u,v,“OutputSize”[1],'reuseevaluation',真正的)
f =非线性优化表达式[argout,~,~] = expfn3(u, v)
g =非线性优化表达[〜,arcout,〜] = expfn3(u,v)
mineval =非线性优化表达[〜,〜,argout] = expfn3(u,v)

匿名函数

要在基于问题的方法中使用一般的非线性函数句柄,请使用FCN2Optimexpr..例如,写入等效的函数句柄mineval并转换它。

有趣= @(u)min(eig(u));funexpr = fcn2optimexpr(乐趣,u,“OutputSize”[1])
funexpr =非线性优化表达anonymousfunction2(u)其中:anonymousfunction2 = @(u)min(eig(u));

创建目标

要将客观表达式作为目标函数,请创建优化问题。

概率= optimproblem;概率。目标= f;

定义约束

定义约束g < = 0在优化问题中。

prob.constraints.nlcons1 = g <= 0;

还要定义约束u是对称的 n e v 一个 l - 1 / 2

proc . constraints .sym = u == u.';mineval = mineval >= -1/2;

查看问题。

显示(概率)
优化问题:解决:U,V最小化:[arcout,〜,〜] = expfn3(u,v)受nlcons1:arg_lhs <= 0其中:[〜,arg_lhs,〜] = expfn3(u,v);受符号的影响:U(2,1) -  U(1,2)== 0 u(3,1) -  u(1,3)== 0 -U(2,1)+ U(1,2)== 0 U(3,2) -  U(2,3)== 0 -U(3,1)+ U(1,3)== 0 -U(3,2)+ U(2,3)== 0受到Mineval的影响:arg_lhs> =(-0.5)其中:[〜,〜,arg_lhs] = expfn3(u,v);可变界限:-1 <= u(1,1)<= 1 -1 <= u(2,1)<= 1 -1 <= u(3,1)<= 1 -1 <= u(1,2)<= 1 -1 <= u(2,2)<= 1 -1 <= u(3,2)<= 1 -1 <= u(1,3)<= 1 -1 <= u(2,3)<= 1 -1 <= u(3,3)<= 1 -2 <= V(1)<= 2 -2 <= V(2)<= 2 -2 <= V(3)<= 2

解决问题

要解决问题,打电话解决.初始点x0

RNG.默认的重复性的%x0。u=0。25*randn(3); x0.u = x0.u + x0.u.'; x0.v = 2*randn(3,1); [sol,fval,exitflag,output] = solve(prob,x0)
使用Fmincon解决问题。找到了较低目标函数值的可行点。发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
sol =结构与字段:U: [3x3 double] v: [3x1 double]
fval = -403.4288.
ExitFlag = OptimalAllyolution.
输出=结构与字段:迭代:87 Funccount:1448 CarrowViroation:6.3860E-12步骤化:7.4093E-05算法:'内部点'Firstordopt:0.0012 Cgiterations:0.172消息:'...'最佳:[1x1结构]目标:“有限差异“限制性:”有限差异“求解器:'粉丝'

查看解决方案。

disp (sol.u)
0.8419 0.5748 0.7670 0.5748 0.3745 0.2997 0.7670 0.2997 0.5667
disp (sol.v)
2.0000 -2.0000 2.0000

解决方案矩阵u是对称的。所有值v都在边界上。

版权所有2018-2020 Mathworks,Inc。

另请参阅

|

相关话题