はじめに #
混合整数非線形問題を解くことができる最適化ソルバSCIPの主要オプションについて解説します。
オプションの一覧は以下の公式サイトで公開されていますが、量が多いため、重要と思うものを抜き出しました。 SCIP Doxygen Documentation: List of all SCIP parameters
オプションを適用する場合、scip.setというテキスト形式のファイルに設定を記述し、カレントディレクトリに置きます。
以下に例を示します。
# scip.set
numerics/feastol = 1e-06
display/width = 143
branching/preferbinary = FALSE
lp/initalgorithm = s
nlpi/ipopt/linear_solver = "ma27"
#から始まる行はコメントとして無視されます。
オプションの値を=で示します。
指定する変数の型は上から順にreal, int, bool, char, stringとなります。stringの場合はダブルクォーテーションで囲みます。
また、SCIPのバージョンは9.1.1です。
収束判定 #
numerics/feastol(real): 収束したと判定するための許容誤差。デフォルト値は1e-06.limits/gap(real): 計算を終了する双対ギャップ(相対値)。デフォルト値は0.limits/absgap(real): 計算を終了する双対ギャップ(絶対値)。デフォルト値は0.
ログ出力 #
display/verblevel(int): コンソールに出力されるログの詳細度。0~5の間の整数で指定。デフォルト値は4.display/width(int): 1行あたりのログの最大文字数。0~2147483647の間の整数で指定。デフォルト値は143.
分枝限定法 #
branching/preferbinary(bool):TRUEの場合、バイナリ変数の分枝を優先する。デフォルト値はFALSE.nodeselection/childsel(char): 子ノードの選び方。h: ルートノードの線形問題値の差分によるハイブリッド推定(デフォルト)。p: 疑似コスト。i: 推定、などlimits/nodes(longint): 処理する最大ノード数。デフォルト値は-1(制限なし).
計算リソース #
limits/time(real): 最大実行時間(秒)。デフォルト値は1e+20.limits/memory(real): 最大メモリ使用量 (MB)。デフォルト値は8796093022207.parallel/mode(int): 並列計算モード。0: 非決定論的。1: 決定論的(デフォルト。再計算しても同じ結果が保証される)parallel/minnthreads(int): 並列計算の最小スレッド数。デフォルト値は1.parallel/maxnthreads(int): 並列計算の最大スレッド数。デフォルト値は8.
非線形ソルバ #
nlp/solver(string): 非線形ソルバを指定する。未指定の場合、デフォルトの優先順で使用する
IPOPTの設定 #
SCIPは非線形問題を解くためにIPOPTなどを含んでいます。IPOPTの設定もscip.setで可能です。
nlpi/ipopt/optfile(string): IPOPTのオプションファイル。デフォルト値は"".nlpi/ipopt/linear_solver(string): IPOPTの線形ソルバ("ma27","ma57","mumps"など)。デフォルト値は"".nlpi/ipopt/nlp_scaling_method(string): IPOPTのスケール変換("none","gradient-based","equilibration-based"など)。nlpi/ipopt/mu_strategy(string): IPOPTのバリアパラメータ更新ルール。"monotone","adaptive"nlpi/ipopt/hessian_approximation(string): IPOPTのヘッセ行列の近似。"exact","limited-memory"