本节展示如何选择是将非线性函数转换为优化表达式,还是根据对优化变量所支持的操作创建表达式。金宝app本节还展示了如何在必要时通过使用FCN2Optimexpr.
.
通常,通过在优化变量和表达式上使用受支持的操作来创建您的目标或非线性约束函数。金宝app这样做有这些优势:
解决
包括通过自动微分计算的梯度。看到自动微分在基于问题优化中的作用.
解决
有更广泛的可供选择的解决方案。当使用FCN2Optimexpr.
,解决
只使用fmincon
要么fminunc
.
一般来说,支持的运算包括金宝app所有初等数学运算:加、减、乘、除、幂,以及初等函数,如指数函数和三角函数及其逆。非平稳的操作,如最大限度
,腹肌
,如果
, 和案件
不受支持。金宝app有关完整描述,请参阅金宝app支持优化变量和表达式的操作.
例如,假设您的目标函数是
在哪里 是你提供的参数,问题是最小化 在 和 .这个目标函数是平方和,在这一点取最小值为0 , .
目标函数是多项式,因此您可以根据优化变量的基本操作来编写它。
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
是对称的
.
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。