私はBFGSアルゴリズムを使ってJuliaの関数を最小限にするためにOptim.jlライブラリを使用しています。今日、私はquestionに同じライブラリについて尋ねましたが、混乱を避けるために2つに分割することに決めました。Optim.jl:負の逆ヘッセ行列
私はまた、最適化後の負の逆ヘッセ行列の推定値を得て、さらなる計算をしたいと思います。 OptimはライブラリのGitHubのウェブサイトで
は、私は、次の作業の例を見つけました:
using Optim
rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
result = optimize(rosenbrock, zeros(2), BFGS())
にはどうすれば結果から最適化後の負の逆ヘッセ行列を得ることができますか?ヘッセ行列、逆ヘッセ行列、逆逆ヘッセ行列のいずれかを識別するフィールドがありますか?コメントの
EDIT
感謝。関数が "逆ヘッセ行列"を返すように "optimize.jl"を編集する方が効率的だと思いますか?作業例については以下を参照してください - 編集ライン226で導入されました:最適化の後に「状態」へのフルアクセスを持っているために
return MultivariateOptimizationResults(state.method_string,
initial_x,
f_increased ? state.x_previous : state.x,
f_increased ? state.f_x_previous : state.f_x,
iteration,
iteration == options.iterations,
x_converged,
options.x_tol,
f_converged,
options.f_tol,
g_converged,
options.g_tol,
f_increased,
tr,
state.f_calls,
state.g_calls,
state.h_calls), state
:
if state.method_string == "BFGS"
return MultivariateOptimizationResults(state.method_string,
initial_x,
f_increased ? state.x_previous : state.x,
f_increased ? state.f_x_previous : state.f_x,
iteration,
iteration == options.iterations,
x_converged,
options.x_tol,
f_converged,
options.f_tol,
g_converged,
options.g_tol,
f_increased,
tr,
state.f_calls,
state.g_calls,
state.h_calls), state.invH
else
return MultivariateOptimizationResults(state.method_string,
initial_x,
f_increased ? state.x_previous : state.x,
f_increased ? state.f_x_previous : state.f_x,
iteration,
iteration == options.iterations,
x_converged,
options.x_tol,
f_converged,
options.f_tol,
g_converged,
options.g_tol,
f_increased,
tr,
state.f_calls,
state.g_calls,
state.h_calls)
end
それとも。
EDIT 2
この変更はOptim.jlライブラリの新しいバージョンで導入されますので、この議論を継続する必要はありません。今のところ、extended_traceとafter_while!トリックが動作します。個人的には後者を好むので、@Dan Getzに正しい答えを与える議論を終わらせます。
推奨される 'optimize.jl'の変更はうまくいくでしょうが、' optimize.jl'に特有のBFGSであり、オプティマイザの最終的な最適化状態にアクセスする自然な必要性には触れません。 –
最後の編集はどうですか?意味:最適化後に「状態」にアクセスできるようにする。 – merch
これは確かに私がOptimに追加しようとするものです。誰もパッケージ内のファイルを編集する必要はありません! – pkofod