シンプレックス法

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

シンプレックス法(simplex method、単体法)は、1947年にG.B. Danzigが提案した、線型計画問題を解くアルゴリズムの中で最も広く使用されている方法である。線型計画法の1つ。

概要[編集]

シンプレックス法は、実行可能解(超多面体の頂点)の1つから出発して目的関数の値をなるべく大きく(小さく)するようなところに移動させていく動作を繰り返して最適解を見つけ出す方法である。各ステップで必ず目的関数の値は改善される。

このアルゴリズムは、実用上は高速。ほとんど常に、変数の数・条件式の数の大きな方のオーダーの回数だけ反復を繰り返せば解ける。そのことは、1982年に Stephen Smale が証明した。しかし、Danzig が提唱したもの(ピボット規則)は多項式時間で終了しない問題例がある。常に多項式時間で解が得られるピボット規則の存在性は、現在も未解決問題である。

単体法という名前は、Danzig が提案した特殊な図解法においては、アルゴリズムの進行に従って単体が下に落ちていくように見えることに由来する。

アルゴリズム[編集]

一般的な流れは以下のとおりである。

  1. 線型計画問題を制限標準型に変形する。
    1. スラック変数を加え、標準型に変形する。制約条件のうち、不等式を含む物がなくなり、全て等式となる。
    2. 人工変数を加え、制限標準型に変形する。等式化された問題の目的関数をzとおく。zを最大化(最小化)する線型計画問題にする。
  2. ここまで行った作業を基にシンプレックス表(Simplex Tableau、線型計画問題の係数を表にまとめたもの)を作成する。
  3. 式の数だけ基底変数を定める。目的関数zは必ず基底変数に選ばなければならない。
  4. 初期の基底変数から得られた連立方程式の解が最適かどうかを調べる。最適とみなすことができた場合は終了。終了しなかった場合は以下の作業をおこなう。
  5. 基底変数と非基底変数の組合せを変更する。
    1. 新たに基底変数にできそうな変数を非基底変数の中から選ぶ。複数存在する場合は、最も効果の高い変数を基底に選ぶ。(ピボット列の決定)
    2. 基底から追い出す変数を決める。増加限界(定数項の値から新たに基底に入れる変数の係数を割ったもの)によって変数を決めることが多い。 (ピボット行の決定)
    3. 新しい基底変数での連立方程式を解く。具体的にはピボットを中心に掃き出し法などで新たな実行可能解を求める。実行後は4.に戻り、同様の処理を繰り返す。

参考文献[編集]

このアルゴリズムを解説した書籍は多数ある。たとえば、Numerical Recipies in C (ISBN 4874085601) などにソースコード付きで解説が載っている。