※記事内に商品プロモーションを含むことがあります。
はじめに
混合整数非線形問題を解くことができる最適化ソルバ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"