12  在庫モデル

ヒント予備知識
  • 微分積分
  • 確率統計

商店・工場・倉庫などで,原材料・部品・製品などを適切に管理することを在庫管理(Inventory Management)という.一般的に,在庫管理の目的は,顧客の需要を満たしつつ,在庫に関わる費用を最小化することである.

ノート

豊田自動車が提唱したジャストインタイム(Just In Time, JIT)は,生産方式としてよく知られている.

JIT とは必要なものを,必要な時に,必要な量だけ生産することである.JIT の目的は,在庫を最小限に抑え,効率的な生産を実現することである.

アメリカの研究者らは,その生産方式を体系化し,リーン生産方式(Lean Manufacturing)という概念を提唱した.

在庫量が多すぎると,保管費用がかかる.逆に,在庫量が少なすぎると,欠品が発生し,顧客の需要を満たせなくなる.在庫管理は次の二つの問題を決定する.

  1. どのくらいの量を発注するか?(発注量)
  2. いつ発注するか?(発注時期)

科学的在庫管理(Scientific Inventory Management)では,これらの問題に答えるために,次の手順で在庫管理を行う.

  1. 在庫システムを数学モデルとして定式化する.
  2. 最適な発注量と発注時期を決定する.

練習 12.1 前回スーパーに行ったときに買った商品(例えば,牛乳,卵など)について考える.需要と在庫の観点から,次の質問に答えよ.

  1. どのくらいの量を買ったか?
  2. なぜその量を買ったのか?
  3. どのタイミング・頻度でその商品を買うか?

12.1 在庫量

需要(demand)
ある期間に顧客が購入したい商品の量.通常,\(d\) で表す.
手持ち在庫(on-hand inventory)
ある時点で,実際に手元にある在庫の量.\(OH\) で表す.
バックオーダー(backorder)
手持ち在庫がなく,満たせない需要.\(BO\) で表す.
在庫量(inventory level)
ある時点での在庫の量.\(I\) で表す.

一般,\(BO\)\(OH\) は次のように表される.

\[ OH = I^+ = \max(0, I) \]

\[ BO = I^- = \max(0, -I) \]

例 12.1 手持ち在庫が \(OH = 50\),需要が \(d = 30\) のとき,在庫量は次のように計算される.

\[ I = 50 - 30 = 20 \]

手持ち在庫が \(OH = 50\),需要が \(d = 70\) のとき,在庫量は次のように計算される.

\[ I = 50 - 70 = -20 \]

このとき,手持ち在庫は

\[ OH = I^+ = \max(0, I) = 0 \]

となる.バックオーダーは

\[ BO = I^- = \max(0, -I) = 20 \]

となる.

12.2 在庫モデルの分類

在庫モデルは,次のような要素で分類される.

需要(demand)
需要が決定論的 (Deterministic) か確率的(Stochastic)か.
観測(review)
在庫量を連続観測 (Continuous Review) するか,周期観測 (Periodic Review) するか.連続観測の場合,在庫量が連続的に観測でき,いつでも発注が可能である.周期観測の場合,一定の期間(例えば1週間)ごとに在庫量を観測する.
リードタイム(lead time)
発注から納品までの期間.調達期間とも呼ばれる.リードタイムが決定論的か確率的か.また,リードタイムが0かどうか.在庫モデルを単純化するために,リードタイムを0とし,発注から納品までの期間を無視することもある.
バックオーダー(backorder)
バックオーダーが許容されるかどうか.需要が手持ち在庫を上回った場合,バックオーダーが許容されると,欠品が発生しても,後で需要を満たすことができる.バックオーダーが許容されない場合,欠品が発生すると,上回った需要は失われ,機会損失が発生する.
計画期間(planning horizon)
単一期間 (Single Period) か,複数期間 (Multi Period) か,無限 (Infinite) か.

以下の表に,需要と観測に基づく,古典的な在庫モデルを示す.

在庫モデル 需要 観測
EOQモデル 決定論的 連続観測
Wagner-Whitin 決定論的 周期観測
安全在庫 確率的 連続観測
新聞売り子問題 確率的 周期観測

12.3 在庫の費用

ここでは,在庫に関わる費用を紹介する.

発注費用(ordering cost)
発注量に関わらず,1回の発注にかかる費用.調達費用,固定費用(fixed cost)などとも呼ばれる.通常,1回の発注にかかる費用を \(K\) とする.
購入費用(purchase cost)
商品を購入するためにかかる費用.通常,単位あたりの購入費用を \(c\) とする.
欠品費用(stockout cost)
需要が手持ち在庫を上回った場合に発生する費用.通常,単位あたりの欠品費用を \(p\) とする.
保管費用(holding cost)
在庫を保管するためにかかる倉庫費用,保険費用,税金,機会費用など.通常,単位時間あたりの1単位あたりの保管費用を \(h\) とする.

例 12.2 (発注費用と購入費用) 毎回の発注量を \(Q\),1回の発注にかかる費用を \(K\),単位あたりの購入費用を \(c\) とする.1回の発注にかかる総費用は,次のように計算される.

\[ K + cQ \]

となる.

例 12.3 (欠品費用) 在庫量を \(I\),需要を \(d\),単位あたりの欠品費用を \(p\) とする.欠品費用は次のように計算される.

\[ p (d - I)^+ \]

\(p = 10\)\(I = 50\)\(d = 70\) のとき,欠品費用は次のように計算される.

\[ p (d - I)^+ = 10 (70 - 50)^+ = 200 \]

\(p = 10\)\(I = 50\)\(d = 20\) のとき,欠品費用は次のように計算される.

\[ p (d - I)^+ = 10 (20 - 50)^+ = 0 \]

例 12.4 (在庫量が一定の保管費用) 1日あたり1単位の在庫を保管するために,\(h\) の費用がかかるとする.30日間,50単位の在庫を保管するための総保管費用を計算せよ.

保管費用は次のように計算される. \[ 30 \times 50 \times h = 1500h \]

下の図では,横軸が時間,縦軸が在庫量を表す.

コード
import matplotlib.pyplot as plt
import numpy as np

t = np.linspace(0, 30, 1000)
inventory = np.full_like(t, 50)

# Plotting the inventory level
plt.fill_between(t, inventory, color="lightgray", alpha=0.5, label="Inventory Level")
plt.plot(t, inventory, label="Inventory Level", color="black", linewidth=2)
plt.xlabel("Time")
plt.ylabel("Inventory Level")
plt.axhline(0, color="gray", linewidth=1)
plt.tight_layout()
plt.show()

一般的に,保管費用は次の式で計算される.

\[ \text{保管費用} = \text{面積} \times h \]

例 12.5 (在庫が時間とともに変化する保管費用) 通常,在庫量が定数ではなく,時間とともに変化する.ここでは,在庫量が時間とともに線形に減少し,0になると在庫が補充される場合を考える.毎回の発注量を \(500\) とする.

下の図に示すように在庫量が時間とともに変化するとする.6 日間の保管費用を計算せよ.

コード
# Parameters
d = 250  # Demand rate
Q = 500  # Order quantity
T = Q / d  # Cycle length
t = np.linspace(0, 2.999 * T, 1000)

# Inventory level over time
inventory = np.maximum(0, Q - (d * t) % Q)

# Plotting the inventory level
plt.fill_between(t, inventory, color="lightgray", alpha=0.5, label="Inventory Level")
plt.plot(t, inventory, label="Inventory Level", color="black", linewidth=2)
plt.xlabel("Time")
plt.ylabel("Inventory Level")
plt.axhline(0, color="gray", linewidth=1)
plt.ylim(bottom=0, top=Q + 200)
plt.tight_layout()
plt.show()

保管費用は \(\text{面積} \times h\) で計算される.それぞれの三角形の面積は \(\frac{1}{2} \times 500 \times 2\) であるため,6 日間の保管費用は次のように計算される.

\[ \frac{2 \times 500}{2} \times 3 \times h \]

12.4 在庫方策

確率的在庫モデルにおいて,一つ重要な概念は在庫方策(inventory policy)である.在庫方策は,在庫の状況に応じて,在庫管理のルールを定めるものである.代表的な在庫方策を以下に示す.

  1. \((r, Q)\) 方策:在庫量を連続的に観測し,在庫量が発注点 \(r\) 以下になったときに発注量 \(Q\) を発注する方式である.発注点方式とも呼ばれる.
  2. BSP 方策(Base Stock Policy):在庫量を定期的に観測し,在庫量が基準在庫 \(S\) 以下になったときに,在庫量を \(S\) まで補充する方式である.定期発注方式とも呼ばれる.
  3. \((s, S)\) 方策:在庫量を定期的に観測し,在庫量が発注点 \(s\) 以下になったときに,在庫量を補充点 \(S\) まで補充する方式である.

一部の確率的在庫モデルにに対し,これらの在庫方策は最適であることが知られている.その場合,在庫方策が持つパラメータを最適化することで,在庫の期待コストを最小化することができる.

12.5 練習問題

  1. 在庫量 \(I = 40\) のとき,需要 \(d = 25\) が発生した場合の手持ち在庫 \(OH\) とバックオーダー \(BO\) を計算せよ.
  2. 在庫量 \(I = -30\),需要 \(d = 10\) のとき,手持ち在庫 \(OH\) とバックオーダー \(BO\) を計算せよ.
  3. 1回の発注にかかる費用 \(K = 1000\),単位あたりの購入費用 \(c = 50\),発注量 \(Q = 200\) のとき,3回の発注にかかる総費用を計算せよ.