JavaScriptを有効にしてください

最適化ソルバIPOPTの主要オプション解説

 ·   4 min read

はじめに

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

参考

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

サイト内検索