18


10

線形計画法とは何ですか?

私はウィキペディアhttp://en.wikipedia.org/wiki/Linear_programming[article]を読みましたが、私の理解を超えているようです。 それは最適化のためだと言っていますが、物事を最適化する他の方法とどのように違いますか?

初心者がアクセスしにくい素材に飛び込むことができるように、線形プログラミングを紹介する答えが最も役立ちます。

5 Answer


13


これまでの答えは、線形計画法の代数的定義と操作上の定義を与えてきました。 しかし、幾何学的な定義もあります。 _polytope_は、ポリゴン(2次元)または多面体(3次元)のn次元の一般化です。 _convex polytope_は、凸集合でもあるポリトープです。 定義上、線形計画法は、凸ポリトープの線形関数を最大化または最小化する最適化問題です。

例:赤い砂と青い砂の組み合わせを購入するとします。 また、次のことも考えてください:

  1. どちらの種類のマイナス額も購入できません。

  2. 倉庫には、300ポンドの赤い砂と400ポンドの青い砂しかありません。

  3. また、ジープの重量制限は500ポンドです。

これらの制約でどれだけ買うことができるかを平面で描くと、それは凸五角形です。 次に、最適化するもの(砂に含まれる金の総量など)に関係なく、最適な(必ずしも唯一の最適ではない)がポリトープの頂点の1つにあることがわかります。 実際、はるかに強力な結果があります。高次元であっても、そのような線形計画問題は多項式時間、制約の数、またはポリトープの推定側面で解くことができます。 すべての制約が側面に対応するわけではないことに注意してください。 制約が等式の場合、ポリトープの次元が小さくなる可能性があります。 または、制約が不等式である場合、他のすべての制約によってすでに暗示されている場合、辺を作成しない可能性があります。

線形計画法である実用的な最適化問題はたくさんあります。 最初の例の1つは「ダイエットの問題」でした。さまざまな種類の食品のメニューを考えて、最も安価でバランスの取れた食事は何ですか。 コストが線形であり、すべての制約(ビタミン、カロリー、負の量の食品を購入できないという仮定など)が線形であるため、線形プログラミングの問題です。

しかし、線形プログラミングは理論的な理由からさらに重要です。 これは、最適化またはその他の目的のための最も強力な多項式時間アルゴリズムの1つです。 そのため、他の最適化問題を近似的に解決するための代替として、およびそれらを正確に解決するためのサブルーチンとして非常に重要です。

はい、2つの一般化は凸プログラミングと整数プログラミングです。 目的(最大化するもの)が線形であれば、一部の資格では、凸型プログラミングは線形プログラミングと同様に機能します。 線形計画法が優れたアルゴリズムを持っている主な理由は、平面ではなく凸面であることがわかります。

一方、整数プログラミングは通常困難です。 たとえば、サンプルの問題で、大量ではなく固定サイズの袋で砂を購入する必要があるとします。それが整数プログラミングです。 NP困難になる可能性があるという定理があります。 実際の難易度は、線形計画法にどれだけ近いかによって異なります。 整数計画問題の有名な例がいくつかあります。そこでは、奇跡的に、線形計画のすべての頂点が整数点です。 次に、線形プログラムを解くと、解が積分になります。 そのような問題の1つの例は、結婚問題です。n人の男性とn人の女性をお互いに結婚させて、完全な幸福を最大化する方法です。 (または、n都市からn工場、nジョブからn申請者、nコンピューターからnプリンターなど)


6


線形プログラミングは「数学プログラミング」のトピックであり、「数学最適化」とも呼ばれます。 線形プログラムは、線形プログラム(LP)のすべての制約関数と目的関数が変数に関して線形であるという点で、一般的な数学プログラムと異なります。

始めるのに適した場所は、http://www.rand.org/pubs/reports/R366/ [こちら]です。Dantzigによるオリジナルの作品が必要な場合、または教科書を入手したい場合は、http:// www.maa.org/reviews/UnderstandingUsing.html[this] one。 独自のリソースを検索する場合は、http://en.wikipedia.org/wiki/Simplex_method [Simplex method]を検索することから始めます。これは、これらのプログラムを解決するための非常に一般的な手法です。間違いなく多項式時間http://en.wikipedia.org/wiki/Ellipsoid_method[Ellipsoid method]。 すべてを読んだわけではありませんが、すぐに目を通すと、http://www.sce.carleton.ca/faculty/chinneck/po/Chapter2.pdf [this] PDFから始めるのがよいかもしれません。 ほとんどのLPソルバーの中心的なアイデアであるため、読み終わるものは何でも二重性(そしておそらく具体的にはhttp://en.wikipedia.org/wiki/Farkas_lemma[Farkas 'lemma])をカバーするようにしてください。

最も自然な拡張は、整数プログラム(LPに似ていますが、すべての変数は整数値をとる必要があります(つまり、分数コンポーネントはありません))またはConvexプログラミング(おそらくより一般的な拡張)です。 優れた凸最適化テキストブックは、PDF形式http://www.stanford.edu/~boyd/cvxbook/ [こちら]で入手できます。


4


誰もが言ったように、線形計画法は最適化の問題を解決する方法であり、用語は線形です。

LPが解決する問題の種類を理解するのに役立つかもしれません

私が線形計画法を使用した1つの例は、レストランのスケジュールを作成することです。 レストランにはスキルセットがあります。

  • 料理人

  • サーバー

  • 食器洗い機

  • ホスト

  • バスサー

  • マネージャーなど

また、従業員がいて、それぞれに1つ以上のスキルセットがあります。 各従業員にも特定の空きがあります。 たとえば、ボブは地元の教会の牧師であるため、日曜日の朝働くことができません。 従業員にも関連費用があります。 ボブは1時間あたり$ 10.50で、スージーは$ 5.15 /時間です。 最後に、従業員には最低保証時間があります。 ボブは15年間従業員だったため、上司は常に少なくとも35時間を取得すると言います。

レストラン自体に要求があります。 たとえば、朝、午後、夜の3つのシフトがあり、これらのシフトにはそれぞれスタッフの要件があります。1人の料理人、1人のサーバー、1人の朝のマネージャー、3人の料理人、2台のサーバー、2台のホスト、2午後はマネージャー、夕方は4人の料理人、4人のサーバー、3人のホスト、2人のマネージャー、2人のバスターがいます。 各シフトには期間があり、従業員の時間給で期間を乗算することにより、各シフトのコストを計算できます。

最後に、州法と連邦法、およびいくつかの基本的な「ビジネス」ルールがあります。従業員は、残業することなく8時間以上働くことができません。 従業員は2時間未満にスケジュールできません(2時間のシフトで30分の通勤をするのは面倒だからです)、従業員は2つの重複したシフトなどを働かせることはできません。

これらすべての要件が与えられたので、すべての要件を満たし、人件費が最も低いスケジュールを教えてください。

これは、線形計画法の最適化問題の例です。

線形プログラムは通常、次のもので構成されます。

目的関数、変数、変数の境界、および制約。

コストを最小限に抑えるため、目的関数には、従業員が勤務するシフトと、関連するコスト(シフト期間*賃金)が含まれます。

この場合の変数は、各従業員が働くことができるシフトです。

これらの変数の境界は、従業員がシフトを働いている(1)か、従業員がシフトを働いていない(0)ため、0〜1の整数です。 ちなみに、これはすべての変数が整数(小数値なし)であり、すべての値が0または1であるため、バイナリ整数プログラムまたは略してBIPと呼ばれる特別なプログラムです。

制約は、上記の要件に基づく等式/不等式の制約です。

たとえば、午前中にボブとスージーの両方が料理人として働くことができる場合、「Bob_Morning_Cook1_Shift + Suzy_Morning_Cook1_Shift = 1」、「Bob_Morning_Cook_Shift = {0,1}」および「Suzy_Morning_Cook_Shift = {0,1}」が言及されている上記。 これらの3つの情報は、最高で1人の従業員のみが最初の朝の料理人として割り当てられることを指定しています。

したがって、問題をモデル化するすべての制約を定義したら、問題の解決を開始できます。 解決策が見つかった場合(および制約によっては問題が実行不可能な場合があります)、週ごとの最低人件費を生み出す従業員の割り当てが提供されます。


2


線形計画法は、線形制約と線形目的関数を含む最適化手法です。 制約は問題空間を制限するように書かれていますが、目的関数は制約を満たすために最小化(または最大化)しようとしているものです。 simplex algorithmは通常、制約の交差のエッジに沿って歩き、制約を満たす目的関数の最小(または最大)値を見つけるために使用されます。

LP問題を設定する場合、制約が目的関数を適切にバインドすることを確認することが重要です。 解決策が得られない制約を定義することは可能です(例: x> 1および-x> 1)。 これは過度に制約されています。 問題を過小評価することも可能です(例: x <1)のようなmin xを見つけます。


1


_linear_プログラミングの1つの大きな違い(または少なくとも顕著な特徴)は、制約が_linear_方程式としてモデル化されることです。 それらはすべて「c_1 x_1 + c_2 x_2 …​」という形式です。 ウィキペディアの記事の標準形式のセクションでは、これについてかなり良い概要を説明しています。

もう1つの違い/機能は、線形プログラミングが1つの関数を最大化(または最小化)しようとしていることです。多目的最適化を効果的に行うことはできません。