![見出し画像](https://assets.st-note.com/production/uploads/images/105120184/rectangle_large_type_2_3933bd18a06a085ae494562e28e43920.png?width=1200)
グローバル・サプライチェーンの可視化(共通ロット単位による週次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表示しており、計画状態を視覚的にとらえる上で分かりやすいと思います。
![](https://assets.st-note.com/img/1683541799633-KgKgyJ7nVU.png?width=1200)
この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年分を設定
![](https://assets.st-note.com/img/1683594035452-CYAQlXCc79.png?width=1200)
ここで、週次の需要計画は、月次の需要計画から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計算
を行っているのではなく、
●PSIをロット単位のリストで表し、リスト中のlot_idを追加・削除することでPSI操作
を行っているからです。
サプライチェーンの実際のアプリケーション的なイメージとしては、
●PSI操作
●lot_idリストデータの追加・削除処理
は、
●製品ロットの倉庫への入出庫に相当する操作
であると考えると分かりやすいと思います。
以上のような、共通ロット単位の考え方をベースに週次PSI連携することで、サプライチェーン全体のデータ整合性を確保した計画機能を実現することができます。
次回以降の記事では、以下のテーマで検討していきたいと思います。
1. 事業経営の観点から、中長期経営計画とサプライチェーン供給計画の関係について
2. グローバル・サプライチェーン計画機能のpythonでの実装の詳細について
3. global supply chain planning and simulationの最適化機能とその応用について
初夏を思わせる五月晴れの自宅にて
大杉 泰司 with chatGPT
この記事が気に入ったらサポートをしてみませんか?