計画理論 - familleplaza.harmonix.ne.jp/~ssuchida/development/lp.pdf · 産業連関 分析...
TRANSCRIPT
計画理論
計画理論
線形計画問題
サステイナビリティの考え方
産業連関分析
ライフサイクルアセスメント
線形計画問題と線形計画法 (Linear Programming, LP)
限られた制約(資源)の中で最大の成果を上げる配分を求める方法
資源:予算、材料、時間…
成果:生産高、利益…
線形計画法の例題
ダムと鉄道の建設を考える
ダムは1基、2基…と数える
便宜上、鉄道は1路線、2路線…と数える
経済効果3兆円 経済効果2兆円
資材に制約がある
使用可能量:100 使用可能量:96
(単位:百万トン)
鋼材 コンクリート
資材の使用量 必要量
10
2
2
8
(単位:百万トン)
経済効果を最大にするには?
10 2
効果3
2 8
効果2
合計100 合計96
最大化したいものを式で表す
効果の合計:2X + 3Y
=X =Y
これを最大化する
(目的関数)
経済効果を最大にするには?
10 2
効果3
2 8
効果2
合計100 合計96
資源ごとに制約式を作る
それぞれの使用量
10Y 2Y
効果3
2X 8X
効果2
合計100 合計96
制約式
+ + ≦
≦
線形計画法の式の表し方
目的関数 2X + 3Y
制約式 2X+10Y≦100
8X+2Y≦96
X≧0, Y≧0
max 2X + 3Y
s.t. 2X+10Y≦100
8X+2Y≦96
X≧0, Y≧0
such that
非負制約
線形計画法の解き方
max 2X + 3Y
s.t. 2X+10Y≦100
8X+2Y≦96
X≧0, Y≧0
簡単な問題なら図形的に解ける
X
Y
12
48
10
50 実行可能領域
Y軸 X軸
目的関数の表現
max 2X + 3Y
s.t. 2X+10Y≦100
8X+2Y≦96
X≧0, Y≧0
X
Y
12
48
10
50
2X + 3Y=C(定数)のCを動かす
C大
C小
2X + 3Y=C
目的関数が最大になる点
max 2X + 3Y
s.t. 2X+10Y≦100
8X+2Y≦96
X≧0, Y≧0
X
Y
12
48
10
50
2X + 3Y = ?
交点の座標は制約式を
等号にした連立方程式の解
目的関数が最大になる点 max 2X + 3Y
s.t. 2X+10Y≦100
8X+2Y≦96
X≧0, Y≧0
X
Y
12
48
10
50
2X + 3Y = 44
(10, 8)
解
10基
8路線
(経済効果は44兆円)
2X + 3Y = 30
2X + 3Y = 24
経済効果が変われば結果も変わる
目的関数:X+10Y
結果がどう変わるか?
経済効果10兆円 経済効果1兆円
目的関数が最大になる点 max X + 10Y
s.t. 2X+10Y≦100
8X+2Y≦96
X≧0, Y≧0
X
Y
12
48
10
50
X + 10Y = 100
解
なし
10路線
(経済効果は100兆円) X + 10Y = 90
X + 10Y = 12
(10, 8)
※コンクリートは
余っている
練習問題
米と麦の生産を選ぶ
トン当たり収入 米:9万円、麦:7万円
農地:全体で32アール
農薬:合計60ℓに抑えたい
トン当たり農地 米:5アール、麦:2アール
トン当たり農薬 米:3ℓ、麦:8ℓ
☆収入を最大にする方法は?
制約が増えるとどうなるか
10Y 2Y
効果3
2X 8X
効果2
合計100 合計96
+ +
≦
≦
6Y
5X
合計79
+
≦
排出量制約
制約の追加
max 2X + 3Y
s.t. 2X+10Y≦100
8X+2Y≦96
5X+6Y≦79
X≧0, Y≧0
X
Y
12
48
10
50
制約が多数あるとき
X
Y
必ず凸形状になる
開発の選択肢が多い時
ダムと鉄道のほかに風力発電所を建設
経済効果3兆円 経済効果2兆円 経済効果0.1兆円
変数・制約ともに3の場合
10Y 2Y
効果3
2X 8X 効果2
合計100 合計96
+ +
≦
≦
6Y
5X
合計79
+
≦
効果0.1
+
3Z
+
2Z
+
0.2Z
図示を試みる
X
Y
Z
目的関数平面
選択肢が3つ→3次元空間
選択肢が4つ→4次元空間
…
選択肢が増えるとグラフで解くのは困難
計算による解法-シンプレックス法
max 2X + 3Y + 0.1Z
s.t. 2X + 10Y + 3Z ≦ 100
8X + 2Y + 2Z ≦ 96
5X + 6Y + 0.2Z ≦ 79
X≧0, Y≧0, Z≧0
計算による解法-シンプレックス法
max 2X1 + 3X2 + 0.1X3
s.t. 2X1 + 10X2 + 3X3 ≦ 100
8X1 + 2X2 + 2X3 ≦ 96
5X1 + 6X2 + 0.2X3 ≦ 79
X1≧0, X2≧0, X3≧0
計算による解法-シンプレックス法
Z = 2X1 + 3X2 + 0.1X3
2X1 + 10X2 + 3X3 ≦ 100
8X1 + 2X2 + 2X3 ≦ 96
5X1 + 6X2 + 0.2X3 ≦ 79
X1≧0, X2≧0, X3≧0
不等式の等式化-スラック変数の導入
Z = 2X1 + 3X2 + 0.1X3
2X1 + 10X2 + 3X3 ≦ 100
8X1 + 2X2 + 2X3 ≦ 96
5X1 + 6X2 + 0.2X3 ≦ 79
X1≧0, X2≧0, X3≧0
不等式の等式化-スラック変数の導入
Z = 2X1 + 3X2 + 0.1X3
2X1 + 10X2 + 3X3 + X4 = 100
8X1 + 2X2 + 2X3 + X5 = 96
5X1 + 6X2 + 0.2X3 + X6 = 79
X1, X2, …, X6≧0
方程式の数と変数の関係
Z = 2X1 + 3X2 + 0.1X3
2X1 + 10X2 + 3X3 + X4 = 100
8X1 + 2X2 + 2X3 + X5 = 96
5X1 + 6X2 + 0.2X3 + X6 = 79
X1, X2, …, X6≧0
方程式3、変数6
変数6つのうち3つまでは任意(ゼロでよい)
残りの3つでできる解:基底解
その他の制約(=非負制約)を満たす解
…実行可能基底解
最適解を求める方針
Z = 2X1 + 3X2 + 0.1X3
2X1 + 10X2 + 3X3 + X4 = 100
8X1 + 2X2 + 2X3 + X5 = 96
5X1 + 6X2 + 0.2X3 + X6 = 79
X1, X2, …, X6≧0
基底(この場合3変数)を選ぶ
その基底解が最適解かどうかを判定する
最適でない場合、変数を1つ入れ替える
新たな基底で基底解を作る(以下繰り返し)
注:最適解は必ず基底解である
最初の基底解を選ぶ
Z = 2X1 + 3X2 + 0.1X3
2X1 + 10X2 + 3X3 + X4 = 100
8X1 + 2X2 + 2X3 + X5 = 96
5X1 + 6X2 + 0.2X3 + X6 = 79
X1, X2, …, X6≧0
制約を満たす組み合わせを見つける
この場合、明らかな基底解は
X4 = 100, X5 = 96, X6 = 79
これを出発点とする(現在の目的関数は0)
入れ替える変数を決める
Z = 2X1 + 3X2 + 0.1X3 …(1)
2X1 + 10X2 + 3X3 + X4 = 100 …(2)
8X1 + 2X2 + 2X3 + X5 = 96 …(3)
5X1 + 6X2 + 0.2X3 + X6 = 79 …(4)
X1, X2, …, X6≧0
新たに入れる変数
→目的関数が速く増えそうなX2
X4 = 100, X5 = 96, X6 = 79, Z=0
係数の大きいもの
X2はどこまで増やせるか
Z = 2X1 + 3X2 + 0.1X3 …(1)
2X1 + 10X2 + 3X3 + X4 = 100 …(2)
8X1 + 2X2 + 2X3 + X5 = 96 …(3)
5X1 + 6X2 + 0.2X3 + X6 = 79 …(4)
X1, X2, …, X6≧0
X2を増やした時、最初に制約に達する式を選ぶ
それぞれの式の定数項をX2の係数で割る
(2)式が最小:最初に制約に達する
X2は10まで増やすことができる
(2)式においてX2の代わりにX4が0になる
→基底からはずす
次の基底での検証
Z = 2X1 + 3X2 + 0.1X3 …(1)
2X1 + 10X2 + 3X3 + X4 = 100 …(2)
8X1 + 2X2 + 2X3 + X5 = 96 …(3)
5X1 + 6X2 + 0.2X3 + X6 = 79 …(4)
X1, X2, …, X6≧0
新しい基底はX2, X5 , X6
X2を10まで増やした
(3)式よりX5 =76
(4)式よりX6 =19(Z=30)
この状態からX1またはX3を増やして目的関数を増やせるか?
式からのX2の消去
Z = 30 + 1.4X1 - 0.8X3 …(5)
2X1 + 10X2 + 3X3 + X4 = 100 …(2)
7.6X1 + 1.4X3 - 0.2X5 = 76 …(6)
3.8X1 - 1.6X3 - 0.6X6 = 19 …(7)
X1, X2, …, X6≧0
先ほどの(2)式を使って、 X2を消去する
(5)式より、X1を増加させることで目的関数をさらに増加させられることがわかる
同様に、 X1をどこまで増加させられるかを計算
(7)式でX1を5まで増加させるのが限界
再び変数の入れ替え
Z = 37 - 131/190X3 …(8)
X2 + (73/190)X3 + (25/190)X4 - (1/19) X6 = 9 …(9)
(874/190)X3 + X4 + X5 - 2X6 = 38 …(10)
X1 - (8/19)X3 - (3/19)X4 + (5/19)X6 = 5 …(11)
X1, X2, …, X6≧0
X1を基底に入れ、X6を外す→ X1, X2 , X5が基底
(7)式を使ってX1を消去
X3を増加させてもZは増加しない→終了
最適解: X1=5, X2=9, X3 =0, Z=37
( X4=0, X5 =38, X6=0 )
座標上の解釈
X1
目的関数平面 X2
X3
X4, X5, X6 が基底
→ X1, X2, X3 =0 (原点)
そこから、座標軸に沿って動き
目的関数が最大の頂点を目指す
座標上の解釈
X1
目的関数平面 X2
X3
最初の頂点に到達したら
さらに、目的関数の増える方向を目指す
このように、辺に沿って動きながら最大の目的関数の点を探す
シンプレックス表の活用
Z = 2X1 + 3X2 + 0.1X3
2X1 + 10X2 + 3X3 + X4 = 100
8X1 + 2X2 + 2X3 + X5 = 96
5X1 + 6X2 + 0.2X3 + X6 = 79
X1, X2, …, X6≧0
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X4 100 2 10 3 1 0 0
X5 96 8 2 2 0 1 0
X6 79 5 6 0.2 0 0 1
Z 0 -2 -3 -0.1 0 0 0
Zの行に負の数がなくなったら終了
基底に入れる変数の選択
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X4→X2 100 2 10 3 1 0 0
X5 96 8 2 2 0 1 0
X6 79 5 6 0.2 0 0 1
Z 0 -2 -3 -0.1 0 0 0
Zの行で最小値の変数( X2 )を基底に入れる
解/X2
10
48
13.3
解/ X2が最小になる基底変数( X4 )を基底から外す
ピボット要素
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X2 100 2 10 3 1 0 0
X5 96 8 2 2 0 1 0
X6 79 5 6 0.2 0 0 1
Z 0 -2 -3 -0.1 0 0 0
ピボット要素を中心に表を変形
ピボット要素の行:ピボット要素の値で割る
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X2 10 0.2 1 0.3 0.1 0 0
X5 96 8 2 2 0 1 0
X6 79 5 6 0.2 0 0 1
Z 0 -2 -3 -0.1 0 0 0
変形前 X2 100 2 10 3 1 0 0
他の行:ピボットの行を使ってX2を消去
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X2 10 0.2 1 0.3 0.1 0 0
X5 96 8 2 2 0 1 0
X6 79 5 6 0.2 0 0 1
Z 0 -2 -3 -0.1 0 0 0
X2 20 0.4 2 0.6 0.2 0 0
X2 60 1.2 6 1.8 0.6 0 0
X2 30 0.6 3 0.9 0.3 0 0
①
②
③
④
⑤=①×2
X5 76 7.6 0 1.4 -0.2 1 0
X6 19 3.8 0 -1.6 -0.6 0 1
Z 30 -1.4 0 0.8 0.3 0 0
⑥=①×6
⑦=①×3
②-⑤
③-⑥
④+⑦
次の基底変数の入れ替え
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X2 10 0.2 1 0.3 0.1 0 0
X5 76 7.6 0 1.4 -0.2 1 0
X6→X1 19 3.8 0 -1.6 -0.6 0 1
Z 30 -1.4 0 0.8 0.3 0 0
解/X1
50
10
5
X1の係数が負であるので続行
X1を基底に入れ、X6をはずす→基底X1, X2, X5
ピボット要素はX1の3.8
X1 5 1 0 -8/19 -3/19 0 5/19
X1の消去
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X2 10 0.2 1 0.3 0.1 0 0
X5 76 7.6 0 1.4 -0.2 1 0
X1 5 1 0 -8/19 -3/19 0 5/19
Z 30 -1.4 0 0.8 0.3 0 0
X1 1 0.2 0 -8/95 -3/95 0 1/19
X1 38 7.6 0 -3.2 -1.2 0 2
X1 7 1.4 0 -56/95 -21/95 0 7/19
①
②
③
④
⑤=③×0.2
X2 9 0 1 73/190 5/38 0 -1/19
X5 38 0 0 4.6 1 1 -2
Z 37 0 0 4/19 3/38 0 7/19
⑥=③×7.6
⑦=③×1.4
①-⑤
②-⑥
④+⑦
最適解の判定
基底変数 基底可能解 X1 X2 X3 X4 X5 X6
X2 9 0 1 73/190 5/38 0 -1/19
X5 38 0 0 4.6 1 1 -2
X1 5 1 0 -8/19 -3/19 0 5/19
Z 37 0 0 4/19 3/38 0 7/19
Zの行がすべて正の数になったため最適解と判定