グローバルSCMにおける生産配分・出荷計画の最適化(ナップサック問題)について

【はじめに】 
 本記事は、過去に掲載したSCM関連記事の続きです。

 前回までの記事では、サプライチェーンの最終消費地となる各国の販売チャネルにおいて、最終需要地を起点に、モデル化した仮想のPSI計画(定期発注方式の在庫管理)を連鎖させて、供給元のマザープラントに向かって需要情報を伝達して、サプライチェーン計画を整合させるアプローチ(ここでは、Backward Planningと呼ぶことにします)をご紹介しました。

 今回は、グローバル・サプライチェーンの供給元となるマザープラント側において、最終消費地から集まって来た需要情報(週次の出荷要求量)に対して、市場価値を最大化させる出荷ロット・仕向地の組合せを求めるという問題について考えてみたいと思います。

 生産配分(出荷優先)の処理イメージは「図A マザープラントにおける生産配分(出荷優先)処理」のとおりです。

画像
図A マザープラントにおける生産配分(出荷優先)処理 

 ここでの検討の対象範囲は、以前の記事で紹介したサプライチェーンの全体イメージに当てはめてみると「図1. マザープラントにおける生産配分・出荷優先の検討範囲」に示す赤枠の中の部分になります。

画像
図1. マザープラントにおける生産配分・出荷優先の検討範囲

 この問題は、実際の業務の観点からは、マザープラントの毎週の出荷計画における出荷優先度の決定、あるいは各仕向け地への生産配分といった問題に相当すると思います。ここでは以降、「生産配分の問題」と呼ぶことにしますが、出荷計画の優先度決定と同じと考えてよいと思います。

今回、この生産配分問題の簡易デモをpythonで実装するにあたって、どのような方法で解くのが良いか検討を進める中で、「表1. 生産配分とナップサック問題の問題特性」のとおり、問題の特性が類似している「ナップサック問題」に置き換えて解くことができるのではないかと考え、pythonの線形計画モジュール(PuLP)を使った簡単なナップサック問題のサンプルコードを参考に試作してみました。
※簡易デモのpythonのコードは、下記のgithubに公開しています。別途githubに掲載したいと思います。
Yasushi-Osugi/PySI_V0R3_mother_plant_Knapsack: PySI_V0R3 is demand plan on supply chain. and production allocation with Knapsack solver. (github.com)

画像
表1. 生産配分とナップサック問題の問題特性

 pythonでの簡易デモの詳細については別途ご紹介させていただくとして、ここではまず、マザープラントの出荷時点での生産配分について、どのような処理が行われているのか、その処理の途中経過をイメージで見ていきたいと思います。

【生産配分の処理イメージ】
 マザープラント側の出荷時点での生産配分の処理イメージを示したのが「図2. マザープラントにおける生産配分・出荷優先の処理推移」です。

図2. マザープラントにおける生産配分・出荷優先の処理推移
図2. マザープラントにおける生産配分・出荷優先の処理推移

なお、実際の生産配分の処理は、ナップサック問題を解く線形計画法のモジュールに渡しているので、コンマ1秒以下で最適解を生成している部分ですが、毎週毎週の処理の様子が分かるように途中にグラフ出力処理を挟んでいます。

「図2. マザープラントにおける生産配分・出荷優先の処理推移」において、W52は、計画の初期状態です。生産配分の問題を週次で、52週から時間を戻る方向に、毎週毎週の生産配分問題を解いていきます。

 図2では、生産配分(ナップサック)問題を週次で解いて、生産平準化している様子を、四半期(=13週)のスナップ・ショットで表示しています。
ここで、毎週の生産出荷枠から外れた出荷要求ロットは、「繰り戻し」して、前週の出荷枠に積み上がるというルールで実装しています。

図中、W39, W26, W12, W0, W-13と四半期の生産配分の途中経過を見ると、積み上がった出荷要求ロット群の中から価値を最大化するロットの組合せが選択されて、徐々に生産が平準化されていく様子が分かります。

このように、ナップサック問題を解くモジュール、knapsack solverを組み込んだ生産配分の動きをpythonの簡易デモとして実装しました。

 余談になりますが、実は、以前の記事でご紹介したサプライチェーン計画では、このW52の初期状態に対して、単に「供給元(マザープラント)における生産を平準化する」という問題設定で、PSI計算に適当なパラメータを設定して生産配分の問題を処理していました。
 今回は、「生産の平準化」と「市場に提供する価値を最大化する」という問題設定で、ナップサック問題に置き換えて生産配分しているので、「最重要顧客からの要請」と「自社の利益」とを考慮して価値を最大化する製品供給が行われることになります。

以下では、この生産配分問題の結果について、もう少し見ていきたいと思います。

【先行生産のスタート時期について】
 供給元(マザープラント)では、例えば、2023年のグローバル需要に対応するためには、2022年の何時の時点から生産を開始するべきかという点が気になります。

画像図3. マザープラントの生産配分・優先出荷の結果

「図3. マザープラントの生産配分・優先出荷の結果」は、最終需要地に着荷する半年前、先行生産する年の26週から生産配分した結果です。
ここでは前提条件として、年間の総生産能力をグローバル総需要の80%に設定して、週次生産の能力を設定しています。この場合、先行生産のスタートは、2022年の年末52週から18週前、2022年の第34週 8月8日~8月14日の週からスタートする必要があることが分かります。

【想定されるシナリオ 在庫方針について】
 供給元(マザープラント)における先行生産のスタート時期が分かると、次に問題となるのが、この先行生産の結果、発生する備蓄在庫をどこで保管するべきかという問題が浮かび上がってきます。

 筆者の経験では、マザープラントの出荷ヤードにグローバル総需要に応える在庫保管を行うことは現実的ではなく、むしろ、マザープラント側では先行生産した製品でも、生産即出荷で、出荷ヤードに完成製品を滞留させない在庫方針を取る企業が多いようです。
 一方で、最終需要地の前線の販売チャネルでは、例えば年末のクリスマス・シーズンの商品在庫を数か月前から在庫保管することは、保管費用や仕入れ費用が余分に発生するため考えにくく、週次や日次の納品要請に迅速に応えて、店舗に納品してくれる体制が望まれます。
 結果、グローバルの域内在庫、あるいは大きな市場をかかえる国では国内の物流拠点在庫において、地域内の需要変動を吸収する保管スペースを確保して、最終需要地のリクエストに俊敏に対応する仕組み、直近の需要変化を予測しながら補充する仕組みなどを整備することになると想定されます。

 このような域内在庫による商品補充の仕組みの中で、商品の売れ行きの良し悪し、商品在庫の流動の様子を供給元(マザープラント)の生産計画にフィードバックをかけることが、生産のアクセル・ブレーキをかける上で重要な判断材料になってくると思います。

 ところで、以前の記事で、「海外の販売会社では、販社の出荷(=実販)情報の変化だけではなく、POSの消費情報(=実需)の動きと(販社から先の)市中在庫の流動が重要になる」というお話をしました。

 つまり、グローバルSCMの在庫モデルとして、二段階(市中在庫と域内在庫)の在庫モデルを想定して、供給元(マザープラント)の需給調整を行うことはグローバル・オペレーションの実態に即していると思います。

【追記】
一方で近年、amazon楽天などのネット販売、メーカーやファッションブランドなどの自社通販のように、市中在庫を排除して、消費者一人一人の個人のスマホからの注文(実需)が、域内や国内の物流拠点の在庫にダイレクトに引当られて、出荷配送指示に直結しているビジネスモデルが増えています。
 EV、電気自動車のネット販売もその一つですが、完成品が市場に流れるアウトバウンド・サプライチェーンにおいては、グローバルに一段階の在庫(域内在庫)モデルで管理される商品が今後、増えていくと思います。

以上から、次のような取り組み仮説を定義することができます。

【グローバルSCMの供給元(マザープラント)における需給調整の仮説】
 最前線の店舗のPOS情報を日々収集して、店舗ごとの日々の消費スピードなどから、実需の変化を予測するとともに、サプライチェーン上の中間在庫として、一段階または二段階の在庫、「市中在庫」または「域内在庫」の流動をシミュレーションすることで、マザープラントにおける製品生産のアクセル・ブレーキ、生産配分(仕向地)の変更など、需給調整の判断を的確に行うことができる。

少し大きな仮説を定義してしまいました。
ただ、問題の全体を把握するという点では、このようなサプライチェーンの全体イメージを持ちながら、グローバルSCMの中の個々の問題に入っていくのが良いのではないかと思います。

次回は、上記の「需給調整の仮説」を構成するいくつかの部分問題の中でも中心的な機能と思われる「生産配分の機能」について、python で実装した簡易デモの詳細を見ていきたいと思います。

ポイントは、サプライチェーンの供給システムを設計する立場からは、需要特性に応じた生産能力の上限と生産スピードの変化幅、中間在庫拠点の在庫バッファーを設定する際の考え方になると思います。

ご紹介してきた生産配分の結果から「図4. マザープラントの供給能力と中間流通の在庫滞留の関係」のように、出荷・流通の在庫変動の様子を可視化することができます。図4では、年間総需要に対して、マザープラントの総供給量が十分にある(120%)場合、等しい(100%)場合、 総供給量が不足している(80%)場合について、それぞれの需給比率=120%, 100%, 80%に対して、流通側の中間在庫(ここでは日本のマザープラントから上海の国内中間在庫の部分をビックアップ)がどのように在庫滞留を発生するのかをPSI計算でシミュレーションして、PSIグラフ表示しています。

画像
図4. マザープラントの供給能力と中間流通の在庫滞留の関係 

また、ITシステムの実装の立場からは、まず「図5. サプライチェーン計画のBackward planとForward planの立案処理(仮説)」のようなサプライチェーン計画の処理の全体像を仮定した上で、サプライチェーン全体に共通する「共通計画単位」common plan unit(注1)を使って、生産配分をナップサック問題(線形計画法)で解くために必要な入力データ
●ナップサックの容量制約
●詰め込む品物の品名、数量、価値
を生成する際の考え方についてもう少し詳しく見ていきたいと思います。

画像図5. サプライチェーン計画のBackward planとForward planの立案処理(仮説)

 

(注1)前回までの記事で、PSI計画の連携デモで生成された約20万件の発注オーダー・ロット、「共通計画単位」common plan unitが生成されているので、これを使って生産配分問題を解きます。

グローバル・サプライチェーンの可視化(Python plotlyアニメーション)

 本記事は、以前に投稿した「サプライチェーン上でのPSI計画連携処理」の紹介記事の続きです。前回までの記事で生成されたサプライチェーン計画データから、各Purchase Orderが出荷・着荷する様子を地球儀の世界地図上でアニメーション表示してみました。

画像
図1 サプライチェーンの可視化


 以下のURLを開くと、地球儀が表示されます。地球儀をドラッグして地球を回転させ、日本を正面に持ってきます。左下にあるアニメーションの実行ボタンを押すと、グローバル供給拠点(日本)から欧州、北米に商品が供給される様子をアニメーション表示します。
https://yasushi-osugi.github.io

地球儀の世界地図上、着荷地別に色分けしたサークルが日本から欧州、アメリカ西海岸、東海岸に移動していきます。これは、購入オーダーPO分の商品がロット単位に搬送、供給される様子を示します。移動中のサークルにマウスを合わせると着荷地とオーダーの情報が表示されます。
また、表示されている地球儀を回転して、ドイツにフォーカスして、拡大するとハンブルグに着荷した後、在庫管理され、その先の販売チャネルに供給している様子も(末端の市場では、移動するオーダー・ロット数が小さくなるので少しも分かりにくいですが)見えます。

      図2. ハンブルグに着荷後、在庫管理され販売チャネルへ移動

 前回の記事で、グローバル90拠点のPSI計画を一年分シミュレーションして、すべての拠点間の購買データを生成しているので、一度にすべての国の供給状態をアニメーション表示することもできるのですが、そうすると供給量の少ない国への搬送の様子を判別できなくなってしまいます。

 ここでは、日本からドイツとアメリカ向けのサプライチェーンに絞って表示していますが、表示する国、供給ルートの切替表示は、抽出条件の指定で簡単に行えます。

 今回のアニメーションに使ったPython言語とライブラリについて、補足させていただきます。本アニメーションは、Pythonのplotlyという描画ライブラリと、地図の座標変換にprojというライブラリを使って表示しています。どちらもMITライセンスです。

 描画部分のPythonのコードは数行で、HTMLを自動生成してくれるので、Pythonの知識のみで比較的容易にアニメーションのWEB表示を作れます。むしろ、入力データとなるサプライチェーン上の供給データの時系列データを整備する作業、アニメーション用の座標変換処理などの前処理が少し手間のかかる部分です。
 今回は幸い、前回までの記事でご紹介してきたサプライチェーン・シミュレーションで、生成された各事業拠点・ノード間の購入計画データ約20万件があったので、これを活用して、地図情報の座標変換処理を組み込むことで比較的容易に入力データを生成することができました。

 前回の記事でご紹介したダイアグラム図も、plotlyの可視化ライブラリを使ってサプライチェーンを可視化しています。
「図3. サプライチェーン・ダイアグラム」のダイアグラム図は、各事業ノード間をつなぐ線の幅が年間取引量を表しており、各国の消費量、需給の親子関係など、サプライチェーン全体を視覚的に把握することができます。

画像
図3. サプライチェーン・ダイアグラム

以下のURLを開くとダイアグラム図が表示されます。

https://yasushi-osugi.github.io/PySI_V0R2SC_diagram_P/

このダイアグラム図の元データは、本記事の世界地図アニメーションで使用しているデータ (計画共通単位の購買オーダーPO:Purchase Order 約20万件) と同じデータを使用して、サプライチェーンの各拠点間を流れる物量を表現しています。
同時に、サプライチェーンの需給(親子)関係を定義したnode profileを可視化ライブラリに渡して、ネットワーク構造を表示しています。

 Sankey Diagramと呼ばれるこのダイアグラム図は、もともと蒸気機関のエネルギー効率を図示する目的で、アイルランド人のM.H.Sankeyが論文に提示したのが始まりだそうです。
 サプライチェーンの全体効率を考える上では、このSankey Diagramのエネルギー効率のアナロジーとして、素材のリサイクル率、商品の廃棄率などを含めたサプライチェーン・ダイアグラムの可視化は効果的と思います。

 例えば、商品・素材の廃棄率が問題になる衣食住の消費財で、それぞれのサプライチェーンの資源効率がどのように設計されているのか、前回記事のSankey Diagramや、今回のサプライチェーン・アニメーションのような全体の可視化、サプライチェーンの始まりから終わりまでのイメージが意識されて、価値観として共有されていれば、事業計画や商品企画、制度設計において、取り組み課題の絞り込みに役立つと思います。

2022年8月 盛夏
大杉 泰司

サプライチェーン・シミュレーション(EV 2023 OUTLOOKベース)

本記事は、以前に投稿した「機械学習の機能を付加した在庫管理(PSI)計画」と「PSI計画機能のグローバル・サプライチェーンへの拡張」に関連する追加の記事です。

なお、ここでご紹介しているPSI計画のpythonソースコードは、以下のgithubに公開しています。

githubのパッケージは下記の3つに分かれています。
 ●初期データ設定用(ini) サプライチェーンの各拠点データの初期設定
 ●PSI計画の連携処理用(main) PSI計画のサプライチェーン連携処理

 ●サプライチェーンのダイアグラム図作成
※ロット・サイズ=1と設定して、約33万件の最終需要地の需要(販売)情報をサプライチェーンの拠点毎に製品一つ一つを積上方式でPSI計画した処理時間はノートPC(AMD3020e  windows11)で約30分でした。

GitHub - Yasushi-Osugi/PySI_V0R2SC_main_P: PySi is , Inventory Planning and financial analyse for Global Supply Chain PySi is , Inventory Planning and financial analyse for Global github.com  
GitHub - Yasushi-Osugi/PySI_V0R2SC_ini_P: initial setting for PySI_V0R2SC_main_P. that is, creating node_all directory and setting 3 initial PSI files. initial setting for PySI_V0R2SC_main_P. that is, creating nod github.com  

 

 本記事で定義したサプライチェーンの全体を把握するために、マザープラントから最終需要地までの需給関係をダイアグラム図で示します。

リンク先のURLを開くとダイアグラム図のノード ( サプライチェーン拠点 ) の情報表示、移動など対話操作ができます。

https://yasushi-osugi.github.io/PySI_V0R2SC_diagram_P/

 


 このPSI計画の簡易デモは、一般には、PoC: Proof of Concept ( コンセプトの検証 ) と呼ばれる検証用ソフトに近い位置づけですが、
計画対象となる製品を絞り込むことで、実務に適用することも可能な機能レベルにあると思います。

入力ファイルとして、
●年間の月別の最終需要 最終消費地
●計画マスター 製品・拠点別
を整備することで、サプライチェーン上の最終需要拠点から供給元マザープラントまでの需要と供給の連鎖を処理して、各拠点毎の在庫、売上、利益を年間52週でシミュレーションします。

最終需要の予測と計画マスターの設定は、一人で行なうことは難しいと思いますが、生産物流部門、経理部門、事業企画部において、グローバル・サプライチェーンの発注業務・在庫管理業務、物流業務、事業計画の立案など、関連する計画機能に詳しい方々に、計画パラメータの設定をアンケート方式でお願いすることで、比較的容易に短期間で計画マスターを整備できると思います。

ここで、機械学習のアプローチを在庫管理(PSI)計画に応用する上でポイントになるのは、
累計値でPSI計画の状態をとらえる
●発注量は単位ロットを積み上げることで経営分析・評価し、発注量を確定する
という点が特徴になります。「図A 機械学習のために累計値でPSI計画状態を見る」参照。

また、PSI計画の単位ロットをグローバル・サプライチェンのPSI計画間で共通の計画単位(Common Planning Unit)としてデータ共有することで、サプライチェーンの階層構造とPSI計画間の整合性を実装しました。「図B サプライチェーンの最終需要と整合したマザープラントPSI計画イメージ」参照。

図A 機械学習のために累計値でPSI計画状態を見る
図B サプライチェーンの最終需要と整合したマザープラントPSI計画イメージ



前回までの記事で、「最終消費地の需要予測データを入力として、サプライチェーン全体のPSI計画を連携処理」するために単純なバッチ処理を行こなっていた部分を、今回は、サプライチェーンの階層構造を最終消費地から順に探索する処理に変更しています。

機能面からの主な変化点は下記の3点です。
1. サプライチェーンの階層を取り扱うツリー構造モデルへの拡張
2. 定期発注在庫管理(PSI)計画の計画パラメータの整理
3. 売上利益シミュレーション・グラフの追加

1. 想定するグローバル・サプライチェーンの全体像

まず最初に、本記事で取り上げたグローバル・サプライチェーンの全体像をご説明したいと思います。
今回、グローバル・サプライチェーンの問題を取り扱うにあたっては、対象商品として電気自動車(以下EV)を想定しています。
EVは、これからグローバルに普及する商品なので、従来からのサプライチェーン計画の様々な事例を参考にしながら、まったく新しいサプライチェーン計画を作成する試みになります。

1-1. 最終消費地の需要情報
電気自動車の需要予測(EV 2022 OUTLOOK)を使ってサプライチェーン全体のPSI計画を作成

EVの2023年のグローバル需要予測(IEA 2023 outlook)のレポート(注1)をベースに、世界各国の最終消費地の需要データを仮に作成して、各国の最終消費地から日本のマザープラントまでのPSI計画連携を処理しています。

最終消費地の需要情報については、IEAからEVの2023年月別の予測値が提供されているので、マーケットシェア10%と仮に置いて、月バケットから週バケット ( ISO Week No)への簡易的な変換処理を行って各国の需要情報を作成しています。

(注1) Global EV Outlook 2022 – Analysis - IEA

Global EV Outlook 2022 – Analysis - IEA Global EV Outlook 2022 - Analysis and key findings. A report www.iea.org  
表1. 電気自動車の国別需要予測(IEAレポート)をもとに2023年の需要計画を作成


1-2. サプライチェーンの階層構造と処理手順
サプライチェーンの階層構造は、日本をマザープラントとして、グローバル全体で90拠点を結ぶサプライチェーン・ネットワークを定義しています。
サプライチェーンの需給(親子)関係は、親ノード、子ノードとして、PSI計画パラメータ(profile)に登録して表現します。ノード毎のprofileを読み込むと「図1. サプライチェーンの階層構造」のようにツリー構造が内部的に生成されます。
PSI計画profileで親子ノードの関係を正しく設定した後、サプライチェーン・ネットワーク中の各ノード、事業拠点の事業特性に注目することで、サプライチェーンのモデル定義を進めます。

図1. サプライチェーンの階層構造

ここでのポイントは、サプライチェーン上の需要情報の流れをどのように表現するか、最終消費地から域内の中間在庫を経てマザープラントまで、どのように需要情報を伝播させ、世界各国の需要情報を集計するか、その処理手順にあります。

「図2. グローバル・サプライチェーンのためのツリー構造の探索手順」にあるとおり、
情報処理の観点からは、ツリー構造で表現されたサプライチェーンに対して、葉ノード(=最終消費地)から根ノード(=マザープラント)までのツリーを「深さ優先」の「帰りがけ順(postorder)」で探索することで実装することができます。

サプライチェーンの実務の観点からは、各事業所間での発注オーダーPOの整合性をサプライチェーン全体でどのように整合させるかがポイントになりますが、
ここでは供給元の出荷ヤードに1週間滞留している仕掛在庫の状態で、各仕向地への在庫引当が行われるという業務オペレーションを想定しています。
つまり、最終需要地からの要求量、出荷ポジションを1週間単位サマリーして、1週間単位の総量レベルで需給量が一致することで、整合性を保っています。
したがって、発注オーダーPO単位の在庫引当の詳細はここでは取り扱っておりませんが、実行系の業務システムにおいて、週次POの効率的な出荷管理、出荷ヤードでの在庫引当が別途行われていることを想定しています。
自動車であれば、港の出荷ヤードに完成車が滞留している間に、仕向地の船と引当てられるというイメージです。

再度、グローバル・サプライチェーンのPSI計画連携の内部処理に話しを戻しますと、
ツリー構造の中間ノード(=中間在庫拠点)を含め、サプライチェーンのツリーを構成する各ノードに対応するPSI計画を配置して、最終消費地の需要情報(S)から要求供給量(P)を順次生成して、葉ノード、中間ノード、根ノードへと需要情報を帰りがけ順(postorder)に伝播・集計していくことで、中間在庫拠点を経由して、マザープラントまでのすべて需要情報を生成しながら、PSI計画を処理することができます。
この結果、マザープラントの在庫出荷計画が生成されます。

図2. グローバル・サプライチェーンのためのツリー構造の探索手順

2. PSI計画の機能拡張 変化点

1. サプライチェーンの多階層を取り扱うツリー構造モデルへの拡張

ここでは、サプライチェーンの多階層のPSI計画の定義について見ていきます。
例えば、日本=>ハンブルグ=>ミュンヘン=>ミュンヘン直販チャネル
といった、中間に2つの在庫拠点を持つ3階層のPSI計画であれば、PSI計画プロファイルに親子関係を、JPN-HAM  HAM-MUC  MUC-MUC-Directというように定義します。
PSI計画は、初期処理でサプライチェーンのツリー構造を「帰りがけ順」postorderで探索して、最終消費地からマザープラントまでのPSI連携を処理します。アウトプットは、それぞれの事業拠点の在庫変化、売上利益の変化を1年間52週でExcelグラフ用に出力します。
「図3. サプライチェーン上の3階層 4事業拠点のPSI計画と売上利益グラフ」参照

このサプライチェーンの階層構造の定義は、需給関係の親子ノードの登録を正しく整合性を持って登録すれば、何階層でも比較的簡単に定義できます。

図3. サプライチェーン上の3階層 4事業拠点のPSI計画と売上利益グラフ

もう一つの留意点として、各事業拠点の在庫方針をどのように設定するかが問題になります。
これは各事業拠点に対応するPSI計画の目的関数、機械学習でいう報酬rewardを、売上優先、利益優先、利益率優先など、後述のPSI計画のパラメータ設定で切り替えることで在庫方針を設定できます。

今回のケースでは、マザープラントと中間在庫は売上優先で、最終消費地は利益率優先で在庫方針を設定することにより、前線の最終消費に適正在庫を配置して、供給サイドは在庫を薄くするというサプライチェーンのイメージを想定しています。
例えば、域内の中間在庫で季節変動を吸収したいという場合には、中間在庫の在庫日数を高めに設定します。

2. 在庫管理(PSI)計画の計画パラメータの整理

 

 前回までの記事でご紹介したグローバルPSI計画の機能を拡張して、PSI計画の基本パラメータとして、
①在庫管理の条件テーブル(ロット・サイズ、リードタイムなど)
②拠点事業所間の需給関係(サプライチェーン・ツリーの親子関係定義)
③評価方法の切替えフラグ(売上、利益、利益率)
を計画パラメータ・ファイルにセットし、
PSI計画の入力となる最終消費地の月別の需要予測を(月別需要を週別需要に変換処理して)与えるとサプライチェーン全体のPSI計画を連携処理できるように修正しました。

 

PSI計画パラメータの分類を、時間制約、計画エンジン、コスト構成、物流条件に整理。
「図4. PSI計画パラメータ(Profileの定義例)」参照

例えば、リードタイムなどの各計画パラメータの設定は、profileで指定できるようにしました。
同様に、計画エンジンは、ML: 機械学習機能、FS: 固定シーケンスの2種類があります。特に、ML: 機械学習機能については、以前の記事で紹介した3つの評価指標、①利益率、➁売上、➂利益をprofileで切り替え指定できます。

なお、今後の機能拡張として、グローバル・サプライチェーンで問題になる、為替、関税、HSコード、移転価格などの要素を取り扱えるように計画パラメータのみprofileを拡張していますが、対応するPSI計画の内部処理は実装しておりません。

図4. PSI計画パラメータ(Profileの定義例)

さらに、「図5. サプライチェーン上の事業拠点(node)毎のPSI計画パラメータを一括定義」に示すとおり、サプライチェーン上の事業拠点(node)毎のPSI計画パラメータを一括定義することができます。
一括定義することで、サプライチェーン全体を俯瞰しながら各事業拠点の特性を意識したPSI計画条件設定ができます。
また、対象製品の売上利益シミュレーションをサプライチェーン全体で可視化できるようになるので、経営判断に有効な情報を提供できます。

ところで、各事業拠点のPSI計画パラメータを一括定義を実際に行う際には、
事業会社の事業責任者、物流担当者、経理担当者といった各事業部門の有識者が分担しながら計画パラメータを登録することで、比較的容易に設定できるのではないでしょうか。

図5. サプライチェーン上の事業拠点(node)毎のPSI計画パラメータを一括定義

3 売上利益シミュレーション・グラフの追加

いままでの在庫管理PSIグラフに加えて、売上利益の推移を週次でグラフ化することで、サプライチェーンの各事業拠点毎の売上、利益、利益率の変化を俯瞰的に把握することができます。
「図6. 売上・利益・利益率の年間推移グラフ」参照。

図6. 売上・利益・利益率の年間推移グラフ


 ここまで、サプライチェーンに対応するためのPSI計画の機能拡張、およびグローバル・サプライチェーンのシミュレーションについてご紹介させていただきました。

 

 3. いままでの経緯と今後の課題

 一連の記事を投稿することになった最初の動機は、ステイホームの2年間、囲碁や将棋のAIの仕組みを調べているうちに、だんだん自分でも何か簡単な機械学習のアプリを作ってみたいと思うようになり、経営コンサルタント時代の経験から、以下のような取り組み仮説が頭をよぎるようになりました。
機械学習のアプローチを在庫管理(PSI)計画に応用することで、経営分析の評価手法で機械学習の評価関数を定義し、PSI計画を作成することができる
●グローバル・サプライチェーンの在庫管理(PSI計画)をモデル化することで、サプライチェーン全体の在庫、売上・利益を可視化し、経営の意思決定をサポートすることができる

これらの仮説を検証するために、機械学習の機能を付加したPSI計画の簡易デモをpythonで実装してみることに至りました。

 

今後の課題としては、サプライチェーン全体を経営視点で俯瞰すると、
( OR : オペレーションズ・リサーチの世界ではあまりにも一般的な問題ですが) 以下のような問題を、PSI計画+機械学習のアプローチで解いてみるとどうなるのか、興味深いところです。
1. 事業拠点の施設配置問題の最適化 ( 現地オペレーション・コスト、関税 )
2. マザープラントからの供給配分問題 ( 利益率と特定市場優先 )

 これらの問題を解決するために、サプライチェーン全体を対象に機械学習を行うアプローチが考えられます。
例えば、
サプライチェーン全体を経営評価する評価関数(利益率、顧客満足度、廃棄率など)を用意する
 => これは拠点毎に出ている売上・利益の評価をサマリーして求められる
サプライチェーンの拠点配置や供給ルート、供給先、供給量を変更する操作ACTIONを用意する
 => これは様々な状況対応力が必要となるので、まずは、
   簡単なサプライチェーンのネットワーク変更操作などを用意して、
   どのように学習が進むか実験してみる

 

このアプローチは、いままでの延長としてpythonで実装することができると思います。
pythonで実装する上での取り組みイメージとしては、今回のPSI計画連携の上位機能として、もう一つ別の機械学習の機能でサプライチェーン計画全体をラップすることで、問題を解決できるのではないかと思います。

 ただ問題は、一回の処理サイクル(行動Action-状態更新-評価Eval)の処理時間が分単位になっている点です。
 グローバル・オペレーションにおいて、PSI計画をロット単位に一つ一つ積み上げる計算処理は、最初にも述べたとおり、自動車であれば一台一台を逐次PSI計画で連動して、グローバル90拠点、33万台分のグローバル需給を解くのに、ノートPCで30分かかっていました。機械学習を繰り返して解を求める上で、できる限り処理時間を短く抑えたいところです。

 最も簡単な解決方法は、
1. ロット・サイズを大きくして、PSI計画で取り扱うデータ量を少なくする
 =>輸送ロット・サイズ=1単位を、例えば6単位にするなど
2. サプライチェーンの対象範囲を狭める
    => グローバル90拠点ではなく、例えば、欧州域内30拠点を対象とするなど
3. 処理マシンをノートPCから、より高性能なものに変更する
といった方法で、処理時間の短縮を図ることができます。

このようなアプローチで、サプライチェーン全体を対象に機械学習の機能を付加したサプライチェーン計画を実装していくことができると思います。

 

2022年7月
大杉 泰司

サプライチェーンを繋ぐPSI計画の簡易デモ (2階層のサプライチェーン計画)

2022年6月 追記 : 本記事でご紹介したPSI計画のpythonのソース・コード一式をgitgubで公開しています。ご興味のある方は参照ください。

Yasushi-Osugi/PySI_V0R2SC_main_P: PySi is , Inventory Planning and financial analyse for Global Supply Chain (github.com)

GitHub - Yasushi-Osugi/PySI_V0R1_070P: Config files for my GitHub profile. Config files for my GitHub profile. Contribute to Yasushi-Osu github.com  


今回は、前回の記事で説明した「PSI計画連携の仕組みをサプライチェーン全体に拡張していくための考慮点」にもとづいて、Pythonで実装した「サプライチェーンを繋ぐPSI計画の簡易デモ」について、その結果を見ていきたいと思います。

図6-1. 供給拠点マザープラントのPSI
図6-2-1. 流通チャネル(部分SHA Online)のPSI
図6-2-2. 流通チャネル(部分SHA Online)のPSI (通常のPSIと累積PSI)


サプライチェーンの構成内容など、詳細な説明は後述するとして、まず最初に、PSI計画の結果をアニメーションで見ていきたいと思います。
「図6-1. 供給拠点マザープラントのPSI」と「図6-2-1. 流通チャネル(部分SHA Online)のPSI」は、グローバル3拠点(上海SHA、ホーチミンHCM、アムステルダムAMS)の最終消費地の流通チャネル(図6-2は上海SHAのOnline Channelを想定)からの需要情報がサプライチェーンの2階層を伝播して、供給拠点マザープラントで集計、生成された1年間のPSI計画シミュレーションの結果です。
なお、ここでは、PSI計画を機械学習アルゴリズムで扱う都合から、一般的なPSI計画のグラフではなく、累積されたPSI計画の状態を評価しています。
PSI計画に詳しい方は、累積PSIのイメージに違和感を感じると思いますが、これは「図6-2-2. 流通チャネル(部分SHA Online)のPSI (通常のPSIと累積PSI)」のとおり、PSI計画の見え方が異なるだけでPSIのデータは同じものです。

想定した需要のパターンは、図6-2の最終消費地では、秋冬シーズン向けの商品が販売・消費されています。これに対して、図6-1のマザープラント側の生産では、輸送リードタイム分シフトして、年初3月辺りから需要が立ち上がり先行的に生産がスタートしている様子が分かります。
今回のデモでは、個々のPSI計画のパラメータ設定が十分でないため、PSI計画の立案内容自体には不自然な部分がありますが、ここではサプライチェーンの2階層の親子(需給)関係を定義したPSI計画間で、需給情報のデータ連携ができており、それぞれのPSI計画が同期して、整合性の取れたサプライチェーン計画が作成されていることが確認できます。

以下ではサプライチェーンの構成内容について、もう少し詳しく見ていきたいと思います。
「図6-3. 2階層のサプライチェーン計画結果」は前回説明した流通チャネルの考え方でサプライチェーンの2段階のPSI計画をデータ連携させた結果で、全体イメージが分かるようにPSI計画の結果を配置したものです。

図6-3で定義したサプライチェーンの構成は、以下のとおりです。
1) 日本JPNのマザープラントが全世界に供給する。
日本JPNから、上海SHA、ホーチミンHCM、アムステルダムAMSにある販売物流拠点に供給する。
2) 上海SHA、ホーチミンHCM、アムステルダムAMSでは、
その先にある最終消費市場に、直接販売、間接販売、ネット販売の3種類の流通チャネルが存在する。
3) それぞれの流通チャネルの売上構成比率は以下のように想定する。
SHA: Online=50%, Direct=20%, Indirect=30%
HCM: Online=20%, Direct=40%, Indirect40%
AMS: Online=30%, Direct=40%, Indirect=30%

図6-3. 2階層のサプライチェーン計画結果

計画処理の全体の流れは、末端市場の川下(注:図6-1では上)から、川上の供給拠点マザープラント(図6-1では一番下)へ向かって、需給情報を伝播させるイメージでPSI計画を順にバッチ処理で流して、PSI計画をデータ連携しています。入力となる需要情報は、最終消費地の実需のみを与えることで供給サイドに伝播していきます。非常に簡単なサプライチェーンのモデルですが、PSI計画間の需給情報が市場から供給拠点へ伝播して、データ連携している様子が分かります。この仕組みは非常にシンプルですが、サプライチェーンの階層を3階層、4階層と拡張していくことは比較的容易です。
留意点としては、PSI計画の処理モジュール名や入出力ファイル名などの命名ルール、naming conventionを工夫して、モデル定義を行う際の見通しを良くすること、サプライチェーンの階層のどこのモジュール定義を行っているのか、名称から判断できるようにしておくことがポイントになると思います。( 2022年7月17日時点のgithub最新版V0R2では、モジュールの命名ルールを意識する必要はなく、PSI計画パラメータや拠点間の親子定義をマスターファイルとして外出しして、サプライチェーン全体を一つのPSI計画パラメータ・ファイルで一括定義できるように修正しました。)

再度、「図6-3. 2階層のサプライチェーン計画」に戻って全体を俯瞰すると、色々な課題が浮かび上がってきます。
例えば、
●マザープラント日本JPNのPSI計画の生産平準化がうまくできていない。
ホーチミンHCMの直接販売DirectチャネルのPSI計画の購入Pの生成、購入ロットの積上げがうまく処理されていない。
等々の課題が見えてきます。
このように不自然なPSI計画の課題を見つけて、それぞれのPSI計画の設定パラメータをチューニングしていく作業は、机上のシミュレーションであれば、それほど難しくないと思います。

ただ実際には、グローバル・サプライチェーンの実態に合わせて、PSI計画のパラメータ設定を見直していく場合、個々のチューニング作業の精度と、管理する拠点数、製品数に応じた作業量の多さが問題になります。

サプライチェーン全体を俯瞰しながら、それぞれのPSI計画を定期的に見直す、なんらかの自動チューニングの機能がほしいところです。
今回の記事の一番最初にご紹介した機械学習の機能も、その一つではないかと思います。
例えば、前述の「ホーチミンHCMの直接販売DirectチャネルのPSI計画がおかしい」という場合に、「図6-4. 機械学習の学習回数(episode=10)とPSI計画」のように、機械学習の学習回数(episodeの数)を変化させてPSI計画の結果を見ることが考えられます。

図6-4. 機械学習の学習回数(episode=10)とPSI計画

なお、サプライチェーン上の個々のモデル定義については、ご紹介してきたPSIモデルの管理単位は、「週次」の時間単位、製品を取り扱う単位は「梱包ロット」といった非常に荒い粒度で管理されています。
これは、生産、物流、販売のそれぞれの現場でよりきめ細かく管理されている(ERP等の)在庫計画の管理単位(日・時分、製品一個単位)の特性を、(週次、梱包ロットといった)荒い管理粒度の方向に、グローバルPSIの仕組みとしてマッピングする作業となるので、比較的容易にモデル定義できるのではないかと思います。

グローバル・サプライチェーン上で、特定の製品軸で串刺しすることで、グローバル需給バランスの全体を可視化することができ、利益コスト評価ができる機能は、グローバルレベルでのオペレーション効率の向上に役立ちます。

今回は、あくまで簡易デモですので、「PSI計画間のデータ連携ができているという確認」に留めていますが、この先にある取り組みとして、以下のような取り組みが考えられます。
●事業計画を策定する際のグローバル・サプライチェーンのシミュレーション
●特定の製品軸でのサプライチェーン連携の可視化
サプライチェーン全体の売上利益管理
 これは、以前の記事「PSI計画のコスト評価方法について」でご紹介した「図6-5. 特定の製品の年間PSI計画に対応する利益コスト構成」のように、サプライチェーン上のすべての事業単位(登場人物)のコスト構成を集計することで、特定の製品軸での売上利益を可視化できるようになると思います。

図6-5. 特定の製品の年間PSI計画に対応する利益コスト構成

このような取り組みテーマが、グローバル・オペレーションの経営効率を大きく向上させる取り組みとして、注目されてくるのではないかと思います。

以上、ステイホームの2年間、機械学習への興味から始まり、試行錯誤しながら、Pythonで実装したグローバルサプライチェーンのPSI計画連携の仕組みについて、ご紹介させていただきました。

2022年3月 
桜の開花を待つ早春の自宅にて

大杉 泰司

PSI計画連携の仕組みをサプライチェーン全体に拡張していくための考慮点

ここでは、PSI計画連携の仕組みについて、今回はサプライチェーン全体に拡張していくための考慮点を考えてみたいと思います。

まず初めに、サプライチェーンの全体像をどのように捉えるべきか考えておきたいと思います。ここから先、検討を進める上で理解のしやすいイメージとして、「図5-1サプライチェーンの全体像」のような見方で説明を進めていきたいと思います。

図5-1. サプライチェーンの全体像

「図5-1. サプライチェーンの全体像」の見方は、横軸が時間軸。縦軸がサプライチェーン上の事業単位(言い換えれば、登場人物)になります。
そして、事業単位(登場人物)の並び順は、図にもあるとおり、縦軸の一番上は最終消費者で、上から下へ、最終消費の市場に近い事業単位(登場人物)から供給サイドヘ順に「最終消費者」、「実需 前線店舗(小売店)」、「直接・間接 流通チャネル」、「メーカー各国事業会社」、「域内統括会社」、「供給拠点マザープラント」、「基幹部品サプライヤー」というように、サプライチェーン上の主要な登場人物を順に定義しています。
そして、それぞれの事業単位(登場人物)が行うビジネス・プロセス、処理のタイミング、処理の内容を定義します。ここで、物流と商流と情報流(PSI計画情報)という3つの流れで見ていく事でサプライチェーン全体の動きを俯瞰することができます。
なお、図5-1の図中、域内統括会社とは、欧州、北米、南米、中国、アジア、アフリカといった地域を統括する事業単位を指します。また、メーカー各国事業会社とは、例えば欧州統括会社の場合、その配下にある英国社、ドイツ社、フランス社、ベルギー社、オランダ社、イタリア社、スペイン社等々、域内の各国に事業会社が展開されていることを想定しています。

前回の記事では、サプライチェーン上の親子関係 ( 需給関係 ) にあるPSI計画間の整合性をとるためには、以下の3つの要件を満たすことが有効であることを簡易デモを通して説明しました。
●ロット積上げ方式PSI(Lot Loading PSI)
サプライチェーン上の共通計画ロット単位(Common Planning Lot Unit)
●週次の時間単位(Weekly Time Bucket)

つまり、サプライチェーン上のすべての事業単位(登場人物)を対象に上記の要件を満たすようにPSI計画を実装し、前後するPSI計画間の整合性を取ることができれば、サプライチェーン全体をカバーするPSI計画の相互連携機能を実装できる、という仮説を定義できます。

前回の記事で説明したPSI計画連携の仕組みは、供給拠点(マザープラント)と各国事業会社との間のPSI連携でした。これは「図5-2. 流通チャネルを活用するサプライチェーン」の図中、黄色の四角で示す部分で、検証用に簡単なデモをPythonで実装しました。
今回は、各国事業会社とその先の流通チャネルと最終消費者の間(赤枠の部分)を対象に、どのような考え方でPSI計画モデルを定義すれば、PSI計画間の整合性を確保することができるのかを見ていきたいと思います。

図5-2. 流通チャネルを活用するサプライチェーン

ここで、各国事業会社から先の流通チャネルには、
●メーカーの直販チャネル
●特定の地域・市場セグメントをカバーする販売代理店、間接チャネル
●ネット通販などの最終消費者向けダイレクト・チャネル
などがあり、それぞれの流通チャネルが混在している状態が想像できます。

「図5-2. 流通チャネルを活用するサプライチェーン」の赤枠の部分は直販、間接販売の流通チャネルが存在することを想定しています。
一方、「図5-3. 最終消費者に直送するサプライチェーン」では、例えば、amazonや自社通販チャネルなどのダイレクト・モデルを想定して、各国事業会社の物流倉庫から最終消費者に直送するため、図の赤枠の中に事業単位(登場人物)は存在しません。

図5-3. 最終消費者に直送するサプライチェーン

このような、いくつかの流通チャネルが混在するサプライチェーンをどのようにPSI計画でモデル化していけば良いか考えてみたいと思います。
結論としては、「それぞれの流通チャネルの違いは、チャネル内にどのくらいの在庫が滞留しているか、在庫滞留期間の違いとして表現できる。」という考え方で、複数の流通チャネルが混在する状態をPSI計画のモデルに置き換えることができると思います。

例えば、「図5-4. 流通チャネルの違いをPSIの在庫滞留期間で表現する」に示すとおり、製品の在庫滞留期間の長短で、それぞれの流通チャネルの特性をPSI計画上で定義することができます。
つまり、1つの流通チャネルに対応する1つのPSI計画モデルを定義するという、非常に荒いPSI計画モデルではありますが、こうすることでサプライチェーン内のPSI計画間の整合性を確保し、サプライチェーン全体をカバーする計画機能を実装することができると思います。

なお、図中の実販Sell-In、実需Sell-Out(またはSell-Through)は、需要の発生場所の違いで、実販Sell-Inは販売会社の出荷売上ポジション、実需Sell-Outは最終消費者が実際に商品を購入したポジションを指します。
余談になりますが、販売会社の仕入れ担当者が、自社の足元の出荷実績だけをみて、仕入と出荷を進めているうちに、最前線の市場では思うように商品が売れずに在庫が積み上がっていた、という状況は少なくない話で、実需sell-outの動きと市場の在庫滞留の変化には十分な注意が必要になります。

例えば、間接チャネルの場合には、
販売代理店とその小売店で構成されているので、間接チャネル内に滞留する在庫量も多く、筆者の経験からは、滞留在庫の期間は4週間~8週間分程度の在庫が滞留していると想定されます。

直接チャネルの場合には、
販売代理店や小売店は存在せず、自社の直販店のみで構成されるので、直接チャネル内に滞留する在庫量は少なく、例えば、在庫の高さは2週間程度の在庫が滞留していると想定されます。

最終消費者向けダイレクト・チャネルの場合には、
ネット注文、即出荷という対応であることから、滞留する在庫はほとんど無しで、主に物流の移動時間となることから、在庫滞留期間は1週間程度の在庫が滞留していると想定されます。

図5-4. 流通チャネルの違いをPSIの在庫滞留期間で表現する

このように、流通チャネルのPSI計画モデルを定義し、それぞれの流通チャネルの売上比率で、複数の流通サプライチェーンを表現します。
例えば、
●メーカーの直販チャネル 50%
●販売代理店経由の間接チャネル 20%
●ネット通販のダイレクト・チャネル 30%
という考えかたで、流通チャネルの混在をモデル化します。

以上、今回は「PSI計画連携の仕組みをサプライチェーン全体に拡張していくための考慮点」について説明させていたたせきました。

次回は、今回説明したの流通チャネルのPSI計画をPyhtonで実装して、その後、サプライチェーンを繋いでいく簡易デモをご紹介したいと思います。

PSI計画のコスト評価方法について

2022年6月 追記 : 本記事でご紹介したPSI計画のpythonのソース・コード一式をgitgubで公開しております。ご興味のある方は参照ください。
なお、ライセンスはMIT Licenseです。

github.com

前回の「PSI計画に機械学習の機能を組み込むための考え方」に続いて、今回は、PSI計画のコスト評価方法について説明します。

PSI計画のコスト評価、コスト・パラメータの検討を始めた当初の問題意識は、「製品のコスト構造を、PSI計画の機械学習の評価関数に設定することで、発注サイクルを自動で調整して、コスト最適化する発注計画を作成してくれるはずだ。」というものでした。
その結果はどうなったか、以下で見ていきたいと思います。

まず最初に、今回のPSI計画コスト評価で使用した利益コスト計算式は「図3-1. 利益コスト計算式」に示すとおりです。
この計算式を機械学習の評価関数に組み込んでいます。

コスト評価の計算式を検討する上での留意点として、実務担当者に馴染みのある分かり易い評価方法であること、コスト・データの整備、設定に時間をかけない方法であることを意識して、比較的ざっくりした「製品コスト構成比率」という考え方で、コスト・パラメータとコスト評価の計算式を定義しました。
したがって、この利益コスト計算式にはまだまだ改良の余地があると思います。
例えば、コスト関連データが整備されていて、負荷をかけずにデータ入手可能であれば、在庫保管コストや物流コストのデータ精度の高いコスト・パラメータを取込みたいところです。
あるいは、製品ライフサイクル後半で販売価格に値引率が適用される場合など、売上・利益に影響する時系列変化をパラメータ化することも課題になると思います。

画像を拡大表示
図3-1. 利益コスト計算式

利益コスト計算式で使うコスト関連パラメータのサンプルは、「表3.製品コストテーブルの例」のとおりで、計画対象となる製品のコスト構造をコスト・テーブルとして事前に設定しておきます。
表3のコストテーブルには、製品のコスト構成の他に、在庫管理に必要なLTリードタイム、ロットサイズを設定しています。
このコスト・テーブルは、図3-1. 利益コスト計算式のパラメータと対応しています。
このコスト・テーブルは、特定の業界のものではなく、筆者の経験から平均的なコスト構造を想定して仮に定義しています。

画像を拡大表示
表3.製品コストテーブルの例

次に、機械学習の報酬(reward)との関係ついて、報酬(reward)には利益率を使うのが一般的と思います。ただ、事業会社のビジネススタイル、事業方針によっては、利益率ではなく売上(出荷)の最大化を重視するなど、供給方針は一律ではなく、報酬(reward)に適用する評価パラメータ(利益、売上など)を事業方針、発注スタイルに合わせて調整する必要が出てくると思います。

PSI計画の機械学習で報酬(reward)に利益率、利益、売上を指定した場合、どのようなPSI計画を作るのかは、図3-2にそれぞれの結果を比較しています。

報酬(reward)に「利益率」、「図3-1. 利益コスト計算式」を指定した場合の結果は、ほぼ定期発注を繰り返しており、最も自然な購入計画Pを作成しているように見えます。

報酬(reward)に「利益」、「図3-1. 利益コスト計算式」の分子、を指定すると、ほとんど購入Pを発注しなくなり、これは前々回の記事で述べた「八百屋さん、あるいはアパレルZARAの売り切り商売」のような「仕入コストの増加を抑えて売り切って利益を出す」という方針になっているように見えます。

報酬(reward)に「売上」、「図3-1. 利益コスト計算式」の分母、を指定すると、売上(出荷)を最大限にあげる方向にあるため、仕入コストを無視して発注サイクルを縮めて、毎週発注をかけています。なお、年間の後半で発注がストップする原因は、需給バランスの総量を規制する制約条件が定義されているのが原因ではないか思います。

画像を拡大表示
図3-2. PSI計画の機械学習で報酬(reward)に利益率、利益、売上を指定した結果比較

本稿の最初にお話しした、コスト・パラメータの検討を始めた当初の問題意識、「製品のコスト構造を、PSI計画の機械学習の評価関数に設定することで、発注サイクルを自動で調整して、コスト最適化する発注計画を作成してくれるはずだ。」という点について、
実際に機械学習でPSI計画を作ってみると、当初の想定に近い動きをしていることが分かります。
例えば、図3-2のreward=利益率の場合で見ると、月次サイクルに近い発注を自動生成しています。
ただ、発注サイクルは月1回、月2回、月4回、週次といった型にはまった発注サイクルにはならず、利益率を重視して、その都度伸び縮みしている様子が分かります。

以上、PSI計画のコスト評価方法について説明させていただきました。

PSI計画に機械学習の機能を組み込むための考え方 (ロット積上げPSI計画:Lot Loading PSI)

2022年6月 追記 : 本記事でご紹介したPSI計画のpythonのソース・コード一式をgitgubで公開しております。
ご興味のある方は参照ください。
なお、ライセンスはMIT Licenseです。
github.com


ここでは、前回ご紹介した機械学習の機能を組み込んだPSI計画の仕組みについて、内部処理の概要を説明します。

「図2-1. PSI計画表とロット積上げ表」は、Pythonで実装する前にEXCELで作ったプロトタイプの入出力データのイメージです。
上部の青枠部分は一般的なPSI計画(定期発注方式の在庫管理)の計算とコスト評価を行う領域、
下部の赤枠部分は発注ロット単位にロットを積上げる領域です。
2つの領域は、Python上では以下の2つのクラスに対応しています。
class PlanSpace PSI計画・評価領域
class LotSpace ロット積上げ領域

図2-1. PSI計画表とロット積上げ表

クラスPlanSpaceでは、PSI計画の計画状態を更新・評価する処理
i_PlanSpace.CalcPlanSIP()
reward = i_PlanSpace.EvalPlanSIP()
が主な処理となります。
クラスLotSpaceでは、発注ロットを処理単位としてロットを積上げる処理
lot_no, week_no, lot_step =i_LotSpace.place_lot( lot_no , week_no )
が主な処理となります。

より詳しい説明は後述するとして、少し大雑把な説明になりますが、機械学習の処理との対応は以下の通りです。
1. ロット積上げ処理(place_lot) ・・・・・行動(action)
2. PSI計画の更新処理(CalcPlanSIP) ・・・・・状態更新(update state)
3. PSI計画の評価処理(EvalPlanSIP) ・・・・・報酬(reward)
4. Q学習のQ_Tableの更新

グラフ出力は「図2-2. 一般的なPSIグラフと累計グラフ」のとおりで、
● PSI計画の一般的なPSIグラフ(上図)
● PSI計画の累積グラフ(下図)
2つのPSIグラフを想定しています。それぞれのグラフの見え方は異なりますが、同一のPSI計画状態を表示しています。
前回の記事で紹介した図1のアニメーションは、機械学習の上記1.2.3.4の処理サイクル実行の都度、PSI計画の累積グラフが変化する様子を示しています。

図2-2. 一般的なPSIグラフと累計グラフ

以下では、ロット積上げ(Lot Loading)方式によるPSI計画の処理手順をもう少し詳しく見ていきましょう。
表2と図2-3に処理手順と処理イメージを示します。

表2. PSI計画の機械学習の処理手順

ポイントは、
手順3と4: LotSpaceの中でロットを積み上げる行動(action)により、
手順6: P購入の値が生成・増加し、
手順7と8: PlanSpaceの中でPSI計画状態の更新とコスト評価が行われて報酬(reward)が生成されるという流れです。
この後、Q学習が進行して行動(action)の選択肢を管理するQ-Tableが更新されます。

なお、手順1の入力情報、S販売(予測と実績)の取り扱いについては需要予測の様々な手法があるので、ここでは需要は事前に与えられている、所与のものとして深く検討することは避けたいと思います。
グローバルSCMでの筆者の経験からは、グローバル需給計画を検討している経営本部側で利益計画を策定する中で、各販売事業会社への供給量の割り振り(あるいは販売目標数)が事業計画レベルの月次計画で事前に作成されており、この情報を週次計画にブレイクダウンすることでS販売予測に相当する入力情報を生成できるのではないかと思います。
ただ、近年のIoTの進展もあり、リアルタイムで実需の変化をとらえて、S販売情報に軌道修正をかける仕組みが活用されてくる、あるいは既に活用されているのかもしれません。

図2-3. PSI計画の機械学習の処理イメージ

今回は、「PSI計画に機械学習の機能を組み込むための考え方(ロット積上げPSI計画)」について説明させていただきました。
次回は、「PSI計画のコスト評価の計算方法」について説明したいと思います。