列生成または遅延列生成は、大規模な線形計画問題を解くための効率的なアルゴリズムです。[ 1 ]
基本的な考え方は、多くの線形計画問題は大きすぎて、すべての変数を明示的に考慮することができないという点です。そこで、まず対象となる計画問題を、変数のサブセットのみを使用して解くことから始めます。次に、目的関数を改善する可能性のある変数を、繰り返し計画問題に追加していきます。新しい変数を追加しても目的関数の値が改善されないことが証明できたら、この手順は終了します。列生成アルゴリズムを適用する際の期待は、ごくわずかな変数のみが生成されることにあります。この期待は、最適解ではほとんどの変数が非基底変数であり、値がゼロになるため、それらの変数なしで最適解を見つけることができるという事実によって裏付けられています。
多くの場合、この手法を用いることで、そうでなければ解決困難な大規模な線形計画問題を解くことが可能になります。この手法が効果的に用いられている典型的な例として、切断在庫問題が挙げられます。線形計画法においてこの種のアプローチを用いる手法の一つに、ダンツィヒ・ウォルフ分解アルゴリズムがあります。さらに、列生成法は、乗務員スケジューリング、車両経路決定、容量制約付きp-中央値問題など、多くの問題に適用されています。
このアルゴリズムは、主問題と副問題の2つの問題を考慮します。主問題とは、変数の一部のみを考慮した元の問題です。副問題とは、主問題の目的関数を改善できる変数(つまり、目的関数を改善できる変数)を特定するために新たに作成された問題です。
アルゴリズムはその後、以下のように進行する。
この手順で最も難しいのは、マスター問題の目的関数を改善できる変数を見つけることです。これは、最も負の縮約コストを持つ変数を見つけることで可能です(一般性を失うことなく、問題が最小化問題であると仮定します)。負の縮約コストを持つ変数がない場合、マスター問題の現在の解は最適解となります。
変数の数が非常に多い場合、すべての縮約コストを計算して負の縮約コストを持つ変数を選択することで改善変数を見つけることは不可能です。そのため、縮約コストが最小となる変数のみを計算するという方法が考えられます。これは、元の問題の構造に大きく依存する価格設定部分問題と呼ばれる最適化問題を用いることで実現できます。部分問題の目的関数は、現在の双対変数に対する探索対象変数の縮約コストであり、制約条件は、変数が自然発生的な制約条件を満たすことを要求します。この構造によって部分問題を効率的なアルゴリズム(通常は専用の組み合わせアルゴリズム)で解くことが可能になる場合、列生成法は特に効率的です。
次に、変数の縮約費用を計算する方法と理由について詳しく説明します。標準形式の以下の線形計画問題を考えてみましょう。
さらに、そしてこれらは、任意の線形ソルバーによって提供される、これら 2 つの問題の最適解です。これらの解は、線形計画の制約を満たし、双対性により、目的関数 ( ) の値が同じになります。) それをこの最適値は、主問題のさまざまな係数の関数である。双対変数が存在することに注意してください。主線形モデルの各制約に対して、最適な双対変数が最適値の偏微分として解釈できる係数に関する目的関数制約条件の右辺について:またはその他もっと簡単に言うと、係数が の場合に目的関数の最適値が局所的にどれだけ増加するかを示します1単位増加する。
ここで変数を考えてみましょうそれまで主問題では考慮されていなかった。これは、変数がモデルには存在していたが、値はゼロだった。次に、の値を変更した場合の主問題への影響を観察する。からに。 もしそしてはそれぞれ、変数に関連付けられた係数です。目的関数と制約条件が変更された場合、線形計画問題は次のように修正されます。
変数を追加することが興味深いかどうかを知るために問題に対して(つまり、ゼロ以外の値をとるように)、その値がこの新しい問題の目的関数の値は、変数の増加します。言い換えれば、私たちは知りたいのですこれを行うには、次の点に注意してください。初期主問題の目的関数の値に応じて表現できる。すると、我々が関心のある導関数を計算できる。
言い換えれば、価値の変化の影響価値についてこれは2つの用語に翻訳されます。まず、この変更は目的関数に直接影響を与え、次に、制約条件の右辺が変更され、それが最適変数に影響を与えます。その大きさは双対変数を用いて測定される導関数一般的には、変動費の削減コストと呼ばれます。そして、で表されます以下に記載します。