※記事内に商品プロモーションを含むことがあります。
はじめに
非線形問題を解くことができる最適化ソルバIPOPTの主要オプションについて解説します。
収束判定
tol
: 収束したと判定するための許容誤差です。例えばtol = 0.01
と設定して、x = 0
という等式制約があった場合、x
の値が-0.01~+0.01の範囲に入れば収束したと判定されます。デフォルト値は1E-8
です。max_iter
: 最大反復回数です。解の更新がこの回数を超えても収束していない場合、Maximum_Iterations_Exceeded
となります。デフォルト値は3000
です。max_wall_time
: 最大実行時間(秒)です。この時間を超えても収束していない場合、Maximum_WallTime_Exceeded
となります。デフォルト値は1E20
です。
ログの出力
print_level
: コンソールに出力されるログの詳細度です。0~12の間の整数で指定し、値が大きいほど詳細になります。デフォルト値は5
です。output_file
: ログをファイル出力する場合にファイル名を指定します(指定しなければログファイルは出力されません)。詳細度合いはprint_level
と同じになりますが、file_print_level
オプションで上書きできます。file_print_level
: ログをファイル出力する場合、その詳細度合いを指定します。0~12の間の整数で指定し、値が大きいほど詳細になります。デフォルト値は5
です。print_user_options
: ログにユーザが指定したオプションのリストを出力します。"yes"
または"no"
で指定します。デフォルト値は"no"
です。print_frequency_iter
: 何イタレーション毎に途中の結果を出力するか指定します。デフォルト値は1
(各イタレーションで出力される)です。
非線形問題のスケーリング
非線形問題において、変数や制約式によってスケール(桁数)が異なっていると収束しづらいため、スケーリングして改善を図ります。
nlp_scaling_method
: 非線形問題のスケーリングを変更する方法です。none
: スケーリングしない。gradient-based
: 初期値で計算した勾配の最大値がnlp_scaling_max_gradient
となるようにスケーリングする(デフォルト)。
nlp_scaling_max_gradient
: スケーリングの最大値です。nlp_scaling_method
オプションがgradient-based
のときのみ有効です。
線形ソルバ
linear_solver
: IPOPTがラインサーチに使用する線形ソルバを指定します。ma27
(デフォルト),ma57
,ma77
,ma86
,ma97
,paradio
,pardisomkl
,spral
,wsmp
,mumps
から指定できます(線形ソルバによっては別途用意する必要があります)。
ヘッセ行列の近似
ヘッセ行列とは、簡単に言えば評価関数を2階微分した行列のことです。ニュートン法を用いて最適化問題を解く場合、ヘッセ行列が必要となります。一方、ヘッセ行列を近似して計算する準ニュートン法と呼ばれる手法もあります。ニュートン法と準ニュートン法のどちらもIPOPTに実装されています。
hessian_approximation
: ヘッセ行列を近似するか指定します。exact
: 最適化問題側から与えられた正確なヘッセ行列を使用します(デフォルト)。limited-memory
: ヘッセ行列を近似します。
limited_memory_max_history
: ヘッセ行列の近似において、直近の何イタレーションの情報を使用するか指定します。デフォルト値は6
です。
その他
option_file_name
: IPOPTのオプションファイル名を指定します。デフォルト値は"ipopt.opt"
です。mu_strategy
: バリアパラメータ(mu)を更新する方法です。"monotone"
: 単調に増加させます(デフォルト)。"adaptive"
: 適応的な方法で増加させます。