グローバル・サプライチェーンの動きを地球儀(secium)の上に可視化する

 本記事は過去に投稿したグローバル・サプライチェーン関連の記事の続きです。

今回は、グローバルサプライチェーン計画を地球儀(secium)の上の製品ロットの動きとして可視化する方法について、ご紹介します。

 サプライチェーン計画データを地球儀(secium)にマッピングするデータ変換の詳細については後述するとして、ここではまず、Global weekly PSI Planの結果が地球儀上にどのように可視化されるか見ていきたいと思います。

 

図1. Global weekly PSI planによる製品ロットの動き(日本出荷~上海・広州着荷)
 
 Global Weekly PSI Plannerで生成された共通ロット単位のサプライチェーン計画は、secium地球儀シミュレータ上に、立方体の箱(=製品ロット)としてアニメーション表示することで、グローバル・サプライチェーンの動きを可視化しています。
 「図1. Global weekly PSI planによる製品ロットの動き(日本出荷~上海・広州着荷)」は、Global PSI Plannerで生成された製品ロットが、画面右上の東京で先行生産する(立方体で表現された製品ロットが積み上がる)ところからスタートして、海上輸送され、上海と広州に着荷した後、消費地の各販売チャネルにおいて、Purchase:購入(黄色)、Inventory:在庫(茶色)、Sales:販売(青色)のビジネス活動が週次で計画遂行される様子を示しています。

  このseciumの地球儀シミュレーションでは、左下にあるclockの設定を「1週間=1秒」としています。
2025年1月~12月の最終需要地(上海、広州)での販売需要(青色の立方体)に対応するために、2ヶ月前の2024年11月から生産拠点(日本)での先行生産(生産=黄色、在庫=茶色の製品ロットの積上げ)がスタートするように計画されている様子がわかります。

 

次に「図2. サプライチェーン上の製品ロットの動き(日本出荷~ハンブルグ経由~ミュンヘン着荷)」では、同様に生産拠点(日本)で先行生産された製品ロットは、ドイツのハンブルグ港に着荷後、フランクフルト、ミュンヘンの最終消費地の販売チャネルにおいて、P:購入着荷、S:販売、I:在庫保管される様子を可視化しています。

図2. サプライチェーン上の製品ロットの動き(日本出荷~ハンブルグ経由~ミュンヘン着荷)

「図3. グローバル・サプライチェーン全体で製品ロットの需給活動が連動」では、地球儀を回して、日本と中国とドイツ間のサプライチェーンの動きを確認することで、グローバル・サプライチェーン全体で製品ロットの需給活動が連動している様子がわかります。

図3. グローバル・サプライチェーン全体で製品ロットの需給活動が連動

注1: 画面キャプチャーした動画ファイル・サイズが大きくアップロードできなかったので、ここでは静止画を貼り付けています。
注2: 本来であれば、海上輸送ルートをプロットして、海上の中継点に輸送中の製品ロットを表示するべきですが、ここでは簡易的に東京とハンブルグの座標の中間点(カザフスタンの辺り)を計算して、製品ロットの移動の様子を表示しています。将来的には、コンテナ船の海上ルートをmarin trafficなどの航行座標情報から取り込みたいと考えています。

サプライチェーン計画から地球儀(secium)へのデータ変換】

 「図4. サプライチェーン計画から地球儀(secium)へのデータ変換方法」はデータ変換処理の概要を示します。ここでのポイントは、座標(経度・緯度)と高度、時間の単位(ISO標準の週番号)をサプライチェーン計画と地球儀(secium)で整合性を確保することです。

図4. サプライチェーン計画から地球儀(secium)へのデータ変換方法

 pythonで開発したGlobal Weekly PSI planの計画結果を可視化する方法について、サプライチェーン全体を俯瞰できる見通しの良い可視化ツールがないか、色々と調べる中で、地球上の座標(経度、緯度)と高度を定義してBOXやLINEを秒単位の時間設定で表示コントロールできるseciumにたどり着きました。
 seciumの地球儀シミュレータの機能は、CZMLという図形描画の簡易言語を持っており、立方体や線に対して、positionパラメータで座標(経度、緯度)と高さを指定して、showパラメータで秒単位の表示、非表示を時間設定することで、様々な図形、ここでは製品ロットに該当する立方体を描画することができます。

 一方、サプライチェーン上の製品ロットについては、各事業拠点の座標(経度・緯度)と、製品ロットが在庫状態の時に何段積みされているか(=在庫の高さを高度としてmで定義)、あるいは海上物流ルート上のどこの座標を搬送中か、といった物理的な位置情報を持っています。
それから、時間の単位情報として、計画開始年のISO WEEKの第1週から始まる週番号の連番YYYYWWWをタイムバケットとして、第何週目に、どこの座標に、製品ロットが存在するかを指定して製品ロットを立方体で描画します。
 ところで、立方体の一辺の長さは、一般的には、約1m前後の梱包された搬送ロットであることが多いと思います。今回のデモでは、地球儀上で見える大きさとするために、サプライチェーン計画で定義したlot_sizeと立方体のサイズが比例するとして、一辺の長さを1,000倍~10,000倍にしてBOX立方体を描画しています。
BOXの高さについても、同様に、一般的には1m前後の梱包ロットが5段積み、7段積みなどとなっていることが多いのですが、secium地球儀上では、例えば1000倍したBOXの高さは、高度1000mの上空に描画されています。

 

 次に、立方体の一辺の長さ=100mとした場合について、どのように描画されるかを示したのが「図5. 製品ロットの立方体の一辺を100mとしてデータ変換した場合」です。
 ここでは、日本からハンブルグ港を経由して、ミュンヘンの在庫拠点に製品ロットが着荷した後、3つの販売チャネル(直接販売、間接販売、ネット販売)に出荷された製品ロットが、それぞれの販売チャネルで購買・販売・在庫のPSI管理が計画されており、それぞれ、P:黄色、S:青色、I:茶色の立方体の製品ロットとして、高さが何段積み(ここでは、1段=100m)になっているかを表現しています。

なお、各販売チャネルの在庫拠点の座標は、サプライチェーン計画の対象となる製品・事業の各拠点の位置を座標登録することになりますが、ここでは特定の事業を意識することを避けるために、世界中の街角にどこにでもある事業店舗のサンプル例として、スターバックスの店舗の位置座標を流用して、座標登録しています。


言い換えれば、スターバックスのような業態の店舗展開をしている事業において、全世界の前線の在庫管理と関連するグローバル・サプライチェーン ( 中間流通の在庫拠点、域内在庫拠点、マザープラントの生産・出荷、基幹素材の供給拠点など)との統合需給の整合性を確保できることが、少なくとも簡易デモのレベルでは、確認できます。

ただ、グローバルサプライチェーンの本番データを使った場合、システムのメモリ制約や演算スピードなど、様々な課題が出てくると思います。

画像
図5. 製品ロットの立方体の一辺を100mとしてデータ変換した場合


 なお、サプライチェーン計画の初期処理で、製品ロットには、最終需要地におけるISO WEEK NO毎にユニークなLOT_IDが付番されています。
さらに、計画されたタイムバケット単位で製品ロットの座標位置が変化することから、seciumのCZMLで定義する図形のID_NAMEは、計画上でユニークな製品ロットとなるように、以下の構成を持ちます。
ID_NAME = 最終需要地のnode_name + 最終需要地での需要発生週 + 計画週

 

以上のように、位置情報positionを座標と高度で対応させ、時間情報をISO WEEK NOで対応させることで、Global Weekly PSI Planが生成した共通ロットのデータを地球儀(secium)のCZML文字列に自動変換することができます。

 今回は、グローバルサプライチェーン計画を地球儀(secium)の上の製品ロットの動きとして可視化する方法について、ご紹介しました。
今回のトライアルで気になった点は、データ量が増えるとseciumの地球儀を表示するhtmlファイルが立ち上がらなくなる点で、これはWindowsの稼働環境を拡張するなどハードとOSの両面で、環境設定を見直す必要がありそうです。
また、CZMLの図形定義ファイルが10,000,000行を超えるとエディタで開けなくなるといった制約に遭遇したことも付け加えておきたいと思います。

 

 本記事を作成するにあたっては、特に、サプライチェーン計画ロットデータをseciumのCZMLデータに変換する処理の部分で、bing GTP4との会話を繰り返す中で生成されたpythonコードを採用しています。
GTP4の生産性の高さに改めて驚かされました。

参考まで、以下はデータ変換で生成されたCZML文字列のサンプルです。
説明用のコメントを付けていますが、コード本体はデータ変換で生成されたもので、//STARTからのBOX定義が製品ロットに対応しています。

// shape definitions var czml = [ { "id": "document", "name": "CZML Path", "version": "1.0" },
// START   // ここからBOX定義スタート
{
"id": "MUC_I20240102020040",                  // ユニークなLOT_ID
"position": {
"cartographicDegrees": [139.94, 35.39, 0]  // 座標の経度と緯度と高度
                  },
"box": {
    "dimensions": {
        "cartesian": [ 25000, 25000, 25000 ] },  // 立方体の一辺の長さ
    "material": {
        "solidColor": {
            "color": {
                "rgba": [ 0, 0, 255, 255 ]         // BOX色の青は販売出荷ロットを示す
                        }
                        }
                        },
    "show": [ {                       // BOXの表示、非表示の期間 ISO計画週に対応
"interval": "2024-09-30T12:00:00Z/2024-10-07T11:59:59Z", 
"boolean": true
},
{
"interval": "2024-10-07T11:59:59Z/9999-12-31T24:00:00Z",
"boolean": false
}
]
}
},   // continue
{
// ここに次のBOX定義を記述
},  // continue
{
// 最後のBOX定義を記述
}  // END // カンマ無し
] ;
//end

以上です。

 

話が前後して恐縮ですが、グローバルサプライチェーン計画について付記します。

 グローバルサプライチェーン計画とは、国内外のサプライチェーン拠点を連携させることで全体の流れを管理し、最適化する方法です。ビジネスのグローバル化に伴い、その必要性は増大しています。
しかし、グローバルサプライチェーン計画の実施には、多くの課題があります。例えば、複雑なデータを分析し、最適な生産計画や在庫管理を行うこと、需要変動や環境変化に対応すること、サプライチェーンのリスクを予測し、対策を講じることなどです。

 このような課題に対処するために、グローバルサプライチェーン計画を共通計画単位(CPU:Commom Planning Unit)と呼ぶ、サプライチェーン内で共通の製品ロットを定義し、週次の時系列データで表現するとともに、
製品ロット毎のPSI計画、
P:Production/Purchase生産または購入(仕入)
S: Ship&Sales出荷(売上)
I:Inventory在庫保管
の活動計画をグローバル・オペレーションとして可視化することで、以下のような経営効果を目指しています。
サプライチェーンの全体を俯瞰できる仕組みを作ることで、グローバル需給に関連する生産と物流のオペレーションを直感的に把握して、経営課題の発見、対策検討に役立てる
サプライチェーン上の各事業拠点の管理者間で、将来にわたるグローバル需給の情報を共有、需給調整することで、グローバル・レベルでのオペレーション効率を最大化する

 

※本記事のpythonおよびsecium javascript CZMLのソースコードは、githubの下記URLを参照ください。
Yasushi-Osugi/PySI2CPU_lots2CZML2secium: Visualising Supply Chain activities on earth(secium) with translating Supply Chain Planned lots to CZML for secium. PySI is Global weekly PSI planner, that has a trial function decoupling point and its buffer inventory analysis. (github.com)

 

2024年1月 
Yasushi Ohsugi with bing GTP4

 

グローバル・サプライチェーンの可視化(共通ロット単位による週次PSI連携)

本記事では、global supply chainのweekly planning機能、weekly PSI planning and simulationをテーマに、pythonで実装した簡易的なサプライチェーン計画システムについて、ご紹介しています。
以前の投稿で紹介した「共通ロット単位による週次PSI連携」の考え方を整理して、主に以下の3点の機能を実装しました。

なお、今回のpythonのコードの一部は、chatGTPとの対話から自動生成されたコードを取り入れて、共同で作成しています。
例えば、サプライチェーンのtree 構造を定義したNodeクラスとtree探索のアルゴリズムはchatGTPが生成したコードをそのまま採用しています。
一方、定期発注方式の在庫管理を実行しているPSIのリスト・データ操作と、サプライチェーンのtree構造との接続部分は、処理スピードを落とさないように意識しながら、私の方で工夫しました。

 1. サプライチェーン(tree構造)中の事業拠点(node)間の需給(親子)関係を定義
     ●事業拠点だけでなく輸送手段もサンプライチェーンの構成要素nodeとして定義

 2. 簡易的なglobal supply chain planning機能
    ● 長期休暇など稼働カレンダー制約を考慮
    ● 最終需要地(end user / leaf_node)から生産拠点(mother plant / root_node)
       までの需要計画を収集するBackward Planning / postorder機能
    ● 生産拠点(mother plant / root_node)から最終需要地(end user / leaf_node)
       までの供給計画をPSI操作するForeward Planning / preorder機能

 3. グローバル・サプライチェーンの在庫状態、ブルウィップをグラフで可視化

※本記事で紹介しているpythonコード一式は以下のURLに公開しています。
pythonソースコード
    visualise_bullwhip040X4github.py
● 入力ファイル
    S_month_data.csv    月次需要計画
    supply_chain_tree_attributes.csv サプライチェーンnodeの親子定義
● 出力ファイル 
    iso_week_S.csv 週次需要計画
● 画面サンプルのpdfファイル

Yasushi-Osugi/Lot-based-PSI-visualise-trial: this is a trial code for "Lot based PSI" visualise (github.com)

それでは、グローバル・サプライチェーン計画の可視化について見ていきたいと思います。
「図1. サプライチェーンの拠点間を共通ロットが移動する様子を可視化」は、サプライチェーン上で共通化された製品ロットが、拠点間を移動する様子を3D散布図で可視化しています。図1では、いくつかの表示方法を試しています。ここで、左上の「lot_id 別に色分け」したグラフは、個々のロットがサプライチェーン上の拠点間を渡り歩く様子を3D表示しており、計画状態を視覚的にとらえる上で分かりやすいと思います。

画像
図1. サプライチェーンの拠点間を共通ロットが移動する様子を可視化

この3D散布図は、pythonのplotlyライブラリを使って、サプライチェーン上の拠点(node)間を移動する製品ロットの在庫推移を可視化しています。

以下のgithubのURLからサプライチェーン計画の3D散布図デモを開くと、3D散布図をクリックして回転させることで、拠点(node)、時間(ISO WEEK)、ロット(lot_id)のそれぞれの視点から、サプライチェーン計画の状態を確認することができます。


次に、「図2. サプライチェーン上の各事業拠点の在庫状態 ブルウィップの可視化」では、2つの入力ファイルを以下のように設定して、各拠点nodeの在庫、ブルウィップの様子を可視化しています。
● supply_chain_tree_attributes.csv
   サプライチェーンtree構造を定義する入力ファイル
supply_chain_tree_attributesは、需給関係を表すtree構造の親子関係と子nodeのリードタイム、稼働カレンダー制約を定義
ここでは、サプライチェーン計画の事業拠点node数を増やして、日本JPN~ハンブルグHAMだけでなく、MUCミュンヘンなどの流通チャネルを追加定義
● S_month_data.csv 月次需要計画
 事業計画などで策定された月次の需要計画(2024年~2028年までの5ヵ年)を想定して、最終需要地の月次の需要計画を5年分を設定

画像
図2. サプライチェーン上の各事業拠点の在庫状態 ブルウィップの可視化

ここで、週次の需要計画は、月次の需要計画からISO週No上にISOカレンダーの条件に従って自動変換しています。

このように、2つの入力ファイル、
1. サプライチェーンの事業拠点の定義
2. 最終需要地( End User / leaf_node)の月次の需要計画
を準備することで、比較的容易にサプライチェーン計画を作成し、可視化することができます。

ここに示した日本~ドイツのサプライチェーン定義に加えて、米州、中国、欧州、アジア、アフリカなど各地域のサプライチェーンの拠点を定義して、最終需要地の月次需要計画を準備すれば、global supply planとして、生産拠点mother plantからの供給計画を策定することができるようになります。

ご紹介したpythonプログラムの詳細については、今後、別の記事で説明していきたいと思いますが、pythonのコードは大きくないので、ご興味のある方はgithub上のソートコードを読む方が早いかもしれません。

なお、今回ご紹介しているpythonコードには、供給側での供給量を最適配分する処理は含まれていません。
サプライチェーン全体の供給計画の最適化機能の実装は、今後の課題ですが、以下のような最適化手法の適用アプローチが考えられます。

サプライチェーン計画における最適化機能の実装アプローチについて】
前提: 最適化モジュールの実装では、「目的関数」として利益、顧客満足度などを設定し、計画を操作する「オペレータ」を定義する。

 案A. mother_plant/decupling pointの出荷ポジションの出荷優先度で最適化
 案B. サプライチェーンのネットワーク構造の再構成で最適化
 案C. 季節変動の大きい需要に対するdecupling pointの在庫方針で最適化
 案D. 年間供給量と生産コストから、年間生産量と需要の割当で最適化
 案X. 上記1-4の目的関数とオペレータを使って、機械学習モデルで最適化
 X-1. サプライチーン全体の評価とオペレータのフレームワーク整備
 X-2. サプライチェーンの可視化と計画コックピットGUI
など、いくつかの適用アプローチ案が考えられます。
ただ、これらの機能を実装するのには少し時間がかかるかもしれません。
また、ビジネス・シーンに合わせた最適化ソルバーの適用方法、適用の優先順位などを検討していく必要があります。

ここでは、より基本的な部分、サプライチェーン全体のデータ整合性を確保するために重要な「共通ロット単位」の考え方と「PSIの操作」について説明します。

【共通ロット単位の考え方について】
「共通ロット単位」はサプライチェーン全体のデータ整合性をとるために重要なデータ単位になります。
共通ロット単位の考え方の主なポイントは次の2点です。

●共通ロットは、サプライチェーン上でユニークなlot_idを持っている。ここで、lot_idは文字列で、 "拠点名node" + "年YYYY" + "ISO週WW" + "lot_seq"で構成されている。
lot_idは、サプライチェーン上の最終消費地(end user / leaf node)でのみ発生し、ロットサイズとの掛け算で需要量になる。

つまり、最終消費地(end user / leaf_node)の需要情報を発生源、起点にして、サプライチェーン上を最終需要地から、各国販売会社、域内事業会社、輸送中在庫、グローバル生産拠点まで、サプライチェーン上の各拠点間の需要情報の連鎖を整合させて、PSI計算(内部処理としてPSI操作)をしていきます。
結果として、グローバル生産拠点mother plantにおける出荷ポジション、出荷週の中に最終需要地からのロット単位の需要データが集計されていきます。
そして、集計された需要情報をもとに、供給計画(資源の最適配分の問題)を解いて、事業経営の利益最適化を計画立案していくことになります。

【PSIの操作について】
ここで、PSIを「計算」するのではなく、PSIを「操作」すると説明しているのは、実際のPSI内部処理において、
●数値の加減乗除で行うPSI計算
を行っているのではなく、
●lot_idのリストデータを追加・削除する処理、PSIの操作
を行っているからです。

サプライチェーンの実際のアプリケーション的なイメージとしては、
●PSI操作
●lot_idリストデータの追加・削除処理
は、
●製品ロットの倉庫への入出庫に相当する操作
であると考えると分かりやすいと思います。

以上のような、共通ロット単位の考え方をベースに週次PSI連携することで、サプライチェーン全体のデータ整合性を確保した計画機能を実現することができます。

次回以降の記事では、以下のテーマで検討していきたいと思います。
1. 事業経営の観点から、中長期経営計画とサプライチェーン供給計画の関係について
2. グローバル・サプライチェーン計画機能のpythonでの実装の詳細について
3. global supply chain planning and simulationの最適化機能とその応用について

初夏を思わせる五月晴れの自宅にて
大杉 泰司 with chatGPT

サプライチェーンの需給計画を一気通貫するPythonデモ

副題: 事業計画の販売計画をもとにサプライチェーン上の製品供給の伝播(ブルウィップ)を可視化
英文タイトル: Python Demo for End-to-End Supply Chain Demand Planning
subtitle: "Visualizing the Propagation (Bullwhip Effect) of Product Supply in the Supply Chain based on Sales Plans in Business Planning"

【はじめに】
本記事は、以前に投稿したglobal weekly supply chain planの記事の続きです。

まず最初に、End 2 End Supply Chain のアニメーション表示をご紹介します。
以下の「図0のgifファイル」と「URLリンク先のhtmlファイル」のアニメーションは同じ内容ですが、以下URLをクリックすると事業拠点(node)が移動する様子をより分かりやすく表示しています。
yasushi-osugi.github.io/visualise-E2E-supply-chain/

画像
図0. end to end supply chain planning weekly accumed image 

2023年6月10日 追記: 需要サイド(outbound)と供給サイド(inbound)を接続した一気通貫サプライチェーン(end to end supply chain)を可視化した「図0. end to end supply chain planning weekly accumed image 」を追加しました。中長期計画(5年間分)を前提に、最終消費地の月次販売計画を入力として、End2End supply chain全体に展開して、各事業拠点(node)の週次の需要計画と供給計画を生成しています。図0のアニメーションでは、流通市場への完成品供給が始まる前年の第40週辺りから部材サプライヤーの生産がスタートしています。その後、当年の年初(=53週)の辺りからマザープラントから流通市場への製品供給がスタートしている様子が分かります。※図0のアニメーション表示(gifファイルを生成)するpythonのソートコードは、下記githubにて公開しています。
Yasushi-Osugi/visualise-E2E-supply-chain: visualising End 2 End global weekly Supply Chain with plotly Sankey Diagram (github.com)

今回、作成したpythonデモの特長は、以下の2点です。
サプライチェーンのEnd to End (最終消費~流通在庫~完成品生産~モジュール生産1次サプライヤー~基幹部品2次サプライヤー)を一気通貫する購買・販売・在庫(PSI)計画の連鎖を表現
そのために、サプライチェーン全体で共通の製品ロット単位、共通計画単位(common plan unit)を定義している。

➁計画処理スピードを重視したシンプルな計画モデルを定義
データの粒度を「週次バケットの共通ロット単位」とし、必要最低限の制約として、長期休暇(日本の5月の連休、お盆休み、中国の春節など)の非稼働カレンダーを考慮しながら、単純にリードタイム・オフセットする仕組みとした。

以上から、最終消費市場から部材サプライヤーまで、サプライチェーン上の複数拠点間のデータ整合性を取りながら、短時間で需給計画を生成できる機能を実装しました。
一方、今回は処理スピードを優先する観点から、利益や売上の最大化を考慮する最適化モジュール (線形計画や機械学習など) の実装は行っていません。なお、pythonコードの実装にあたっては、chatGTPとの会話から自動生成されたpythonコードを一部採用しています。

前回までの記事では、グローバル生産拠点・マザープラントから最終消費市場までの完成品流通(アウトバウンド)を対象にした需給計画を取り扱っていましたが、今回は、部材・基幹部品メーカーからマザープラントまで(インバウンド)を対象にした需給計画を取り扱えるように計画対象を拡張しました。
具体的には、マザープラントroot nodeにおいて、需要サイド(アウトバウンド)と供給サイド(インバウンド)のPSI 計画を接続する事で、サプライチェーンの端から端まで連携する需給計画機能を実現しています。

例えば、「図1. 供給サイド (インバウンド) サプライチェーンの在庫推移」では、最終市場の販売ロット情報が、流通経路を遡って、完成品の生産拠点を経由して、基幹部品の製造メーカーに配置されている様子が分かります。
図1の吹き出し表示のとおり、自動車の基幹部品のひとつであるワイヤーハーネスwireharness製造の第72週のロット番号26は、マザープラント(日本の完成品の生産出荷)を経由して、ドイツ ハンブルグ販売拠点のネット販売チャネルの2024年27週の販売ロットにリンクしている計画であることが分かります。

また、サプライチェーン上の各拠点nodeにおける在庫発注計画(PSI計画)の機能は、処理スピードを重視するために、できるかぎり簡単な仕組み (週次バケットの共通ロット単位データを単純にリードタイム・オフセットする仕組み) とすることで、サプライチェーン上の複数拠点間のデータ整合性を取りながら、短時間で需給計画を生成できるようにしました。

以下では、サプライチェーン上の在庫推移の様子を可視化して、3Dグラフとアニメーションで見ていきたいと思います。

画像
図1. 供給サイド (インバウンド) サプライチェーンの在庫推移

サプライチェーン需給計画の概要】
今回は、できるかぎりシンプルな計画立案方法を採用して、処理時間の短縮に配慮しています。
大前提として、中長期の事業計画を想定しており、計画対象期間は5年間(260週)分とする。
前処理として、サプライチェーン上の最終消費市場の月次の需要計画(事業計画における月次の販売計画)を入力として、ISO週の週次の需要計画に変換、生成しておきます。

以上の前提をもとに、
①global supply chainの需給計画を生成
②生産拠点マザープラントの生産平準化
③製品供給計画を生成
を処理して、在庫推移を可視化しました。
以下、サプライチェーン計画処理の概要を説明してから、出力される在庫推移のアニメーション(bullwhip animation)をご紹介します。

ご紹介したデモ版のpythonソースコードは、下記URLのgithubにあります。※こちらのコードは整理されていないので読みづらいです。
Yasushi-Osugi/Yasushi-Osugi-bullwhip-image-on-supply-chain (github.com)

※アウトバウンド(需要サイド)とインバウンド(供給サイド)を接続した計画機能のpythonコードは下記URLのgithubを参照ください。
Yasushi-Osugi/global_weekly_Dm_Sp_visualise: global weekly Supply Chain connecting OUTBOUND and INBOUND (github.com)

【入力ファイル】
以下の2種類の入力データ、最終需要情報とサプライチェーン需給定義を用意します。
サプライチェーンの需給関係(tree構造)
    ●流通サイドのoutboud tree定義 ※完成品から最終市場まで
 ●供給サイドのinbound tree定義 ※サプライヤーから完成生産まで(データ構造のみ対応)

➁月次の末端市場の最終需要計画を定義

【主要な処理】
①需要計画の生成 ※末端市場の需要から供給サイドに需要情報を展開
➁生産平準化処理 ※簡易的に生産能力の上限を設定して先行生産
➂供給計画の処理 ※マザープラントの確定出荷計画から末端の最終消費市場に向けて供給計画を展開

【出力】
上記を処理した後、在庫の推移を可視化
以下のリンクからサプライチェーンの在庫推移の様子supply chain bullwhip animationを可視化

供給計画の3Dイメージ「図2. 流通サイド (アウトバウンド) サプライチェーンの在庫推移」は、3次元の棒グラフ、
X軸: 時間 ISO Week
Y軸: 事業拠点 Location node
Z軸: ロットリストのロット数 Lot number on ID list
で供給計画を可視化しています。
以下のリンクからグラフ表示して、グラフを触ると回転するので、それぞれの軸から計画状態を確認することができます。
https://yasushi-osugi.github.io/demand-and-supply-planning/

画像
図2. 流通サイド (アウトバウンド) サプライチェーンの在庫推移

サプライチェーン在庫推移の可視化】
サプライチェーンの需給計画を検討していると、ブルウィップ効果(bullwhip effect)という言葉がでてくることがあります。サプライチェーン上の需要情報と製品供給の伝播、在庫推移の様子が波を打つように移動するイメージになることから、同様に波を打って増幅していくイメージの「鞭がしなる」bullwhipに例えてブルウィップ効果(bullwhip effect)と呼びます。
「図3. サプライチェーン拠点間(アウトバウンド)の在庫推移」のとおり、ブルウィップのアニメーションbullwhip animationは、サプライチェーン上の各事業拠点の在庫推移を週次の時系列でアニメーション表示しています。以下のリンクを参照。
https://yasushi-osugi.github.io/Yasushi-Osugi-bullwhip-image-on-supply-chain/

画像
図3. サプライチェーン拠点間(アウトバウンド)の在庫推移

以上、簡単ですが、サプライチェーン上の在庫推移、ブルウィップの可視化について、ご紹介させていただきました。

【ご紹介したモデルの長所と短所】
今回は、流通サイドoutbound supply chainと部品素材の供給サイドinbound supply chainをマザープラントroot  node で連結して、サプライチェーンの端から端までEnd to End supply chain ( 素材供給~完成品の生産~末端市場までのサプライチェーン全体) を一気通貫する需給計画を生成、可視化する機能を実装しました。

End to End supply chain 計画の長所は、以下のとおりです。
①部材メーカーの立場からは、最終消費市場での販売タイミングが分かるので、対象となる生産ロットの製品仕様を対象市場セグメント向けに合わせる事が、部材メーカー単独の予測ではなく、サプライチェーン全体の共通認識としてできるようになります。
②末端の販売チャネルの立場からは、自身に割当られた商品が、いつ何処で生産され、輸送され、在庫されて来るのかが分かるので、むやみに在庫を積み増して、結果的に不良在庫や廃棄ロスを発生させずに済むようになります。それぞれの販売チャネルは、自身の販売促進に専念することができます。
③グローバル営業本部とマザープラントの立場からは、事業計画の企画販売数を週次で補足することで、特定の地域市場で競合メーカーが販促を仕掛けてくるケースや、基幹部品サプライヤーの供給量が変動するケースなど、環境変化への対応、意思決定をサプライチェーン全体を見渡しながら、優先順位を明確にした対処ができるようになります。

本モデルの短所とその対策は以下のとおりです。
① 最適化モジュールの必要性: 処理スピードを重視するため、利益や売上を最大化するための最適化モジュール(線形計画や機械学習など)の実装は行われていません。
したがって、収益最大化や最適な意思決定を考慮する場合には、追加のモジュールを組み込む必要があります。

➁ データ粒度の制約: 「週次バケットの共通ロット単位」をデータ粒度としていますが、これは必ずしも現実のサプライチェーンのすべての要素に対して最適な粒度ではありません。
ニーズに応じて、より詳細な粒度が必要な場合があります。

サプライチェーン内の全拠点へ適用時の制約: サプライチェーン上の拠点数が増えると、処理時間や計算量が急速に増加します。
また、計画処理のスピードを重視したモデルになっているのですが、供給サイドinboundの可視化、3Dグラフ表示処理では共通ロット数が増えると表示時間が極端に長くなってしまいました。
大規模で複雑なサプライチェーンに対しては、モデルの拡張方法や内部処理の最適化、可視化の方法などで工夫が必要になります。

サプライチェーンモデルの表現力: 本モデルでは非常にシンプルな計画モデルを採用していますが、サプライチェーン内のさまざまな要素や制約をglobal weekly PSI planのモデルとして、より現実的なシナリオや特定のビジネスニーズに対応するためには、どのようにモデル化していけば良いか、モデル構築のノウハウの蓄積が必要となります。
 ご紹介したモデルは、週次のリードタイムのパラメーター設定が輸送期間と在庫滞留期間を表現するというシンプルなモデルですが、このデータ構造をベースに、出荷指示のコントロールにPUSH方式とPULL方式の仕組みを組合せて実装することで、サプライチェーン計画モデルのシミュレーション機能を実態に合わせて拡張していくことができるのではないかと考えています。
 それから、需要情報の取り扱いについて、今回のデモにおいては「事業計画の販売計画」という事業責任者の意思入れがされた数字を前提としていますが、実際には、需要は変化し続け、需要予測の精度に依存する仕組みである事から、実績との誤差を吸収する仕組みを設置する必要があります。
例えば、輸送手段が船便の場合、輸送時間が10週間を超えるなど、計画リードタイムも長くなるので、供給量のアクセル・ブレーキにタイムラグが発生します。予測の誤差も大きくなります。
対処方法としては、
1. 誤差を吸収するバッファ在庫の配置を検討する事
2. 輸送手段をエア便に変更する事
3. マザープラントの供給量の増減で対応する事
などが実態ですが、このような変化対応の仕組みを計画モデル上で同様に表現することが課題になります。

【今後の取り組みについて】
今後の取り組みとしては、サプライチェーン全体を見通せる供給計画と在庫推移の可視化、および対話型の計画シミュレーションの仕組み、最適化モジュールの組み込みなどを検討していきたいと思います。

ところで、今回ご紹介したpythonコードの一部は、chatGPTに要求仕様を提示して生成されたコードを採用しています。例えば、pythonコード中の内包表現やtree構造のポインター操作などは、chatGPTが生成したコードを参考にしています。
おそらく、私の経験からは、私自身の開発生産性は10倍~100倍上がった感覚で、構想レベルでの検討に割く時間がふえました。
またchatGPTは、構想レベルの検討にも的確な回答を生成してくれるので、今回の取り組みの方向性を検討する上でも非常に参考になります。

2023年5月
大杉 泰司 with chatGPT

グローバル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月 
桜の開花を待つ早春の自宅にて

大杉 泰司