Python での整数計画法
整数計画問題は、問題に関係する変数の一部またはすべてが整数であることを提供することによって、数学的最適化または実現可能性を確保するために構築された問題です。
問題のいくつかの決定変数が離散的ではないことが判明したとします。 その場合、それらは混合整数問題として分類され、より一般的には MIP/MILP
(混合整数線形計画法) として知られています。
そのため、この Python の記事では、Python でこの種の問題を解決するために使用できるさまざまな方法論とライブラリについて説明します。
Python における混合整数プログラミングの問題
混合整数計画法 (MIP
) 問題は、いくつかの決定変数が最適解のために厳密に整数値であることが保証される問題です。
これらの整数変数を使用すると、プログラマが最も効率的かつ正確に定義して解決するために使用できる有用な最適化問題の範囲とスコアが広がります。
MIP
の重要なシナリオは、バイナリと見なされる決定変数です。 つまり、0
または 1
としてのみ表すことができます。
これらは通常、バイナリ整数値と呼ばれます。 これらの決定変数は通常、慎重な計算に基づいて True
/False
または Yes
/No
の決定をモデル化するために使用されます。
現在、この種の問題に対処するために設計されたソルバーがいくつかあります。
これらには、最新の Gurobi
と Python-MIP
が含まれます。これらは、最も一般的に知られ、人気のある混合整数線形計画法ソルバーの 1つです。
別の高度に構成可能な MIP
ソルバーは、CBC
または COIN-OR Branch-&-Cut
ソルバーです。 最後に、Python-MIP
を使用すると、カスタム アプリケーション向けの高性能な MIP ベースのソルバーを簡単に開発できます。
これは、ハイエンドで最新の機能を提供します。詳細については、以下で説明します。
MIP/MILP
用の Python ツール: Python-MIP
Python には、MIP
と呼ばれる膨大なライブラリがあります。これは基本的に、混合整数線形計画法の問題をモデリングして解決するための Python ベースのツールのコレクションです。
MIP
は、Pulp
に大きく影響を受けた構文を使用して、lazy Constraint
、MIPstart
、solution pools
、および cut generation
などの高度で効率的な機能へのアクセスをユーザーに提供します。
その顕著な機能の多くは次のとおりです。
-
高レベルのモデリング
ほとんどのプログラマーは、簡単な高水準プログラミング言語を使用してモデリングのスキルを身につけています。 ただし、Python で
MIP モデル
をすばやく作成できます。演算子のオーバーロード機能により、Python で線形式を記述するプロセス全体がはるかにスムーズになります。
-
機能満載
カット ジェネレーター
や遅延制約
などの機能を使用すると、プログラマーは多くの制約を使用して固体の定式化を処理できます。branch and cut
検索中に必要な不等式のみを生成します。 次に、追加するために、ソリューション プール
にクエリを実行して、検索中に見つかった一流のソリューションを抽出または調べることができます。さらに、
MIPstart
を使用すると、プログラマは最初に問題依存のヒューリスティックを利用して、MIP
検索の実行可能なソリューションを作成できます。 -
高速で効率的
Python の
MIP
パッケージは、CFFI モジュール
を使用して、既にインストールされているソルバーのネイティブで動的にロード可能なライブラリに直接呼び出し
を行います。これらのモデルは効率的に保存され、ソルバーによって効率化されます。 一方、
MIP
はコードとの通信を扱います。 公式のGurobi
Python インターフェイスもMILP
を処理する機能を提供しますが、Python のMIP
ライブラリはPypy
と互換性があります。そのパフォーマンスは
CPython
のみに基づいているため、25
倍高速に実行できます。 -
マルチソルブ
Python の
MIP
は、COIN-OR Branch-&-Cut
ソルバーやGurobi
のC ベース ライブラリ
と完全に統合されるように構築されています。MIP
を使用すると、Python-MIP
ライブラリで処理されるため、異なるソルバー間の通信手段を作成することを心配する必要はありません。ソルバーに依存しない単一のコードを記述するだけで済みます。
-
Pythonの最新バージョンを搭載
前述のように、
MIP
は Python バージョン 3.6 以降と互換性があるため、冗長性によって速度が低下することを心配する必要はありません。
これで、混合整数計画法とは何か、および最も効率的で有効に最適化された方法で解く必要がある整数計画問題をガイドするために使用できるさまざまなソルバーがわかりました。
特定の問題の解決策を見つけるために、言及されているすべてのソルバーの公式ドキュメントを調べることもできます。
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn