シンプレックス法の実装に関する最高の本?


14

私はLPタスクにSMを実装することに興味がありますが、落とし穴の可能性について聞いたことがあります。私はまた、素朴な実装が何らかの種類のデータに対してループする可能性があると聞きました。

SMの実際の実装のニュアンスを説明する本/論文/情報源はありますか?

前もって感謝します。


回答:


13

CPLEXの「父」であるBixbyの論文を強くお勧めします。この論文は、(改訂された)シンプレックスアルゴリズムの実装だけでなく、Robert E. Bixby現実世界の線形プログラムの解決:A Decade and More of ProgressOperations研究(50)2002、3-15


12

シンプレックスアルゴリズムはPにはありません。したがって、CLRSは、実際には「うまく」機能しているにもかかわらず、アルゴリズムを指数関数的に実行する入力がいくつかあると述べています。これは、その実装ではなく、アルゴリズムに厳密に関連しています。アルゴリズムの実装方法とは無関係に、これに直面します。ただし、LPはPにあります。これは1979年にKhachianによって証明されましたが、彼の楕円アルゴリズムは実用的ではありません。現在、内点法が広く使用されています。最初のものは、1984年にKarmarkarによって発見されました。

実際の実装に興味がある場合は、以下をご覧ください。

アカデミック版の無料のGUROBIは、現在利用可能な最適なオプティマイザーです(シーケンシャルバージョンと共有メモリパラレルバージョンの両方)。

http://www.gurobi.com

GLPKライブラリ:

http://www.gnu.org/software/glpk/

これは、以下の実装を提供するオープンソースプロジェクトです。

  • プライマリおよびデュアルシンプレックス法
  • プライマルデュアル内点法
  • 分枝法
  • GNU MathProgの翻訳者
  • アプリケーションプログラムインターフェイス(API)
  • スタンドアロンLP / MIPソルバー

12
確かに。演習の全体的なポイントでない限り、自分でシンプレックスを実装しようとしないことを強くお勧めします。単に使用したい場合は、既製の方法がはるかに優れています。また、CPLEXはあなたに適している場合、アカデミックな使用は無料です。
スレシュヴェンカト

1
LPのオープンソース実装(MPIなど)はありますか?
トメクTarczynski

3
@Tomek LPはP完全であり、効率的な並列化を行うことはほとんどありません。
マーカスリット

@Tomek:Simphonyは、PVMメッセージパッシングプロトコルでサポートされている環境で現在実行されている分散バージョンを提供します(MPIはまだサポートされていません)。同じソースコードも参照してください。..どんなのOpenMP互換コンパイラを使用して、共有メモリ・アーキテクチャ用にコンパイルすることができbranchandcut.org:と強く関連COIN-ORウェブサイトcoin-or.org
マッシモCafaro

9
CPLEXは、おそらく現在利用可能なLPの最高の実装です(そのため人々は多くのお金を払っています)。これには、Mathematical、Maple、およびMATLABパッケージが含まれます。かなり優れた無料のもの(QSopt、商用目的で使用する予定がない場合は無料)など、さまざまな実装があります。そのため、自分でプログラミングすることは学習体験にのみ価値があります。
ピーターショー

9

Vanderbeiの線形プログラミングのは、低レベルの詳細の多くを詳しく説明しています...しかし、他の回答/コメントが示唆するように、LPソルバーの実装は困難であり、感謝のないタスクです。市販のソルバーはおそらく行く方法です...(オープンソースのLPソルバーもいくつかあります...)


6

指数関数的な時間で動作するのは、単純な実装だけではありません。実際、既知の決定論的およびランダム化されたルールはすべて、スーパー多項式の最悪ケースの入力を持っていると思います。この最悪の場合の動作を引き起こす既知の入力のほとんどは高度に構造化されており、関連する質問です。

シンプレックスアルゴリズムの病理学的インスタンスの構造

ただし、実際にはSMはうまく機能します。これは、入力がわずかに乱れた基本的に最悪のケースの分析である平滑化分析の導入によって形式化されました。この分析では、SMはポリタイムです。つまり、すべての入力(病理学的入力を含む)に対して、わずかな摂動が存在するため、アルゴリズムが良好に機能します。この洞察は、ポリタイムで実行されるランダム化アルゴリズムに変換されました。ただし、私が理解している限り、このアルゴリズムが「真の」シンプレックスアルゴリズムとして適格であるかどうかについては、まだ議論があります。また、標準パッケージがこれに沿って何かを実装するかどうかは知りませんが、5歳以上であるため、検索するといくつかの実装を見つけることができるはずです。


1

Luenberger、Ye、Linear and Nonlinear Programming、3rd edをチェックするかもしれません。それはかなり包括的なように見えますが、あなたの質問に完全に答えているかどうかを言うにはまだ十分ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.