経済的発注量(EOQ)

learn menu
Joannes Vermorel 著、2012年1月

EOQ は、補充のための発注数量であり、総在庫コストを最小化します。在庫レベルがリオーダー-ポイントに達したときに補充発注が作動します。EOQ は、購入コスト(数量割引を含む場合もある)、在庫保持コスト、発注コストなど、複数のコストの組み合わせを最小化するために計算されます。この発注数量の最適化は、最適な_閾値_を見つけて再発注を引き起こすことに重点を置いた安全在庫の最適化と相補的です。

2020年7月更新: EOQ はかなり古典的な視点であり、将来の需要が完全に把握され、かつ一定であるという_定常_状態に深く根ざしています。以下に示すこれらの「教科書的」サプライチェーン向けの数式は、根本的な考え方が設計上破綻しているものです。各追加在庫単位の限界的な経済貢献度の評価に結びつく確率的需要予測のほうが、はるかに優れたアプローチです。もはや EOQ 概念の使用は推奨いたしません。

モデルと数式

古典的な EOQ の数式(以下のウィルソン数式参照)は、発注ごとに一定と仮定される発注コストと在庫保持コストとの間のトレードオフです。この1913年に考案された数式は極めて有名ですが、現代のサプライチェーン環境ではこの数式の使用は避けるべきです。この数式の背後にある数学的前提は、今日では単に正しくありません。

歴史的な数式は、発注行為のコストが主要なビジネスドライバーであると仮定しています。かつては1913年に、帳簿管理のために大量の事務員が必要だったこともあり、これは重要な要素でしたが、在庫管理ソフトウェアや場合によってはEDIの導入により、この要素は通常ごくわずかとなっています。その結果、この数式による「最適化」はほとんど意味を持たず、大量発注時に利用可能なプライスブレイクも完全に無視されてしまいます。

Excelシートのダウンロード: eoq-calculator.xlsm (計算の例示)

そこで、ここでは在庫保持コストと数量割引のトレードオフを最適化するEOQ 数式の変形を提案します。ここで変数を導入します:

  • $${Z}$$ をリード需要とする。
  • $${H}$$ を、リード-タイムの期間中の単位あたりの_在庫保持コスト_とする。(1)
  • $$\delta$$ を、再発注点に達するために必要な在庫数量の差分とする。(2)
  • $${P}$$ を発注数量 q に依存する単位あたりの購入価格とする。

(1) ここで考慮される時間の範囲はリードタイムです。したがって、より一般的な_年間_在庫保持コスト $$H_y$$ の代わりに、$$d$$ を日数で表したリードタイムと仮定して $$H = \frac{d}{365}H_y$$ を考えます。

(2) この差分数量は、手元在庫 $$q_{hand}$$ と発注済み在庫 $$q_{order}$$ の両方を考慮する必要があり、関係式は $$\delta = R - q_{hand} - q_{order}$$ となります。ここで $$R$$ は再発注点を表します。直感的には、$$\delta+1$$ が望ましいサービス-レベルを維持するために必要な最小発注数量です。

$$Q = \underset{q=\delta+1..\infty}{\operatorname{argmin}}\left(\frac{1}{2}(q-\delta-1)H+Z\mathcal{P}(q)\right)$$

一見複雑に見えても、この関数は上記のシートに示されるように、Microsoft Excel で容易に計算することが可能です。

発注コストはどうする?

一見、発注コストがゼロであると仮定しているかのように見えるかもしれませんが、そうではありません。実際、ここで導入する枠組みは比較的柔軟であり、発注コスト(存在する場合)は価格関数 $$\mathcal{P}$$ に組み込むことができます。

コスト関数

数量割引を考慮した発注数量のコスト関数をモデル化するために、再発注点 $${R}$$ を導入します。在庫コストは、在庫_保持_コストと_購入コスト_の合計、すなわち

$$C(q)=\left(R+\frac{q-\delta-1}{2}\right)H+Z\mathcal{P}(q)$$

実際、リードタイム期間にわたる償却的観点から見ると、発注すべき総数量は リード-デマンド である $${Z}$$ となります。

その後、在庫レベルは常に変動しますが、厳密な最小発注(すなわち $${q=\delta+1}$$)を仮定すると、時間平均の在庫レベルは再発注点である $${R}$$ に等しくなります。そして、実際に $${\delta+1}$$ より大きい発注数量を考慮しているため、追加で発注された数量は平均在庫レベルを上昇させ(次の再発注点に到達する時刻を遅らせる)効果があります。

数式 $${\frac{q-\delta-1}{2}}$$ は、リードタイム中にリード需要が均等に分布していると仮定した場合の、発注に起因する在庫シフトを表します。因子 $${1/2}$$ は、発注数量が $${N}$$ 増加した場合、その平均在庫レベルが $${N/2}$$ 増加することによって正当化されます。

コスト関数の最小化

$${C(q)}$$ を最小化するために、まず $${q}$$ に依存しない部分を分離して考えます:

$$C(q)=\left(R+\frac{q-\delta-1}{2}\right)H+Z\mathcal{P}(q)$$

$${RH}$$ が $${q}$$ に依存しないため、$${C(q)}$$ の最適化は $${C^*(q)}$$ の最適化と同じであり、

$$C^*(q)=\frac{1}{2}(q-\delta-1)H+Z\mathcal{P}(q)$$

この文脈では、数量割引関数 $$\mathcal{P}$$ が任意の関数であるため、この数式を最小化するための直接的な代数解は存在しません。しかし、それがこの最小化問題の解決が困難であることを意味するわけではありません。

$${C^*(q)}$$ の単純な最小化は、(素朴な)大規模な数値探索、つまり大きな範囲の $${q}$$ 値に対して関数を計算することで実現できます。実際、ほとんどの企業では1,000,000単位を超える発注数量は必要とせず、通常のデスクトップコンピュータ上のExcelで $${q=1..1,000,000}$$ の全コスト値を探索するのに1秒もかかりません。

しかし、実際には、$$\mathcal{P}(q)$$ が厳密に減少する関数であると仮定すれば、この計算は大幅に高速化できます。つまり、発注数量が増加するにつれて単位あたりの価格が厳密に下がるということです。実際、$$\mathcal{P}(q)$$ が減少する場合、$${q=\delta+1}$$ から数値探索を開始し、反復計算を行い、$${C^(q+1) > C^(q)}$$ となった時点で探索を停止することができます。

実際、単位価格が数量に応じて上昇することはほとんどありませんが、出荷がパレットやその他、特定のパッケージサイズに適したコンテナ向けに最適化されている場合、曲線上で局所的な_上昇_が見られることがあります。

上記のExcelシートでは、単位価格が数量に応じて厳密に減少すると仮定しています。もしそうでない場合は、EoqVD() マクロを編集して素朴な範囲探索に戻してください。

ウィルソンの数式

最も有名な EOQ 数式は、1913年に開発されたウィルソンの数式です。この数式は次の前提に依存しています:

  • 発注コストは一定である。
  • 需要率が既知であり、年間を通じて均等に分散している。
  • リード-タイムは固定されている。
  • 購入単価は一定、すなわち割引は適用されない。

以下の変数を導入します:

  • $${D_y}$$ を年間需要量とする。
  • $${S}$$ を発注あたりの固定_一律_コストとする(単位あたりのコストではなく、発注および出荷のための操作に関連するコスト)。
  • $${H_y}$$ を年間在庫保持コストとする。

これらの前提の下で、ウィルソンの最適EOQは:

$$Q=\sqrt{\frac{2D_yS}{H_y}}$$

実際には、リードタイム期間の需要予測レート(すなわち、リード需要 $${Z}$$ をリードタイムで割ったもの)である $${D}$$ に $${D_y}$$ を置き換え、年間在庫保持コスト $${H_y}$$ をリードタイム期間中の在庫保持コストである $${H}$$ に置き換える、より局所的に調整された(時間的)バリアントの使用を提案します。

2つのEOQ数式の比較

小売や卸売の場合、数量割引を重視した当ページ冒頭で提示した_アドホック_なEOQ数式のほうが、ウィルソン数式よりも適しており、したがって利益率が高いと考えられます。一方、製造業の場合は状況に依存します。特に、発注が新たな生産を引き起こす場合、発注コスト(生産準備費用)が大きく発生し、その後の限界単価にほとんど(または全く)利益がもたらされない可能性があります。そのような状況では、ウィルソン数式の方が適切です.