この記事について
実務で最適化問題を扱おうとすると Gurobi、CPLEX、OR-Tools、PuLP…と選択肢が多すぎて、正直何を使えばよいかわからなくなることもあるかと思います。
この記事では Gurobi・CPLEX・MOSEK・SCIP・HiGHS・PuLP・Python-MIP・OR-Tools・CP-SAT の9ツールを概要・特徴・用途の観点で比較します。(割とよく耳にするツールを選んだつもりです。)
「どれを使えばいいかわからない」という方の出発点になれば幸いです。
なお、本記事は各ツールの入口を紹介するもので、実装の詳細は公式ドキュメント等をご参照ください。
ソルバーの全体像
まず、この9ツールを役割で整理するとスッキリします。
┌─────────────────────────────────────────────────────────┐
│ モデリング層(Pythonから書く部分) │
│ PuLP / Python-MIP / OR-Tools │
└──────────────────────┬──────────────────────────────────┘
│ 呼び出す
┌──────────────────────▼──────────────────────────────────┐
│ ソルバー本体 │
│Gurobi / CPLEX / MOSEK / SCIP / HiGHS / CP-SAT / OR-Tools│
└─────────────────────────────────────────────────────────┘
- ソルバー本体:実際に最適化計算を行うエンジン
- モデリング層:問題をプログラミング言語で記述し、バックエンドのソルバーに渡すライブラリ
PuLPやPython-MIPは「自力では解かない」ことに注意が必要です。これらはモデルを記述する言語であり、実際の計算はGurobi・SCIP・HiGHS等に委ねます。
OR-Toolsだけは特殊で、モデリング層とソルバーの両方を兼任してるイメージです。
(一応Gurobi等もモデリング層のツールを提供していますが、ソルバーとしてのイメージが強いので。)
カテゴリ別ツール概要
① 商用MIP・LPソルバー
Gurobi
- 開発:Gurobi Optimization LLC(米国)
- 対応問題:LP / MIP / QP / SOCP / 非凸二次計画
- ライセンス:商用(有償)。学術ライセンスは無償申請可
- 特徴:業界最速クラスのMIPソルバー。物流・金融・製造業での実績多数。PuLP・Python-MIP等のバックエンドとしても利用可能。クラウドAPIあり
CPLEX(IBM ILOG CPLEX)
- 開発:IBM(米国)
- 対応問題:LP / MIP / QP / CP
- ライセンス:商用(有償)。IBM Academic Program で学術利用無償
- 特徴:GurobiとともにMIPの双璧。制約プログラミング(CP Optimizer)も内包しているため、スケジューリングにも強いらしい。
MOSEK
- 開発:MOSEK ApS(デンマーク)
- 対応問題:LP / QP / SOCP / SDP(半正定値計画)/ MIP
- ライセンス:商用(有償)。学術ライセンスは無償
- 特徴:錐最適化(Conic Optimization)が強い。SOCP・SDPに特化しており、機械学習・ポートフォリオ最適化・信号処理分野で多用される。
② 無料MIP・LPソルバー
SCIP
- 開発:Zuse Institute Berlin(ZIB、ドイツ)
- 対応問題:LP / MIP / MINLP(混合整数非線形計画)
- ライセンス:Apache 2.0(商用利用可)
-
特徴:無料で使えるMIPソルバーの中でトップクラスの性能。MINLPにも対応しており研究用途での利用が多い。Pythonからは
pyscipoptで利用可
HiGHS
- 開発:University of Edinburgh(英国)
- 対応問題:LP / MIP
- ライセンス:MIT License(完全無料)
- 特徴:近年急速に性能が向上し、大規模LPでは商用ソルバーに迫るケースもあるらしい。scipy.optimize.linprog の最新デフォルトバックエンド(method='highs')。PuLPからも呼び出せる。
③ Pythonモデリング層
PuLP
- 開発:オープンソース(MIT License)
- 対応問題:LP / MIP(モデリング層)
- 特徴:最もシンプルで入門に向いているPythonモデリングライブラリ。デフォルトバックエンドはCBC(COIN-OR)で、Gurobi・CPLEX・SCIP・HiGHSへの切り替えも可能。非線形・QP・SOCPには非対応
Python-MIP
- 開発: Federal University of Ouro Preto(EPL-2.0) https://www.python-mip.com/
- 対応問題:LP / MIP(モデリング層)
- 特徴:PuLPに似た文法だが、CBCへの低レベルアクセスで高速化。pip installだけでCBCも同梱されるので環境構築がシンプル。Gurobiへの切り替えも1行で可能。
④ 組合せ最適化・制約プログラミング
OR-Tools(Google OR-Tools)
- 開発:Google(Apache 2.0)
- 対応問題:LP / MIP / VRP・配送計画問題 / 制約プログラミング(CP-SATを内包)
- 特徴:LP・VRP/TSP(ルーティングモジュール)・CP-SATを1ライブラリで提供。特に配送計画問題(VRP)に非常に強い
CP-SAT
- 開発:Google(OR-Toolsの一部、Apache 2.0)
- 対応問題:制約プログラミング(CP) / スケジューリング / 整数最適化
- 特徴:SATベースのCPソルバー。スケジューリング・割り当てに特に強力で、近年は大規模問題でも優れた性能を発揮
全ツール比較一覧表
| ツール | カテゴリ | 費用 | LP | MIP | 非線形 | CP/ルーティング | 主な用途 |
|---|---|---|---|---|---|---|---|
| Gurobi | 商用ソルバー | 有償(学術無償) | ✓ | ✓ | QP/SOCP | − | 大規模MIP・物流・金融 |
| CPLEX | 商用ソルバー | 有償(学術無償) | ✓ | ✓ | QP | CP Optimizer | 大規模MIP・スケジューリング |
| MOSEK | 商用ソルバー | 有償(学術無償) | ✓ | ✓ | SOCP/SDP | − | 錐最適化・ML・ポートフォリオ |
| SCIP | 無料ソルバー | 無料 | ✓ | ✓ | MINLP | − | 学術研究・MINLP |
| HiGHS | 無料ソルバー | 無料 | ✓ | ✓ | − | − | 大規模LP・scipy連携 |
| PuLP | モデリング層 | 無料 | ✓ | ✓ | − | − | 入門・小〜中規模MIP |
| Python-MIP | モデリング層 | 無料 | ✓ | ✓ | − | − | PuLPからの移行・高速化 |
| OR-Tools | 組合せ最適化 | 無料 | ✓ | ✓ | − | VRP/TSP/CP | 配送ルーティング・CP |
| CP-SAT | 制約プログラミング | 無料 | − | ✓ | − | CP/スケジューリング | スケジューリング・割り当て |
用途別の選び方
「とりあえずMIPをPythonで解いてみたい」
→ PuLP(pip installだけで始められる。入門向け)
→ 慣れてきたら Python-MIP や HiGHS(より高速)
「大規模なMIPを本気で解きたい(実務)」
→ Gurobi または CPLEX(商用ライセンスが必要だが性能は段違い)
→ 無料で済ませるなら SCIP(MINLPも対応)または HiGHS(LP中心)
「配送ルーティング(TSP・VRP)を解きたい」
→ OR-Tools(VRP特化モジュールあり)
「スケジューリング・シフト割り当てをやりたい」
→ CP-SAT(無料・高性能)
「錐最適化(SOCP・SDP)や機械学習の最適化をやりたい」
→ MOSEK
「まずはお金をかけずに試したい」
→ HiGHS / SCIP / OR-Tools / CP-SAT のいずれか
まずは無料ツールで問題の構造をつかんでおき、性能が足りなくなったら商用ソルバーへ移行するのが無難かと思います。
意外とあまり知らないなぁ。。。笑
分類とかAIに頼りきりだったけどそんなもんかな。。。