情報処理論 1998..2000年度講義資料
[Index] [Prev] [Next] [References]
これまでは,対象となるシステムの仕組や現象をモデル化し,パラメータの値を変化させたり,あるいは,サブシステムを別のサブシステムに置き換えたりなどすると,対象システムはどのように振る舞うか,つまり,「What if ?」型の質問に答えてくれるモデルを取り上げてきた。これらは現象説明モデルである。
問題解決のためのモデルには,この他に,「ある条件を満たす制約の下で,ある評価基準に関して最適となる政策または計画を計算する過程を含んだモデル(最適化モデル)」が盛んに使われている。
最適化モデルでは線形計画法(Linear Programming)のモデルが有名で,これは経営管理の意思決定の問題によく応用されている。ここでは簡単な例題を使ってこの方法を説明する。
|
【例題】輸送計画のコストを最小化する ある会社では,主要製品を製造する工場が3つあり,これを4ヶ所の営業所を通して販売している。その製品を,毎四半期間の各工場の製造能力で決まる供給可能数以内で,4ヶ所の営業所の需要を満たせるように,しかも会社全体の輸送費ができるだけ少なくなるように,という条件で各工場から各営業所に運びたい。 |
| 《需要数と供給可能数》 | 中央の表は,輸送単価(千円/個) | ||||||
| 営業所A | 営業所B | 営業所C | 営業所D | 供給可能数 | |||
| 工場1 | 76 |
31 |
23 |
6 |
100 |
||
| 工場2 | 20 |
22 |
47 |
24 |
90 |
||
| 工場3 | 17 |
87 |
21 |
30 |
70 |
||
| 需要数 | 86 |
35 |
65 |
57 |
|||
練習6: 輸送計画を解く (その1)
この問題に対して表6の輸送計画表を作って,各輸送区間(工場→営業所)の輸送数を表6の中央部分のセル範囲B10〜E12に記入して,試行錯誤的に総輸送費が一番安くなりそうな輸送計画を見つけよう。
まず,輸送計画の計算式を与える。(注:まだ,セル範囲B10〜E12はすべて空白の状態である)
� ̄超判�Aの需要残数(需要数のうち,未だ満たされていない分)をセルB13に与える。
B13 ←「= B6 - SUM(B10:B12)」。以下では,セルに式を与えることを「←」で示す。
この式を営業所B〜営業所Dにコピーする。
��工場1の供給残数(供給可能数から各営業所への配分を引いた残り)をセルF10に与える。
F10 ←「= F3 - SUM(B10:E10)」。これを工場2〜工場3にコピーする。
��需要残数の合計をセルF13に与える。
F13 ←「= SUM(B13:E13)」
この式はセルF13に残数0が表示されたとき1つの輸送計画が得られたことを意味する。
�す�場1から各営業所への輸送費=(輸送数)×(輸送単価)の合計をセルG10に与える。すなわち,
G10 ←「= B10*B3 + C10*C3 + D10*D3 + E10*E3」。これを工場2〜工場3にコピーする。
�イ海譴覗輙∩�費がセルG13に求まる。
G13 ←「= SUM(G10:G12)」。
こうして作られた表6の輸送計画表の中央部分(セル範囲B10〜E12)のどこか1つのセルに輸送量を入力すると,直ちにその輸送する工場の供給残数と営業所の需要残数が減り,その工場からの輸送費が増え,その分だけ総輸送費も増加するようにワークシートの再計算が行われる。いま,工場1から営業所Aへの輸送数を記入するセルを「区間(1,A)」と便宜的に書くことにし,「区間(1,A)にN個運ぶ」という書き方を採用する。
| 《輸送計画1》 | |||||||
| 営業所A | 営業所B | 営業所C | 営業所D | 供給残数 | 輸送費 | ||
| 工場1 | 43 |
57 |
0 |
1331 |
|||
| 工場2 | 16 |
35 |
22 |
17 |
2124 |
||
| 工場3 | 70 |
0 |
1190 |
||||
| 需要残数 | 0 |
0 |
0 |
0 |
0 |
4645 |
|
さて,一番安そうな輸送計画を導き出す方法の1つとして,「輸送単価の一番安い区間からできるだけ多く輸送する」という方針で輸送計画を作ってみよう。 この問題は,総費用を与える式が各区間の輸送量を未知数とする1次式になっており,最小費用の方策を計算するもので,線形計画問題と呼ばれている。今回のように小さい問題なら,輸送計画の問題は表6を用いてかなり良い解が得られる。
練習7: 輸送計画を解く (その2)
今度は「各営業所には輸送費が安い工場から順にできるだけたくさん運ぶ」という方針を採って計画を作ってみよう。その後で,営業所の需要がすべて満たされるように輸送数を埋めていく手順を検討する。
準備として,表6の輸送計画表を15〜20行にコピーして表7を作り,表7で別の案を試行錯誤で求める。コピーしたときに,表7ではいくつかの式にセル参照の調整が必要になる。元の式の意味を考えて各自で修正すること。
| 《輸送計画2》 | |||||||
| 営業所A | 営業所B | 営業所C | 営業所D | 供給残数 | 輸送費 | ||
| 工場1 | 65 |
35 |
0 |
1705 |
|||
| 工場2 | 16 |
35 |
22 |
17 |
1618 |
||
| 工場3 | 70 |
0 |
1190 |
||||
| 需要残数 | 0 |
0 |
0 |
0 |
0 |
4513 |
|
この方針を次のように実行する。
このようにして作られた表7の輸送計画によれば,総輸送費用は4,513,000円となり,表6の輸送計画よりも少し安い。より有利な輸送計画が見つかった訳である。
Excel95から最適化分析ツールとして「ソルバー」機能がアドインされた。ソルバーは複数の変数を持つ問題に対する最適解を求めるもので,線形計画のみならず,最近話題の経済学的複雑系などの非線形計画問題をも扱うことができる。 このソルバーを用いて,輸送計画のコストを最小にする問題(線形計画法)を解くための方法を説明する。
練習8: ソルバーの準備
表5と表6(Sheet1のセル範囲A1〜G13)をSheet2にコピーする。ここではSheet2の2つの表をまとめて表8と呼ぶことにする。
表8の各セルには輸送計画を決めるのに必要な式や値が入力されている。セル範囲B10〜E12の数値をクリアする。
この問題にソルバーを適用するとき,まず総輸送費の式
練習9:ソルバーの実行
図4「制約条件の追加」ダイアログ (制約条件 B10 ≧0 を設定しているところ)
図5「ソルバー検索結果」ダイアログ(レポートを選んでいる)
図5で,〔レポート(R)〕の欄から「条件」や「感度」を選んだときは,それぞれ「感度レポート1」や「条件レポート1」というシート名のワークシートが挿入されて,そこに次のような解の詳細な情報が与えられる。一般に,最適解で与えられる変化させるセルの値(決定係数)は誤差を含んでいる。条件レポートはその誤差の程度を報告してくれる。感度レポートは,目的関数の係数,利用可能な資源,および技術係数(今の例では,供給可能数や需要数,および各区間の輸送単価)が変動したとき,最適解はどのように変わるかを報告するものである。
| Microsoft Excel 7.0 条件レポート | ←この標題は,Exccel97の場合,"Excel 8.0"と表示される | |||||||||
| ワークシート名:〔M輸送計画.xls〕LP by Solver | ||||||||||
| レポート作成日: 97/12/xx 16:20 | ||||||||||
| 目的セル | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| セル | 名前 | 値 | ||||||||
| $G$13 | 需要残数 輸送費 | 4139 |
||||||||
| 変化させるセル | 下 | 目的セル | 上 | 目的セル | ||||||
| セル | 名前 | 値 | 条件 | 値 | 条件 | 値 | ||||
| $B$10 | 工場1 営業所A | 0 |
0 |
4139 |
0 |
4139 |
||||
| $C$10 | 工場1 営業所B | 0 |
0 |
4139 |
0 |
4139 |
||||
| $D$10 | 工場1 営業所C | 43 |
43 |
4139 |
43 |
4139 |
||||
| $E$10 | 工場1 営業所D | 57 |
57 |
4139 |
57 |
4139 |
||||
| $B$11 | 工場2 営業所A | 38 |
38 |
4139 |
38 |
4139 |
||||
| $C$11 | 工場2 営業所B | 35 |
35 |
4139 |
35 |
4139 |
||||
| $D$11 | 工場2 営業所C | 0 |
0 |
4139 |
0 |
4139 |
||||
| $E$11 | 工場2 営業所D | 0 |
0 |
4139 |
0 |
4139 |
||||
| $B$12 | 工場3 営業所A | 48 |
48 |
4139 |
48 |
4139 |
||||
| $C$12 | 工場3 営業所B | 0 |
0 |
4139 |
0 |
4139 |
||||
| $D$12 | 工場3 営業所C | 22 |
22 |
4139 |
22 |
4139 |
||||
| $E$12 | 工場3 営業所D | 0 |
0 |
4139 |
0 |
4139 |
||||
線形計画法の詳しい説明は,経営科学やOR(オペレーションズ・リサーチ)の入門書を参照されたい。
なお,変数が2つの線形計画法の問題は,高校の数学「連立一次不等式のグラフ解法」でも扱われており,これをExcelのワークシート上で解いていく方法もある。(参考書�ぁ�平田純一ほか著,第6章の6.6節)
また,線形計画問題に対するより本格的な解法として,シンプレックス法と呼ばれる数値解法を簡単な連立一次方程式の問題として解くこともできる。(教科書� �13章 ORへの応用)
配列とは,複数のセルから成り立つものである。配列を扱うことができる数式を配列数式という。例えば,SUM({2,4,6;3,5,7})という数式では,引数にある{2,4,6;3,5,7}が配列であり,括弧{}内の1つ1つを配列要素という。引数は1つでも計算結果は配列要素の和27になる。この計算は,次のワークシート上で,SUM(A1:C2)という数式を計算するのと同じことを意味する。
2 |
4 |
6 |
||||
3 |
5 |
7 |
=SUM(A1:C2) | |||
数式が配列数式としてセルに入力される場合,その数式(関数)は配列の各要素に個別に働き,計算結果も配列になる,つまり複数の計算結果をまとめて返す。
練習1: 輸送計画を解く
具体例で示そう。輸送計画の問題において,各工場からの輸送費と総輸送費を計算する数式を与えるとき,まず,工場1のセルG10に数式 「= B10*B3 + C10*C3 + D10+D3 + E10*E3」 を入れ,次にこれを工場2〜3のセルG11〜G12にコピーした。セルG13に 「=SUM(G10:G12)」 を入れて総輸送費が得られた。
配列数式を使って同じ計算を行なうには,輸送計画のワークシート上で次のようにする。
�ち輙∩�費をセルH13に求めるには,数式 「=SUM(H10:H12)」 を使ってもよいが,配列数式を使うと上の� 銑�の操作を経ずに直接計算できる。それにはセルH13に数式 「=SUM(B10:E10*B3:E3, B11:E11*B4:E4, B12:E12*B5:E5)」を入れたあと, 〔Ctrl〕+〔Shift〕+〔Enter〕 の3つのキーを同時に押す。
練習2: 連立1次方程式を解く
Excelの数学関数には,2つの行列AとBの積ABを計算するMMULT(...)関数,ある行列Aの逆行列A−1を計算するMINVERSE(...)関数が用意されている。これらを使って次の連立1次方程式を解いてみる。 。
| 3 x − 4 y = −5 | (1) | 2 x + y = 4 | (2) |
A X = C
| 連立1次方程式 | |||||||
3 |
-4 |
= |
-5 |
||||
2 |
1 |
= |
4 |
||||
| 逆行列 | |||||||
係数行列Aの逆行列A−1をセル範囲B5〜C6に計算する。��B5〜C6をアクティブにする。�∈絃絛�のセルB5に数式 「= MINVERSE(B2:C4)」 を入力する。�G枸鷽�式にするために, 〔Ctrl〕+〔Shift〕+〔Enter〕 の3つのキーを同時に押す。数式バーには, {= MINVERSE(B2:C4)} が表示される。
次に,上の逆行列と定数項の行列Cの積A−1Cを計算する。��F5〜F6をアクティブにする。�∈絃絛�のセルF5に数式 「= MMULT(B5:C6,F5:F6)」 を入力する。�G枸鷽�式にするために, 〔Ctrl〕+〔Shift〕+〔Enter〕 の3つのキーを同時に押す。数式バーには, {= MMULT(B5:C6,F5:F6)} が表示されて,計算結果は次のようになる。
| 逆行列 | 0.090909 |
0.363636 |
1 |
||||
-0.18182 |
0.272727
|
2 |
この結果は,与えられた2元連立1次方程式の解はx=1,y=2であることを示している。この解が正しいことを検算してみなさい。
練習問題6.1: 上の連立方程式において,係数行列Aと解の行列Xの積を計算すると,定数項の行列Cになるはずである。この計算AXを実際に行ないなさい。
練習問題6.2: 次の連立1次方程式を,逆行列を使って解きなさい。
| (a) | 3 x + 4 y | = 15 |
| 5 x + 2 y | = 11 |
| (b) | x + 2 y + z | = 2 |
| 3 x + 5 y + 3 z | = 6 | |
| 3 x + y + 4 z | = 10 |
| (c) | 3 w - x + y + z | = 10 |
| w + x - 4 y - 2 z | = -11 | |
| 2 w - 2 x + 3 y - 4 z | = -23 | |
| 7 w + 2 x + 9 y - z | = 23 |
| lec.53) Go to TOP | -----(c)TK |