主要内容

自动微分运用优化的效果

当使用自动分化,具体问题具体分析解决函数通常要求更少的功能评价和可以操作更加智能化。

默认情况下,解决使用自动分化来评估目标和非线性约束函数的梯度,当适用。自动微分法适用于函数表示的操作优化变量不使用fcn2optimexpr函数。看到自动微分优化工具箱将非线性函数优化表达式

最小化问题

考虑的问题最小化目标函数如下:

f u n 1 = 1 0 0 ( x 2 - - - - - - x 1 2 ) 2 + ( 1 - - - - - - x 1 ) 2 f u n 2 = 经验值 ( - - - - - - ( x - - - - - - y ) 2 ) 经验值 ( - - - - - - 经验值 ( - - - - - - y 1 ) ) 年代 e c h ( y 2 ) o b j e c t v e = f u n 1 - - - - - - f u n 2

创建一个优化问题代表这些变量和目标函数表达式。

概率= optimproblem;x = optimvar (“x”2);y = optimvar (“y”2);fun1 = 100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;fun2 = exp(和((x - y) ^ 2)) * exp (exp (- y(1))) *双曲正割(y (2));概率。目标= fun1 - fun2;

非线性约束条件最小化 x 1 2 + x 2 2 + y 1 2 + y 2 2 4

prob.Constraints。缺点(x =数目。^ 2 + y ^ 2) < = 4;

解决问题并研究解决方案的过程

解决问题从一个初始点。

init。x=[-1;2]; init.y = [1;-1]; [xproblem,fvalproblem,exitflagproblem,outputproblem] = solve(prob,init);
使用fmincon解决问题。局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
disp (fvalproblem)
-0.5500
disp (outputproblem.funcCount)
77年
disp (outputproblem.iterations)
46

输出结构表明,解决调用fmincon,这需要77功能评估和46迭代来解决这个问题。目标函数值的解决方案fvalproblem = -0.55

没有自动分化解决问题

确定自动分化的效率提高,集解决使用有限差分梯度而不是名称-值对参数。

[xfd, fvalfd exitflagfd outputfd] =解决(概率,初始化,“ObjectiveDerivative”,有限差分的,“ConstraintDerivative”,有限差分的);
使用fmincon解决问题。局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
disp (fvalfd)
-0.5500
disp (outputfd.funcCount)
265年
disp (outputfd.iterations)
46

使用有限差分梯度近似的原因解决比77年需要269功能评估。迭代的数量几乎是相同的,就像报道的目标函数值的解决方案。最终解决点是相同的显示精度。

disp ([xproblem.x xproblem.y])
0.8671 1.0433 0.7505 0.5140
disp ([xfd.x xfd.y])
0.8671 1.0433 0.7505 0.5140

总之,在优化自动分化的主要作用是降低的数量评估函数。

另请参阅

相关的话题