線形計画法(せんけいけいかくほう、英語: linear programming、略称: LP)は、数理計画法において、いくつかの1次不等式および1次等式を満たす変数の値の中で、ある1次式を最大化または最小化する値を求める方法である。線形計画法の対象となる最適化問題を線形計画問題という。
線型計画法はいくつかの理由で最適化の重要な分野である。オペレーションズリサーチの多くの実際的な問題は線型計画問題として記述できる。ある特殊なケースのネットワークフロー問題(英語版)や多品種流問題(英語版)といった線型計画問題はこれらを解くために特別なアルゴリズムを考案するに値するほど重要だと考えられている。他のタイプの最適化問題に使われる多くのアルゴリズムは線型計画法を解くことで代用できる。歴史的には、線型計画法の考えによって双対性、分割、凸解析の重要性や一般化のような最適化の主要な理論を引き起こした。
数学的には線型計画問題は、目的関数と制約条件がすべて線型の最適化問題である。
2変数 x 1 ( ≥ 0 ) {\displaystyle x_{1}(\geq 0)} 、 x 2 ( ≥ 0 ) {\displaystyle x_{2}(\geq 0)} の場合、与えられた定係数 a i j {\displaystyle a_{ij}\ } と b i {\displaystyle b_{i}\ } 、 c j {\displaystyle c_{j}\ } 、および不等式制約
の下、次式
の最大値およびそれを実現する x 1 {\displaystyle x_{1}\ } と x 2 {\displaystyle x_{2}\ } を求める問題が、典型的な線型計画問題である。
3変数 x 1 {\displaystyle x_{1}\ } 、 x 2 {\displaystyle x_{2}\ } 、 x 3 {\displaystyle x_{3}\ } の場合、3次元座標空間上に描かれた立体図形を切るような平面のうち、 x 3 {\displaystyle x_{3}\ } 切片(平面と x 3 {\displaystyle x_{3}\ } 軸との交点)の値が最大あるいは最小となるような平面を求めることになる。
最適解の取り得る範囲を整数に限定した線型計画法は、整数計画法と呼ばれる。
線型計画問題の例として以下の問題をとりあげる。農業を営む人が、小麦と大麦のための A {\displaystyle A\ } 平方キロメートルの農地を持っていると仮定する。農家は限度 F {\displaystyle F\ } で肥料、限度 P {\displaystyle P\ } で殺虫剤を使用することができる。これらはそれぞれ単位面積あたり小麦が ( F 1 , P 1 ) {\displaystyle (F_{1},P_{1})\ } 、大麦が ( F 2 , P 2 ) {\displaystyle (F_{2},P_{2})\ } を必要とする。小麦の販売価格を S 1 {\displaystyle S_{1}\ } 、大麦の販売価格を S 2 {\displaystyle S_{2}\ } 、小麦を育てる領域を x 1 {\displaystyle x_{1}\ } 、大麦を育てる領域を x 2 {\displaystyle x_{2}\ } とすると、線型計画問題として大麦と小麦をどれだけ育てればいいかを表すことができる。
幾何学的には線型(不)等式制約は実行可能領域と呼ばれる凸多面体を定義する。目的関数も線型なので、全ての局所最適解はおのずと(大域的)最適解になる。線型な目的関数であることによって、必然的に最適解は実行可能領域の境界上のみに現れる。
最適解が見つからない状況が2つある。1つは互いに矛盾のある制約(例えば、 x ≥ 2 {\displaystyle x\geq 2} と x ≤ 1 {\displaystyle x\leq 1} )ならば実行可能領域は空になり、最適解は存在しえない。最適解が得られないのでこの場合はLPは実行不能と呼ばれる。
もう1つの状況は、多面体が目的関数の向きに境界を持たない場合(例:最大化: x 1 + 3 x 2 {\displaystyle x_{1}+3x_{2}\ } 制約: x 1 ≥ 0 , x 2 ≥ 0 , x 1 + x 2 ≥ 10 {\displaystyle x_{1}\geq 0,x_{2}\geq 0,x_{1}+x_{2}\geq 10} )である。この場合、目的関数はいくらでも大きい値を取り得る。
これらの2つの正常ではない条件(これらは多くの場合は上限を設けるなど問題の不可欠な制約によって除外される)がなければ、最適解は必ず多面体の頂点(正確には最小次元面)にある。しかしながら最適解は唯一とは限らない。多面体の辺や面が最適解の集合となる事があるし、最適解が多面体の全体となる(目的関数が一律に0に等しいときに現れる)ことすらある。
シンプレックス法(単体法)は最適解が多面体の頂点に現れることを利用し、最適解に達するまで多面体の辺をたどってより高い目的関数の値を次々にたどることで線型計画問題を解く。このアルゴリズムは実際にかなり能率のいいもので、巡回していないか(巡回してしまうと最適解に到達することができない)に注意を払えば(大域的)最適解を見つけることが保証される。シンプレックス法は、用いるピボット規則により性能が左右される。有限回のピボットで終了することが保証されている規則として、Blandの提案した最小添字規則が知られている。ダンツィーグの提案したピボット規則は問題の規模にたいして指数時間かかる問題例があることが知られている。現在のところ、線型計画問題を多項式時間で解くピボット規則の存在性は未解決問題である。
線型計画問題を最悪の場合でも多項式時間で解くアルゴリズムがレオニード・カチヤン(英語版)によって1979年に初めて提案された。そのアルゴリズムはナウム・ショールの非線形最適化に対する楕円体法(これはアルカディ・ネミロフスキー(英語版)とDmitri Yudinが一般化して、2003年にジョン・フォン・ノイマン理論賞を受賞した凸最適化の楕円体法)をベースにしていた。
しかしカチヤンのアルゴリズムの実用性は期待はずれで、一般にシンプレックス法の方が効率的である。このアルゴリズムの主な重要性は、アルゴリズムの多項式性を示す証明手段を提供したことと、内点法の研究を促進したことにある。実行可能領域の辺のみを探索するシンプレックス法に対し、内点法は実行可能領域の内部を動くアルゴリズムとなっている。
1984年にナレンドラ・カーマーカーはカーマーカー法(射影変換法)を提案した。この方法は理論上でも実際でもいい結果の得られる最初のアルゴリズムで、最悪の場合でも多項式時間で解くことができ、実際の問題ではシンプレックス法と比べてかなり効率的に解くことができることが示されている。それ以降は多くの内点法が提案されて研究されている。よく使われる内点法にはメロートラの予測子・修正子法と小島・水野・吉瀬の主双対内点法がある。
すぐれた実装のシンプレックス法と内点法の効率は、線型計画法の応用としてはっきりした優劣は無いというのが現在の見解である。しかしながら、目的関数や右辺項が僅かに変動した問題の最適化を繰り返し行う際は、シンプレックス法が優れている。
LPのソルバーは、輸送におけるネットワークフロー問題(線型計画問題として定式化できる)のような産業のさまざまな問題の最適化のために広く普及している。