はじめに #
非線形問題を解くことができる最適化ソルバ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,pardiso,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": 適応的な方法で増加させます。