
数学的最適化において、ダンツィヒのシンプレックス法(またはシンプレックス法)は線形計画法のアルゴリズムである。[ 1 ]
このアルゴリズムの名前は単体の概念に由来し、 TS Motzkinによって提案されました。[ 2 ]この方法では単体は実際には使用されませんが、単体錐上で動作し、追加の制約によってこれらが適切な単体になるという解釈があります。[ 3 ] [ 4 ] [ 5 ] [ 6 ]問題となる単体錐は、多面体と呼ばれる幾何学的オブジェクトの角(つまり、頂点の近傍)です。この多面体の形状は、目的関数に適用される制約によって定義されます。
ジョージ・ダンツィヒは第二次世界大戦中、机上計算機を使って米陸軍航空隊の計画手法に取り組んでいた。1946年、同僚が彼に計画プロセスを機械化するよう提案し、別の仕事に就くのを思いとどまらせようとした。ダンツィヒはワシリー・レオンチェフの研究に触発されて問題を線形不等式として定式化したが、当時は目的を定式化に含めていなかった。目的がなければ、膨大な数の解が実行可能となり、そのため「最良」の実行可能な解を見つけるには、目標そのものを指定するのではなく、目標をどのように達成できるかを記述する軍事規定の「基本ルール」を使用する必要がある。ダンツィヒの核心的な洞察は、そのような基本ルールのほとんどが最大化する必要のある線形目的関数に変換できることに気づいたことだった。[ 7 ]シンプレックス法の開発は漸進的で、約1年かけて行われた。[ 8 ]
ダンツィヒが1947年半ばに目的関数を定式化の一部として組み込んだ後、この問題は数学的に扱いやすくなった。ダンツィヒは、教授のイェジー・ネイマンの授業で宿題と勘違いしていた未解決問題(実際には後に解決した)が、線形計画法のアルゴリズムを見つけるのに応用できることに気づいた。この問題は、 0から1の間にある連続変数の一般線形計画法に対して、ルベーグ積分の形で表現された線形制約を満たすラグランジュ乗数の存在を見つけることであった。ダンツィヒは後にこの「宿題」を博士号取得のための論文として発表した。この論文で使用された列幾何学は、ダンツィヒにシンプレックス法が非常に効率的であると確信させる洞察を与えた。[ 9 ]


シンプレックス法は、標準形式の線形計画問題に対して作用する。
と目的関数の係数、はドットプレースホルダー付きの行列転置であり、問題の変数は、はp × n行列であり、任意の線形計画問題を標準形式に変換する簡単な手順が存在するため、この形式の線形計画問題を使用しても一般性が失われることはありません。
幾何学的に言えば、すべての値によって定義される実行可能領域はそのためそしてこれは(境界を持たない場合もある)凸多面体です。この多面体の極点または頂点は、基本実行可能解(BFS)として知られています。
標準形式の線形計画問題において、目的関数が実行可能領域で最大値をとる場合、その値は(少なくとも)極点の1つで存在することが示せる。[ 10 ]極点の数が有限であるため、それ自体で問題は有限計算に縮小されるが、極点の数は最小の線形計画問題を除いては扱いきれないほど大きい。[ 11 ]
また、極点が目的関数の最大値でない場合、その点を含む辺が存在し、その辺上で目的関数の値が点から離れるにつれて厳密に増加することも示せる。[ 12 ]辺が有限であれば、その辺は目的関数の値がより大きい別の極点に接続している。そうでなければ、辺上で目的関数は上限がなく、線形計画問題には解がない。シンプレックス法はこの洞察を応用し、多面体の辺に沿って目的関数の値がどんどん大きくなる極点へと進んでいく。これは最大値に達するか、上限のない辺を訪れるまで続く(問題に解がないと結論付ける)。多面体の頂点の数は有限であるため、アルゴリズムは常に終了する。さらに、頂点間を常に同じ方向(目的関数の方向)にジャンプするため、訪れる頂点の数は少なくなると期待される。[ 12 ]
線形計画問題の解法は 2 つのステップで行われます。最初のステップ (フェーズ I) では、開始極値点を見つけます。プログラムの性質によってはこれは自明な場合もありますが、一般的には元のプログラムの修正版にシンプレックス法を適用することで解くことができます。フェーズ I の結果として考えられるのは、基本実行可能解が見つかるか、実行可能領域が空であるかのいずれかです。後者の場合、線形計画問題は実行不可能と呼ばれます。2 番目のステップ (フェーズ II) では、フェーズ I で見つかった基本実行可能解を開始点として使用してシンプレックス法を適用します。フェーズ II の結果考えられるのは、最適な基本実行可能解が得られるか、目的関数が上方に有界でない無限のエッジが得られるかのいずれかです。[ 13 ] [ 14 ] [ 15 ]
線形計画問題を標準形式に変換するには、次のようにします。[ 16 ]まず、下限が0以外の各変数について、その変数と下限との差を表す新しい変数を導入します。次に、元の変数を代入によって消去します。例えば、制約条件が与えられた場合、
新しい変数、は、
2番目の式は消去するために使用できます線形計画問題から。このようにして、すべての下限制約を非負制約に変更することができる。
第二に、残りの各不等式制約に対して、制約を等式制約に変更するために、スラック変数と呼ばれる新しい変数が導入されます。この変数は不等式の両辺の差を表し、非負であると仮定されます。たとえば、不等式
に置き換えられます
この形式の不等式では、代数的な操作を行うのがはるかに容易です。2番目の不等式のように≥が現れる不等式では、一部の著者は導入された変数を余剰変数。
第三に、制約のない変数を線形計画から消去します。これには2つの方法があります。1つは、その変数が現れる方程式のいずれかで変数を解き、代入によって変数を消去する方法です。もう1つは、その変数を2つの制約付き変数の差で置き換える方法です。たとえば、制限がない場合は、次のように記述します。
この方程式は、線形計画問題から。
このプロセスが完了すると、実行可能領域は次の形式になります。
また、ランクがは行数です。これにより、一般性が失われることはありません。そうでなければ、システム冗長な方程式があり、それを削除できるか、システムが矛盾しており、線形計画法に解がない。[ 17 ]
標準形式の線形計画問題は、次の形式のタブローとして表すことができる。
最初の行は目的関数を定義し、残りの行は制約条件を指定します。最初の列のゼロは、ベクトルと同じ次元のゼロベクトルを表します。(著者によって正確なレイアウトに関する慣例が異なる)。列が次数 の単位行列を含むように並べ替えることができる(行数) の場合、タブローは標準形であると言われます。[ 18 ]単位行列の列に対応する変数は基本変数と呼ばれ、残りの変数は非基本変数または自由変数と呼ばれます。非基本変数の値を 0 に設定すると、基本変数の値はエントリとして簡単に得られます。そしてこの解は基本的な実行可能解です。ここでの代数的解釈は、各行で表される線形方程式の係数が次のいずれかであるということです。、、または他の数値。各行には値を持つ列、係数を含む列、そして残りの列には他の係数(これらの他の変数は非基本変数を表します)が含まれます。非基本変数の値をゼロに設定することで、各行で、で表される変数の値がその列はその行の値。
逆に、基本的な実行可能解が与えられた場合、非ゼロ変数に対応する列は非特異行列に展開できる。対応するタブローに逆数を掛けると、すると、結果として正統的な形式のタブローが得られる。[ 19 ]
させて
正統的な形式のタブローである。目的関数から係数c T Bを除去するために、追加の行追加変換を適用できます。このプロセスはプライシングアウトと呼ばれ、正準表が得られます。
ここで、z Bは対応する基本実行可能解における目的関数の値です。更新された係数(相対コスト係数とも呼ばれる)は、非基本変数に関する目的関数の変化率です。[ 14 ]
基本実行可能解から隣接する基本実行可能解へ移動する幾何学的操作は、ピボット操作として実装されます。まず、非基本列で非ゼロのピボット要素を選択します。この要素を含む行にその逆数を掛けてこの要素を 1 に変更し、次にその行の倍数を他の行に追加して列の他のエントリを 0 に変更します。結果として、ピボット要素がr行にある場合、その列は単位行列のr番目の列になります。この列の変数は基本変数となり、操作前の単位行列のr番目の列に対応していた変数と置き換わります。実際には、ピボット列に対応する変数が基本変数の集合に入り、入ってくる変数と呼ばれ、置き換えられる変数は基本変数の集合から出てきて、出ていく変数と呼ばれます。タブローは依然として標準形ですが、基本変数の集合が 1 つの要素だけ変更されています。[ 13 ] [ 14 ]
線形計画問題が標準タブローで与えられるとする。シンプレックス法は、それぞれ改善された基本実行可能解を与える連続的なピボット操作を実行することによって進行する。各ステップにおけるピボット要素の選択は、主にそのピボットが解を改善するという要件によって決定される。
以下のセクションでは、目的関数の最大値を求めることに焦点を当てます。最小値を求める場合は、目的関数へのすべての参照を否定することでアルゴリズムを修正できます。
入力変数は一般に 0 から正の数に増加するので、導関数 (つまり係数) が増加すると目的関数の値は増加し (最大値に近づきます)、この変数に関する目的関数の ) は正です。したがって、目的行 () タブローの ) は負の値です。(目的関数を最小化する場合は、目的関数の行のエントリが正の値である列を選択します。)
目的行には通常、負のエントリを持つ列が複数あり、基本変数セットに追加する列の選択は、Devexアルゴリズム[ 21 ]などのいくつかの入力変数選択ルール[ 20 ]のいずれかによってガイドされます。
目的行のどの項目も負でない場合、入力変数を選択することはできず、解は実際には最大値になります。目的行が次の形式の方程式に対応するため、これが最大値であることは容易にわかります。
ピボット列が選択されたら、ピボット行の選択は、結果として得られる解が実行可能であるという要件によって大きく左右されます。まず、ピボット列の正の値のみが考慮されます。なぜなら、正の値のみが入力変数の値に制限をもたらすからです。ピボット列に正の値がない場合、入力変数は任意の非負の値を取ることができ、解は実行可能のままです。この場合、目的関数は上限がなく、最大値も存在しません。
次に、ピボット行は、他のすべての基本変数が非負のままであるという条件の下で、投入変数(したがって目的の改善)が最大値をとるように選択する必要があります。ピボット列がcの場合、ピボット行r を次のように選択すると、これが実現します。
は、すべてのrの中で最小値であり、> 0。これは最小比率テストと呼ばれます。[ 20 ]最小値が達成される行が複数ある場合は、変数選択ルール[ 22 ]を使用して決定することができます。
線形計画法を考える
スラック変数sとtを追加すると、これは正準表で表されます。
ここで、5列目と6列目は基本変数sとtを表し、対応する基本実行可能解は
2列目、3列目、4列目をピボット列として選択できます。この例では、4列目を選択したとします。2行目と3行目をピボット行として選択した場合のz の値は、それぞれ10/1 = 10と15/3 = 5です。これらのうち最小値は5なので、3行目をピボット行にする必要があります。ピボットを実行すると、次のようになります。
ここで、4列目と5列目は基本変数zとsを表し、対応する基本実行可能解は次のようになります。
次のステップでは、目的行に負のエントリはなく、実際には
したがって、 Zの最大値は20です。
一般に、線形計画問題は標準形式では与えられず、シンプレックス法を開始する前に、等価な標準タブローを見つける必要があります。これは、人工変数を導入することで実現できます。単位行列の列は、これらの変数の列ベクトルとして追加されます。制約方程式の b の値が負の場合、単位行列の列を追加する前に方程式を負にします。これにより、実行可能解の集合や最適解は変更されず、スラック変数が初期実行可能解を構成することが保証されます。新しいタブローは標準形式ですが、元の問題とは等価ではありません。そこで、人工変数の合計に等しい新しい目的関数が導入され、最小値を見つけるためにシンプレックス法が適用されます。修正された線形計画問題は、フェーズ I問題と呼ばれます。[ 23 ]
フェーズ I の問題に適用されるシンプレックス アルゴリズムは、新しい目的関数が非負変数の合計であるため、その値が 0 で下限が定められていることから、最小値で終了する必要があります。最小値が 0 の場合、結果として得られる正準表から人工変数を削除して、元の問題と同等の正準表を作成できます。次に、シンプレックス アルゴリズムを適用して解を見つけることができます。このステップはフェーズ IIと呼ばれます。最小値が正の場合、人工変数がすべてゼロであるフェーズ I の問題には実行可能な解がありません。これは、元の問題の実行可能領域が空であることを意味し、したがって元の問題には解がありません。[ 13 ] [ 14 ] [ 24 ]
線形計画法を考える
これは、不等式制約ではなく等式制約を持つ点で、前の例とは異なります。前のソリューション最初の制約に違反する。この新しい問題は、(非正準)タブローによって表される。
人工変数uとvおよび目的関数W = u + vを導入し、新しいタブローを作成する。
フェーズIIを見越して、元の目的関数を定義する方程式は保持される。
構成上、uとvはどちらも初期単位行列の一部であるため、基本変数です。しかし、目的関数Wは現在、 uとvが両方とも0であると仮定しています。目的関数をu = 10、v = 15 の正しい値に調整するには、3行目と4行目を1行目に加えます。
列5をピボット列として選択すると、ピボット行は行4になり、更新されたTableauは次のようになります。
次に、列3をピボット列として選択します。この場合、行3がピボット行である必要があります。
人工変数はゼロとなり、これらを削除することで、元の問題と同等の標準的な表が得られる。
これは幸運にも既に最適値であり、したがって元の線形計画問題の最適値は130/7となります。この値は20よりも「悪い」値ですが、制約の多い問題では当然のことです。
アルゴリズムを説明するために上記で使用した表形式は、( m + 1)×( m + n + 1)の長方形配列として表形式を維持する即時実装に適しています。Bが[ A, I ]の列のサブセットであるため、表形式内に現れる単位行列のm個の明示的な列を格納する必要は容易に回避できます。この実装は「標準シンプレックス法」と呼ばれます。標準シンプレックス法は、ストレージと計算のオーバーヘッドが大きいため、大規模な線形計画問題を解くには非常にコストのかかる方法です。
各シンプレックス反復において、必要なデータは、表の最初の行、投入変数に対応する表の(ピボット)列、および右辺のみです。右辺はピボット列を使用して更新でき、表の最初の行は、離脱変数に対応する(ピボット)行を使用して更新できます。ピボット列とピボット行は、行列BとAを使用した行列ベクトル積を含む線形方程式系の解を使用して直接計算できます。これらの観察結果から、「改訂シンプレックスアルゴリズム」が考案され、その実装はBの可逆表現によって区別されます。[ 25 ]
大規模な線形計画問題では、A は通常疎行列であり、Bの可逆表現を維持する際に結果として生じる疎性を利用すると、修正シンプレックス法は標準シンプレックス法よりもはるかに効率的になります。商用シンプレックスソルバーは、修正シンプレックス法に基づいています。[ 24 ] [ 25 ] [ 26 ] [ 27 ] [ 28 ]
すべての基本変数の値が厳密に正である場合、ピボットによって目的値が改善されなければなりません。これが常に当てはまる場合、基本変数のセットが2回出現することはなく、シンプレックス法は有限ステップで終了しなければなりません。基本変数の少なくとも1つがゼロである実行可能な基本解は退化と呼ばれ、目的値が改善されないピボットにつながる可能性があります。この場合、解自体に変化はなく、基本変数のセットのみが変化します。このようなピボットが連続して複数回発生すると、改善はありません。大規模な産業用途では、退化は一般的であり、このような「停止」は注目に値します。停止よりも悪いのは、同じ基本変数のセットが2回出現する可能性があり、その場合、シンプレックス法の決定論的なピボット規則によって無限ループ、つまり「サイクル」が発生します。実際には退化が規則であり、停止は一般的ですが、サイクルは実際にはまれです。実際のサイクルの例についての議論はPadbergにあります。[ 24 ]ブランドのルールは 循環を防ぎ、シンプレックス法が必ず終了することを保証します。[ 24 ] [ 29 ] [ 30 ]もう一つのピボットアルゴリズムであるクロスアルゴリズムは、線形計画問題では決して循環しません。[ 31 ]
ザデーのルールやカニンガムのルールといった履歴ベースのピボットルールも、特定の変数がどれくらいの頻度で使用されているかを追跡し、使用頻度が最も低い変数を優先することで、停滞や循環の問題を回避しようとします。
シンプレックス法は実際には非常に効率的で、フーリエ・モツキン消去法などの以前の方法に比べて大幅に改善されました。しかし、1972年にKleeとMinty [ 32 ]は、Dantzigによって定式化されたシンプレックス法の最悪ケースの複雑さが指数時間であることを示したKlee-Mintyキューブという例を示しました。それ以来、この方法のほぼすべてのバリエーションについて、パフォーマンスが悪い線形計画のファミリーが存在することが示されています。準指数ピボットルールは知られていますが、多項式時間で動作するバリエーションが存在するかどうかは未解決の問題です。 [ 33 ]
2014年に、シンプレックス法の特定の変種がNP-mighty 、つまり、アルゴリズムの実行中に暗黙的にNPの任意の問題を多項式のオーバーヘッドで解くことができることが証明されました[ 34 ]。さらに、与えられた入力に対してアルゴリズムの実行中に特定の変数が基底に入るかどうかを判定することと、与えられた問題を解くために必要な反復回数を決定することは、どちらもNP困難問題です[ 34 ]。ほぼ同時期に、出力の計算がPSPACE完全である人工ピボットルールが存在することが示されました[ 35 ]。 2015年には、これが強化され、ダンツィヒのピボットルールの出力の計算がPSPACE完全であることが示されました[ 36 ]。
シンプレックス法は最悪ケースの複雑さが指数関数的であるにもかかわらず、実際には効率的であるという観察を分析し定量化することで、他の複雑さの尺度の開発につながった。シンプレックス法は、さまざまな確率分布の下で多項式時間の平均ケースの複雑さを持ち、シンプレックス法の正確な平均ケースのパフォーマンスは、ランダム行列の確率分布の選択に依存する。[ 37 ] [ 38 ] 「典型的な現象」を研究する別のアプローチでは、一般位相のベール圏論を使用し、(位相的に)「ほとんどの」行列はシンプレックス法によって多項式ステップで解けることを示す。
シンプレックスアルゴリズムの性能を分析するもう1つの方法は、小さな摂動の下での最悪シナリオの挙動を研究することです。つまり、最悪シナリオは小さな変化の下で安定しているか(構造的安定性の意味で)、それとも扱いやすくなるかを調べます。平滑化分析と呼ばれるこの研究分野は、特にシンプレックス法を研究するために導入されました。実際、ノイズのある入力に対するシンプレックス法の実行時間は、変数の数と摂動の大きさの多項式になります。[ 39 ] [ 40 ]
線形計画問題を解くための他のアルゴリズムについては、線形計画法の記事で説明されています。別の基底交換ピボットアルゴリズムは、交差アルゴリズムです。[ 41 ] [ 42 ]線形計画法には、内点法を使用する多項式時間アルゴリズムがあります。これには、Khachiyanの楕円体アルゴリズム、Karmarkarの射影アルゴリズム、およびパス追跡アルゴリズムが含まれます。[ 15 ] Big -M 法は、単相シンプレックスを使用して線形計画問題を解くための代替戦略です。Cohen ら[ 43 ]は、高速行列乗算アルゴリズムを線形計画法に適用するアルゴリズムのブランチの代表例です。
線形分数計画法(LFP) は、線形計画法(LP)の一般化です。LP では目的関数は 線形関数ですが、線形分数計画法の目的関数は 2 つの線形関数の比です。言い換えれば、線形計画法は、分母が常に 1 の定数関数である分数線形計画法です。線形分数計画法は、シンプレックス法の変種[ 44 ] [ 45 ] [ 46 ] [ 47 ]またはクロス法[ 48 ]で解くことができます。
Murty, Katta G. (1983).線形計画法. ニューヨーク: John Wiley & Sons, Inc. ISBN 978-0471097259. MR 0720547 .
これらの入門書は、コンピュータサイエンスとオペレーションズリサーチを学ぶ学生向けに書かれています。