自动微分运用优化的效果
当使用自动分化,具体问题具体分析解决
函数通常要求更少的功能评价和可以操作更加智能化。
默认情况下,解决
使用自动分化来评估目标和非线性约束函数的梯度,当适用。自动微分法适用于函数表示的操作优化变量不使用fcn2optimexpr
函数。看到自动微分优化工具箱和将非线性函数优化表达式。
最小化问题
考虑的问题最小化目标函数如下:
创建一个优化问题代表这些变量和目标函数表达式。
概率= 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;
非线性约束条件最小化 。
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
总之,在优化自动分化的主要作用是降低的数量评估函数。