このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
問題ベ,スの最適化における自動微分の効果
自動微分を使用すると,問題ベ,スの解决
関数で必要な関数評価回数が減少する傾向があり,関数がより安定して動作できるようになります。
既定で,解决
は,必要に応じて,自動微分を使用して,目的関数と非線形制約関数の勾配を評価します自動微分は,fcn2optimexpr
関数を使用しない最適化変数に対する演算として表現された関数に適用されます。詳細は,优化工具箱の自動微分と非線形関数から最適化式への変換を参照してください。
最小化問題
次の目的関数を最小化する問題にいて考えます。
これらの変数を表す最適化問題と目的関数式を作成します。
Prob =优化问题;X = optimvar(“x”2);Y = optimvar(“y”2);Fun1 = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;fun2 = exp(和((x - y) ^ 2)) * exp (exp (- y(1))) *双曲正割(y (2));概率。目标= fun1 - fun2;
最小化には,非線形制約 が適用されます。
probo . constraints .cons = sum(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] = solve(prob,init,...“ObjectiveDerivative”,有限差分的,“ConstraintDerivative”,有限差分的);
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
disp (fvalfd)
-0.5500
disp (outputfd.funcCount)
264
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
要約すると,最適化における自動微分の主な効果は,関数評価の回数が減少することです。