モンテカルロ法で保管効率を確率的にシミュレーション【サンプル付き】

2023年10月11日

【ゆっくり解説】Youtubeはじめました!

モンテカルロ法で確率的にシミュレーションを行う意義

前回の記事で、倉庫の保管レイアウトで保管効率が違ってくる場合があることを、シミュレーションで確認しました。

>> 倉庫レイアウトの違いによる保管効率をシミュレーションする方法【サンプル付き】

 

しかし、これはある1つの出荷パターンでのシミュレーション結果に過ぎません。

出荷数は日々変動しますので、例え1週間の短い期間であっても、出荷パターンがぴったり一致することは通常考えられません。

出荷パターンが変われば、同じロジックで発注していたとしても発注数が変わります。

その結果、最小発注数量に応じて入荷数が変わるため、入荷ロットごとに保管する場合、保管効率が変わってくるのです。

 

従って、色々な出荷パターンでシミュレーションしないと、将来の保管効率を予測できません。

かと言って、むやみやたらに色々な出荷パターンでシミュレーションしても意味がありません。

日々の出荷数は正規分布に近似できることが分かっているのですから、平均標準偏差は過去データから算出して、それを使うべきです。

つまり、平均と標準偏差を指定した乱数を日々の出荷数として使ってシミュレーションするのです。

そして、シミュレーションを何百回、何千回と行った後にその平均を調べれば、将来の保管効率を予測できます。

このようなやり方はモンテカルロシミュレーションと呼ばれます。

 

数式で解けない、もしくは数式化することが難しい現象を予測するのに便利な手法です。

今回は、この手法を使って、最小発注数量保管効率にどんな影響を与えるかを予測してみます。

 

この記事の最後でプログラムファイルを無料ダウンロードできます。

 

正規分布乱数の発生方法

正規分布に従う乱数をエクセルで発生させるには、2つの関数を使います。

  1. RAND()
  2. NORM.INV(確率, 平均, 標準偏差)

NORM.INV関数は、累積分布関数の逆関数です。

エクセルを使って正規分布の乱数を生成する方法をわかりやすく解説

 

RAND関数は、0から1までの数をランダムに発生します。

例えば、「=RAND()」とA1セルに入力してEnterキーを押せば、ある時は0.965874がA1セルに表示され、またある時は0.458654が表示されたりします。

重要なのは、0から1の間の数に限るということです。

 

確率は0から1の数ですね。

NORM.INV関数は、確率を指定すれば、それに対応する正規分布の数を返してくれる関数です。

正規分布の形は平均と標準偏差によって決まりますので、平均と標準偏差も併せて指定してあげる必要があります。

 

これらの関数を使うと、例えば平均110、標準偏差69の正規分布に従う乱数を発生させたい時は、

=NORM.INV(RAND(),110,69)

と入力すれば良いことになります。

 

売上数量を正規分布の乱数にする

前回までに作ったプログラムでは、売上は過去データで固定していました。

 

今回は、これを乱数データに変えます。

エクセルの乱数は同じシート上でデータが変わるたびに新しい乱数を発生させますので、1行ずつシミュレーションデータを書き込んでいくたびに売上データが変わってしまいます。

これではシミュレーションになりませんので、違うシートで乱数を発生させ、それを「値だけ貼り付け」でこの計算シートにコピペすることにします。

 

さて、実際に他のシートで乱数を発生させると、次のようなデータが表示されます。

マイナスの数が含まれていますね。

今回は平均110、標準偏差69の正規分布に従う乱数を発生させていますので、確率は低いのですがマイナスの数も出てしまうのです。

しかし売上はプラスの整数でないといけませんので、マイナスの数はゼロになるように、隣の列に

=IF(H4<0,0,H4)

と入力しておきます。

すると次のようにマイナスはゼロになります。

このように発生させた乱数を、計算シートの売上の列に「値だけ貼り付け」して1回分のシミュレーションを行います。

そして、その結果を別のシートにコピペします。

これを500回繰り返せば、500の出荷パターンについてのシミュレーション結果が得られます。

 

モンテカルロ法でシミュレーションする

シミュレーション条件

今回のシミュレーション条件は下記の通りです。

  1. 日々の出荷数は、平均110、標準偏差69の正規分布に従う
  2. 発注間隔2日、納品リードタイム3
  3. 許容欠品率1%
  4. 同一入荷ロットの保管スペースの最小単位は3パレット
  5. 1パレット当たりの商品積載数量は50

 

そして、入荷ロットごとに分けて保管する場合に、分けないで保管する場合に比べて、保管効率が何%に落ちるかを予測します。

最小発注数量は1個、50個、100個、150個、200個、250個、300個に変化させます。

それぞれの場合について、500の出荷パターンでシミュレーションし、保管効率の分布をヒストグラムにして比較してみましょう。

 

シミュレーション結果

結果は次の通りです。

 

最小発注数量によって、保管効率の平均もばらつきも大きく異なっていることが分かります。

平均をまとめると下表のようになります。

 

保管効率に関する考察

1パレット当たり50個、3パレット分で1ロケーションになっていますので、1ロケーション当たり150個まで保管することができます。

最小発注数量が150個の場合、入荷数は150の倍数になります。

ですので、入荷した商品は過不足なく保管できます。

その後、徐々に出荷されますので保管効率は落ちていきますが、それは他の最小発注数量の場合も同様です。

従って、最小発注数量が150個とその倍数である300個の場合は、保管効率が良くなります。

 

ところが最小発注数量が200個の場合、入荷した時点で50個が半端になり、150個保管できるロケーションに50個しか保管できません。

後日入荷する商品はロットが違いますので、空いている100個の箇所には保管できません。

しかしこの傾向は、最小発注数量が250個の場合は、マシになります。

なぜなら、入荷した時に半端になる数量が100個ですので、ムダになるスペースが50個分で済むからです。

そのため保管効率は最小発注数量250個、200個の順に悪くなります。

 

最小発注数量が150個より小さい場合はどうでしょうか?

上記のロジックで考えると、100個、50個、1個の順に悪くなるように思えます。

しかし結果は、その逆になっています。

これは、最小発注数量が50個の場合、入荷数が50個になるとは限らず、100個や150個になる時もあるからです。

最小発注数量が1個の場合には、120個や148個など更に150個に近い入庫数になる可能性が高くなります。

そのため、最小発注数量が小さいほど、保管効率が良くなるのです。

 

このようなことは少し考えれば分かることですが、後付けの解釈にすぎません。

また、どのくらいの割合で保管効率が変わるかということは、シミュレーションなしでは予測できないことがお分かりいただけると思います。

 

まとめ

モンテカルロシミュレーションは有用ですね。

更に名前も洒落てますね。

カジノで有名な国家モナコ公国の4つの地区の1つであるモンテカルロにちなんで名付けられたと言われています。

 

管理人はこのモンテカルロシミュレーションをよく使います。

物流では物量を自分たちでコントロールできないことがほとんどです。

しかし、過去データから大体の傾向は掴めます。

それが平均標準偏差です。

これを使って乱数を発生させてシミュレーションすれば、将来の物量を占うことができます。

しかも、その乱数は一瞬に作れますので、1回のシミュレーションもすぐに終わらせることができます。

ですので、500回、でも1,000回でも繰り返せます。

そして、これくらいの回数を繰り返せば、予測値はかなり収束してきます。

 

サイコロを6回振ったところで、それぞれの目が1回ずつ出ることはむしろ稀ですが、1,000回振れば、それぞれの目が出る回数は同じくらいになっていくでしょう。

これと同じことで、何回もシミュレーションを繰り返せば、予測値はかなり確かなものになるのです。

 

今回のプログラムファイルも無料でダウンロードできます。

著作権フリーですので、ご自由にお使い下さい。