• 検索結果がありません。

離散事象シミュレーションの例、在庫管理

ドキュメント内 ii (ページ 87-93)

コンビニの商品管理のように、日々の需要が変動する場合の在庫管理の問題は離散事象システ ムの例です。ランダムな需要が発生するという事象により、在庫量という(システム)変数が変 化し、それに応じて発注量を決める、という離散事象システムの動きを確率シミュレーションで 分析してみましょう。

8.4.1 問題の認識、把握、基礎データの収集

次のような問題状況を想定して、シミュレーションの考え方を説明しましょう。毎日の需要は 10個前後でばらついている。安全を見越して早め早めに発注しているが、どうも在庫がだぶつ

き気味なので、発注をもう少し控えたほうがよさそう、しかし、あまりけちをしても在庫切れを おこして売り損なうのは損。さて、どのようにすればよいのかという問題です。

毎日の需要が一定ならば、経済的発注量の公式によって、保管費用、発注費用の合計が最小に なるという意味の最適な発注量と発注間隔が理論的に計算できました。需要が変動する場合は、

機会損失費用とのバランスで決まってくるはずですが、それを95%安全在庫量という確率の問 題に置き換えて問題を解いていました。また、そこでは正規分布の連続量需要が仮定されていま した。今の場合、そのような仮定が成り立っていないので、実際にそれがどれくらいの品切れを 引き起こすのか、調べてみる必要がありそうです。

毎日閉店後に在庫調べを行い、在庫量がある値s以下ならば発注します。発注したものは翌朝 開店前に届くので、発注量は翌朝の在庫量がある一定量Sになるよう決めます。このような在庫 管理方式は(s, S)方式と呼ばれます。sを発注点、Sを目標初期在庫量と言います。

商品を1日1個在庫する(翌日に繰り越す)ことによってかかる保管費は1イェン、固定発注 費(商品の購入費を除く)は1回につき500イェンです。購入単価は20イェン、販売価格は50 イェンです。いくらまとめて発注しても仕入れの割引はありません。需要があるのに売る商品が 無い場合は、商品1個あたり10イェンの機会損失費がかかるものとします。発注費が結構かか るので、保管費がかかったとしても在庫を持っていた方が有利ですが、それでもあまり在庫を抱 えるのは得策ではありません。保管費と発注費をどのようにバランスさせて発注点s、目標初期 在庫量Sをどう決めれば良いか、というのが問題です。

一日の需要量は過去100日間のデータがあり、それをみると、最小4,最大15で、8から12 のあたりのデータが多いことが分かっています。下がそのデータです。

12 7 10 11 11 7 11 10 8 9 8 8 15 9 10 12 11 9 11 10 13 12 11 8 14 11 8 12 8 8 9 11 12 13 9 9 12 8 10 10 9 12 6 4 10 10 10 11 14 13 8 11 8 8 8 14 8 8 9 13 11 11 7 8 12 5 14 11 8 10 8 7 14 6 12 11 11 11 12 7 11 9 9 13 9 9 10 13 8 11 11 10 11 10 13 10 8 12 10 6

8.4.2 入力分布の決定

この問題をシミュレーションで解くためには毎日の需要量をコンピュータで擬似的に作り出す 必要があります。過去のデータが100個与えられていますから、一つ一つのデータを別々のカー ドに書いたものを作り、それをよく切ってランダムに1枚ずつ抜き出したものを記録したもの と,上の実測データの代わりに置いておいても、その違いは気がつかれないでしょう。過去の データとカードの抜き取り実験でもっともらしい架空のデータが得られそうです。

データがたくさんあれば、そういうやり方でもかまいませんが、上で与えられているデータの 場合、たとえば、8,11の出現頻度が他に比べて多いように感じられます。実際その度数分布を計 算し、ヒストグラムを描いたのが下の図です。確かに、8,11の度数がその付近のデータに比べて 多くなっています。もし、それが必然ならばよいのですが、多くの場合このようなでこぼこは、

データが少数のためのばらつきにすぎないでしょう。そうすると、カード式ではそのばらつきを 固定してしまい、8,11の出現頻度が常に多いデータが再現されてしまいます。これは好ましく ありません。

そこで、多くの場合は、このデータをもとに、平均分散など特徴のある量を計算し、よく知ら れている確率分布のどれかに従うものと仮定するのが普通です。上の場合のように左右対称の富

士山型分布の場合は正規分布がよく使われます。ヒストグラムに書かれている折れ線は、データ から計算された平均値10、標準偏差2の正規分布の密度関数から計算されたものです。

正規分布に従うランダムデータをExcelで生成するためには、次のような関数を使います。

=NORM.INV(RAND(),heikin,hensa)

「heikin,hensa」は平均値と標準偏差です。今の場合、離散量で、マイナスは起きないとしてい ますので、標準偏差が大きくて、負の数が生成されそうな場合は、さらにつぎのような関数が必 要になります。

=ROUND(MAX(NORM.INV(RAND(),heikin,hensa),0),0)

ここで、「ROUND(x,0)」はxの小数点以下を四捨五入するという関数、「MAX(x,0)」はx0 大きい方を表す関数です。

練習8.4 上の需要データを読み取り、平均と標準偏差を計算しなさい。その平均と標準偏差を 持つ正規分布の密度関数をヒストグラムに重ねて描きなさい。

練習8.5 Excelで平均10、標準偏差2の離散正規分布に従う乱数を100個生成し、その度数分 布を計算し、ヒストグラムを描きなさい。再計算キーを押して何パターンか生成し、ヒストグラ ムの形状の特徴を説明しなさい。入力する式、手順は以下の通り。

セルB7:B106に「=ROUND(NORM.INV(RAND(),10,2),0)

セルE3に「=average(B7:B106)、セルE4に「=stdev(B7:B106) セルD8:D28に0から20の通し番号、

セルE8:E28を選択して、セルE8に「=FREQUENCY(B7:B106,D8:D28)」を入力し、Ctrlキー とShiftキーを押したままEnterキーを押す。

8.4.3 モデル化

コンピュータシミュレーションでは、どういう客がどういう商品をいつ頃買いに来るか、とい うような具体的なデータは必要が無く、店を明けたときに在庫量がいくつあったか、その日の需 要がいくつだったか、というような、「数」だけが重要です。その日の朝の在庫量と1日の需要 量が分かればその日の閉店時の在庫量は「計算」できますから、そこで発注すべきかどうかを決 めることができます。その日の朝の在庫量は前日の最後の在庫量に入荷量を加えたものになりま す。ということは、毎日の需要量のデータが与えられると、足したり引いたり、比較したり、と いう「計算」だけで在庫量の動きが分かるということになります。これがシミュレーションの考 え方です。

シミュレーションをコンピュータに代行させるためには、余計なことは全部削ぎ落として、コ ンピュータプログラムに書けるような論理手順にまとめなければいけません。それがシミュレー ションモデルです。シミュレーションモデルを作るために、ここでの問題の仮定を整理しておき ます。毎日閉店直後に在庫量を調べ、それがs以下になっていたら、目標在庫量Sとその時の在 庫量の差を発注するという(s, S)在庫管理方式によって在庫管理します。

在庫を1日繰り越すと保管費がかかり、発注にはもちろん費用がかかるので、在庫を抑えて発 注回数を増やすのか、発注を控えて在庫を持った方が良いのか、それが問題です。具体的には目 標初期在庫量Sと発注点sを決めるのが問題です。

n日目の開店前の在庫量をW(n)、閉店直後の在庫量をZ(n)とし、n日目の需要量(在庫が なくて売り損なったものも含める)をD(n)として、問題の仮定を式に表すと,次のようになり ます。Z(n)D(n)W(n)以下ならば単純な引き算で計算され、需要が在庫を上回って品切 れになった場合は0です。W(n)は前日の閉店直後の在庫量Z(n−1)sより大きければそれ が引き継がれ、さもなければ入荷量が加わります。これらを式で表すと次のようになります。

Z(n) =



, D(n)≤W(n) , D(n)> W(n)

W(n) =



, Z(n−1)> s , Z(n−1)≤s

費用は次の通り。1個売れると50もうかります。翌日に繰り越した在庫がある場合は、保管 費として、在庫量×1、発注した場合は発注費として発注量×20の購入費用と固定発注費500 がかかり、品切れがあった場合は機会損失費として品切れ個数×10がかかります。その日の粗 利は売り上げ収入から保管費、発注費、機会損失費を引いたものです。n日目の売り上げ収入を A(n)、保管費をB(n)、発注費をC(n)、機会損失費をE(n)とし、n日目の粗利(収入マイナス

費用)をP(n)とすると、それらは次の式のように計算できます。

A(n) =

B(n) = C(n) =

E(n) =

P(n) =A(n)−B(n)−C(n)−E(n)

毎日の需要は独立で、同じ確率分布に従うものとします。データを参考にして、ここでは平均 10、標準偏差2の正規分布(を離散化したもの)に従うと仮定します。正規分布はマイナスにな ることもあり得ますが、この場合はほとんどありませんので、気にしなくて結構です。

これらの式を使うことにより、最初の在庫量Z(0)と毎日の需要量D(n)が与えられれば、在 庫量の動きは全部計算できて、毎日の粗利が計算されることを確かめてください。

8.4.4 プログラミング、デバッグ

コンピュータに必要な計算をさせるためには、コンピュータが理解できる言葉に直してやる 必要があります。その翻訳作業をプログラミングといいます。ここではExcelを使いますが、

C, Java, V isual Basicなど、シミュレーションに限らず、いろいろな計算に用いられる汎用言 語を使ってももちろんかまいません。あるいは、上で見たようなシミュレーション特有の計算処 理を効率的に行なえるような専用言語が開発されているので、モデルが複雑な場合は、利用する とよいでしょう。良く知られているものとしてはSLAM,SIMAN,Simul8などがあります。

この段階で、手間取るのは、意図したとおりにプログラムが動いてくれることを確認すること です。これをデバッグといいます。デバッグの困難さは、あまり丁寧に説明しなくても、Cのプ ログラミングで経験済みでしょう。その際もアドバイスしたように、いっぺんにバグを無くそう と思わずに、少しずつきちんと動く範囲を拡大して行く、という気長な態度が成功への近道です。

Excelで計算する場合は、A列に日付の通し番号、B列に朝の在庫量(W(n)C列に毎日の 需要量(D(n)D列に閉店直後の在庫量(Z(n)E列に発注量(R(n)F, G, H, I, J列に それぞれ収入(A(n)、保管費(B(n)、発注費(C(n)、機会損失費(E(n)、粗利(P(n))を 入力し、最後に粗利の平均値を計算したり、品切れ率を計算するような式を目立つところに入力 します。発注点や目標初期在庫量、平均需要、需要の標準偏差のように、あとで値を変える可能 性のあるパラメータについては、シートの最初の方に入力し、数式で必要とする場合は入力した セルを絶対参照するようにします。そうすれば、パラメータの値を変えた場合の粗利がたちどこ ろに再計算されて、パラメータの影響を簡単に調べることができます(What-If分析)

8.4.5 シミュレーションの計算

プログラムができたら(Excelのシートが完成したら)モデルのパラメータを決め、実行しま す。ここで決めなければいけないパラメータは、発注点sと目標初期在庫量Sの二つです。二つ を決めると平均粗利が計算できるわけですから、平均粗利zは発注レベルsと目標在庫量S 2変数関数z=f(s, S)と見ることができます。目標はこの関数の最大値とそのときのs, Sの値

ドキュメント内 ii (ページ 87-93)