Upgrade to Pro — share decks privately, control downloads, hide ads and more …

An introduction to Linear programming

Shunji Umetani
October 11, 2020

An introduction to Linear programming

線形計画法入門です.大学2年生の授業から線形計画法に関する部分のみを取り出しました.主に単体法(シンプレックス法)の手続きと双対問題の作り方について解説しています.
追記:少しだけ改定しました(2020/10/11)

Shunji Umetani

October 11, 2020
Tweet

More Decks by Shunji Umetani

Other Decks in Education

Transcript

  1. 線形計画問題の例 • ある飲料メーカーでは,トマト,にんじん,ほうれん草を原料と する野菜ジュースを製造している. • 野菜ジュースに含まれる⾷物繊維,ビタミンC,鉄分,βカロチン の必要量を満たしつつ,製造に要する原料費を最⼩に抑えるため の各野菜の購⼊量は︖ • トマト,にんじん,ほうれん草の購⼊量(kg)を

    とする. 4 ⾷物繊維 ビタミンC 鉄分 βカロチン 価格(円/kg) トマト 10 15 2 5 400 にんじん 25 5 2 80 250 ほうれん草 30 35 20 40 1000 必要量(単位/2L) 50 60 10 40 → 原料費を最⼩化 → ⾷物繊維は50単位以上 → ビタミンCは60単位以上 → 鉄分は10単位以上 → βカロチンは40単位以上 → 各野菜の購⼊量は⾮負
  2. 標準形への変形 • どんな形の線形計画問題でも不等式標準形に変形できる. • 最⼩化ならば⽬的関数を-1倍する. • ⾮負制約なし変数 は,⾮負制約あり変数 に置き換える. •

    等式制約を2つの不等式制約に置き換える. • 不等号が逆向きの制約条件ならば両辺を-1倍する. 7 ⽬的関数の値の正負が 反転することに注意
  3. ⽇程計画問題 • プロジェクトの各作業の処理順序を表すネットワークを⽤いて⽇ 程計画を⽴案・管理する⼿法をPERT(Program Evaluation and Review Technique)と呼ぶ. 11 作業

    の標準の処理⽇数(定数) 作業 の費⽤(定数) 作業 を1⽇短縮した際に⽣じる追加費⽤(定数) 作業 の処理⽇数の下限(定数) 作業 の実際の処理⽇数(変数) 作業 の開始⽇(変数) 作業 は作業 に先⾏
  4. ⽣産計画問題 13 製品 を1単位⽣産するのに必要な原料 の量(定数) 各期 の原料 の供給量(定数) 各期 の製品

    の顧客の需要量(定数) 各期 の製品 の単位量当たりの⽣産費(定数) 各期 の製品 の単位量当たりの在庫費(定数) 各期 の製品 の⽣産量(定数) 各期 の製品 の在庫量(定数)
  5. 事業効率の評価 • 複数の事業の相対的な効率を評価する⼿法を包絡分析法(Data envelopment analysis; DEA)と呼ぶ. • 全ての事業に対して同じ重み付けをするのではなく,それぞれの 事業 の効率が最⼤となる重み付けをした上で,得られた「仮想

    的な出⼒/仮想的な⼊⼒」の値を⽐較する. • 事業 の効率を最⼤にする⼊⼒と出⼒の重みを求める問題は線形 計画問題に変形できる. 22 事業 の 番⽬の⼊⼒値(定数) 事業 の 番⽬の出⼒値(定数) いずれの事業も「⼊⼒/出⼒」が 1以下となるよう重み付けする 事業 の⼊⼒ に対する重み(変数) 事業 の出⼒ に対する重み(変数)
  6. 線形計画ソルバーの利⽤法 • lp_solve, GLPKなど数多くの⾮商⽤ソルバーが公開されている. • 多くの線形計画ソルバーはMPS形式とLP形式で記述された⼊⼒ ファイルを読み込める. • その他にもAMPL,GAMSなどのモデリング⾔語も知られている. •

    多くの商⽤ソルバーと⼀部の⾮商⽤ソルバーは,C, C++, Java, Matlab, Python, Excelなどのインターフェースを持つ. • Pulpなどサードパーティ製のインターフェースもある. 25 minimize 3 x1 + 4 x2 + 2 x3 subject to c1: 2 x1 <= 4 c2: x1 + 2 x3 <= 8 c3: 3 x2 + x3 <= 6 end 線形計画問題をLP形式で記述した例
  7. 線形計画ソルバーの利⽤法 • LP形式は⽂法が平易で可読性が⾼く,多くの線形計画ソルバーが 対応しているが,配列のように変数をまとめて扱う機能がない. • ⼤規模な問題例を扱いたい場合には, ü LP形式のファイルを出⼒するプログラムを作成 → 多くの線形計画ソルバーが使えるので保守性が⾼い

    ü モデリング⾔語を利⽤ → プログラムを書くようにモデルを書ける → 多くの線形計画ソルバーで使える標準的なモデリング⾔語がない ü インターフェースを利⽤ → 線形計画ソルバーを繰返し呼出すなど⼩回りが利く → インターフェースに依存するので保守性が低い 26 for(i = 0; i < 10; i++){ printf("+ x%d ",i); } printf("<= 3¥n"); + x0 + x1 + x2 + ... + x9 <= 3 sum(i in 0..9)(x[i]) <= 3
  8. 線形計画問題を解く • 制約条件を 本,変数を 個とする. • 実⾏可能領域は 枚の超平⾯に囲まれる → 凸多⾯体

    • 枚の超平⾯が交差する頂点のいずれかに最適解がある*. 29 *実⾏可能領域が⾮有界ならば のように凸多⾯体が頂点を持たない 場合もあるので注意する. ࠷େԽ ᶃ ᶄ ᶅ ᶆ ᶇ B C D E F → ① → ② → ③ → ④ → ⑤ 調べる頂点の数が 個となり効率的ではない
  9. 単体法の⼿続き • 与えられた線形計画問題を等式標準形に変形する. • 各変数 〜 が線形不等式①〜⑤に対応していることを確認する. 31 → ①

    → ② → ③ → ④ → ⑤ → ① → ② → ③ → ④ → ⑤ ① ② ③ ④ ⑤ と の値が0 と の値が0 制約条件を等号で満たす =対応する変数の値が0
  10. 単体法の⼿続き • 解が凸多⾯体の頂点にある ⇔ 対応する制約条件を等号で満たす ⇔ 対応する変数の値が0を取る • 変数 個,制約条件

    本だが,各変数の⾮負制約もあるので,実 際の制約条件は 本ある. • 本の制約を選び*連⽴⽅程式を解くと,凸多⾯体の頂点に対応す る実⾏可能解が得られる. 32 *実際は対応する変数の値を0に固定する. → ① → ② → ③ → ④ → ⑤ 辞書形式 と固定すると 実⾏可能解が1つ求まる
  11. 単体法の⼿続き • 現在の頂点(実⾏可能解)に隣接する頂点を求めるには︖ 33 は⾮負 ← x2 =6まで増やせる ← x2

    =4まで増やせる ← x2 =10まで増やせる ← x1 かx2 を増加すると⽬的関数が改善しそう を代⼊して書き直すと (掃出し計算でもOK) 連⽴⽅程式を解いている
  12. 単体法の⼿続き 35 ① ② ③ ④ ⑤ ← x1 =3まで増やせる

    ← x1 =12まで増やせる ← x1 =18/5まで増やせる ← x1 を増加すると⽬的関数が改善しそう を代⼊する もう改善できない︕
  13. 単体法の原理 • 凸多⾯体の頂点(基底解)において, となる変数 → ⾮基底変数 となる変数 → 基底変数 •

    実⾏可能基底解 ある分割 が与えられると 36 m m が正則ならば基底解 が得られる ならば実⾏可能 n-m ( とする)
  14. 単体法の原理 実⾏可能基底解の最適性 37 シンプレックス乗数 を⽬的関数に代⼊すると ここで, とおくと線形計画問題は以下の通り書き換えられる. ここで, ならば は⾃明な最適解で

    最⼩値 すなわち,この式によって実⾏可能基底解の最適性が判定できる. 相対コスト係数もしくは被約費⽤ 単体法における辞書
  15. 初期実⾏可能解を求める(2段階単体法) • 線形計画問題を特には初期実⾏可能解が必要 • ⾃明な実⾏可能解が分からない場合は︖ → 補助問題を作る • 補助問題︓⾃明な実⾏可能解を持つ線形計画問題 →

    単体法を2回適⽤すると解ける(2段階法) 39 ⾃明な実⾏可能解が分からない 補助変数 x0 を導⼊ 制約条件の違反度の最⼤値を最⼩化 ⽬的関数値 = 0 → 元の問題は実⾏可能 ⽬的関数値 > 0 → 元の問題は実⾏不能 補助問題
  16. 初期実⾏可能解を求める(2段階単体法) 41 ᶃ ᶄ ᶅ ᶆ ᶇ ← x1 =2まで増やせる

    ← x1 =3まで増やせる ← x1 =9/2まで増やせる ← x1 (x2 )を増加すると⽬的関数が改善しそう と を⼊れ替える ⽬的関数値が0に︕
  17. ⾮有界な線形計画問題の判定 • 線形計画問題が⾮有界かどうか単体法の⼿続きの中で判定できる. 43 ࠷େԽ ᶃ ᶄ ᶅ ᶆ →

    ① → ② → ③ → ④ と を⼊れ替える ← x2 を増加すると⽬的関数が改善しそう x2 をいくら増加してもx1 もx4 も負にならない︕
  18. 退化と巡回 • 最⼤係数規則︓変数の値を1増加したときの⽬的関数の改善量が最 ⼤となる⾮基底変数 を常に選ぶ. • 値が0となる基底変数が現れる(退化)と単体法が同じ実⾏可能基底 解に戻る巡回が⽣じて,無限ループに陥り最適解にたどり着けなく なることがある. •

    最⼩添字規則(Blandの規則)︓添字 が最⼩となる基底変数を選ぶ. • 最⼩添字規則を⽤いると巡回を避けることができる. 44 ࠷େԽ ᶃ ᶄ ᶅ ᶆ → ① → ② → ③ → ④ 基底変数の値が0
  19. 内点法 • 単体法︓実⾏可能領域の境界を通り最適解にたどり着く. ü 実⽤的には⾼速だが,理論的には最悪で指数時間かかる例も知られ ている. • 内点法︓実⾏可能領域の内部を通り最適解にたどり着く. ü 実⽤的に⾼速で,理論的にも最悪で多項式時間に抑えられる.

    • ⼤規模な問題例を1回だけ解くなら内点法が効率的. • ⼊⼒データを変更して解き直す際に,変更前の最適解を出発点と して変更後の最適解を求める再最適化では単体法が効率的. 45 初期解 最適解 近道 遠回り︖ 初期解 最適解
  20. 主問題と双対問題の関係 57 (P) 主問題* (D) 双対問題 弱双対定理 x, yを主問題(P)と双対問題(D)の実⾏可能解とすると 実⾏可能(有界)

    実⾏可能(有界) ⾮有界 ⾮有界 より明らか 実⾏不能 実⾏不能 主問題 双対問題 主問題(P)が⾮有界ならば, より双対問題(D)は 実⾏可能解を持たない(両⽅とも実⾏不能ということはある) *次ページの強双対定理の証明で単体法で得られた最適解を⽤いるため等式標準形にしています.
  21. 感度分析 • 3種類のブドウ,カベルネ,メルロー,セミヨンの供給量b1 ,b2 ,b3 を 増やすとすると,どのブドウの供給量を増やすのが最もお得か︖ 60 主問題 双対問題

    最適解 が得られたとすると ⽬的関数値は 供給量をそれぞれ 増やしたときの最適値は︖ 最適解における双対変数の値は,各ブドウの潜在的な収益を表している (双対変数は「潜在価格」とも呼ばれる)
  22. 列⽣成法 • 双対問題の最適解 は新たなワインの⽣産を検討する際にも役⽴つ. • 新たなワイン1tの⽣産に必要なブドウの量を ,ワイン1tの 収益を pʼ, 購⼊量を

    xʼ とする. • 主問題に新たな変数 xʼ を追加することは,双対問題では新たな制約 条件 を追加することに対応する. • となるワインならば⽣産することで収益が増加する. 61 主問題 双対問題 ࣮ߦՄೳྖҬ ࣮ߦՄೳྖҬ ৽੍͍͠໿৚݅ ࠷ద஋͕૿Ճ
  23. 参考⽂献 • H.P.Williams, Model Building in Mathematical Programming (5th ed.),

    John Wiley & Sons, Ltd., 2013. • 品野勇治,藤井浩⼀,使ってみよう線形計画ソルバー,オペレーションズ・リサーチ,64 (2019), 238-245. • V. Chvatal, Linear Programming, W.H. Freeman and Company, 1983. (阪⽥省⼆郎,藤 野和建,⽥⼝東(訳),線形計画法(上・下),啓学出版,1986) • 福島雅夫,数理計画⼊⾨(新版),朝倉書店,2011. • 久野誉⼈,繁野⿇⾐⼦,後藤順哉,数理最適化,オーム社,2012. • 加藤直樹,数理計画法,コロナ社,2007. • 久保幹雄,組合せ最適化とアルゴリズム,共⽴出版,2000. • 森雅夫,松井知⼰,オペレーションズ・リサーチ,朝倉書店,2004. • 寒野善博,⼟⾕隆,最適化と変分法,丸善出版,2014. • ⽥村明久,村松正和,最適化法,共⽴出版,2002. • 茨⽊俊秀,最適化の数学,共⽴出版,2011. • ⽮部博,最適化とその応⽤,数理⼯学社,2006. • ⼭下信雄,福嶋雅夫,数理計画法,コロナ社,2008. • 梅⾕ 俊治, 組合せ最適化⼊⾨︓線形計画から整数計画まで, ⾃然⾔語処理, 21 (2014), 1059- 1090. • 梅⾕ 俊治,しっかり学ぶ数理最適化︓モデルからアルゴリズムまで,講談社,2020. 62