2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事について

実務で最適化問題を扱おうとすると 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-MIPHiGHS(より高速)

「大規模なMIPを本気で解きたい(実務)」

Gurobi または CPLEX(商用ライセンスが必要だが性能は段違い)
→ 無料で済ませるなら SCIP(MINLPも対応)または HiGHS(LP中心)

「配送ルーティング(TSP・VRP)を解きたい」

OR-Tools(VRP特化モジュールあり)

「スケジューリング・シフト割り当てをやりたい」

CP-SAT(無料・高性能)

「錐最適化(SOCP・SDP)や機械学習の最適化をやりたい」

MOSEK

「まずはお金をかけずに試したい」

→ HiGHS / SCIP / OR-Tools / CP-SAT のいずれか


まずは無料ツールで問題の構造をつかんでおき、性能が足りなくなったら商用ソルバーへ移行するのが無難かと思います。
意外とあまり知らないなぁ。。。笑
分類とかAIに頼りきりだったけどそんなもんかな。。。

参考にした記事や本、論文等

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?