PSI計画に機械学習の機能を組み込むための考え方 (ロット積上げPSI計画:Lot Loading PSI)
2022年12月 追記:本記事で紹介したPSI計画のpythonのデータ入出力をpandas DataframeでI/Oするように修正したV0R3を作りました。下記のgithubリンクに、PySI_V0R3_demand_plan010_on_SC.pyとして公開しています。
ただ、PSI計画のバッチ処理のみなので、結果を判断するのは難しいです。
別途、PSIグラフ表示(いくつか試作しているのですが)するdashboard的なものを作っていこうと思ってます。
2022年6月 追記 : 本記事でご紹介したPSI計画のpythonのソース・コード一式をgitgubで公開しております。ご興味のある方は参照ください。
なお、ライセンスはMIT Licenseです。
ここでは、前回ご紹介した機械学習の機能を組み込んだPSI計画の仕組みについて、内部処理の概要を説明します。
「図2-1. PSI計画表とロット積上げ表」は、Pythonで実装する前にEXCELで作ったプロトタイプの入出力データのイメージです。
上部の青枠部分は一般的なPSI計画(定期発注方式の在庫管理)の計算とコスト評価を行う領域、
下部の赤枠部分は発注ロット単位にロットを積上げる領域です。
2つの領域は、Python上では以下の2つのクラスに対応しています。
class PlanSpace PSI計画・評価領域
class LotSpace ロット積上げ領域
クラス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計画の累積グラフが変化する様子を示しています。
以下では、ロット積上げ(Lot Loading)方式によるPSI計画の処理手順をもう少し詳しく見ていきましょう。
表2と図2-3に処理手順と処理イメージを示します。
ポイントは、
手順3と4: LotSpaceの中でロットを積み上げる行動(action)により、
手順6: P購入の値が生成・増加し、
手順7と8: PlanSpaceの中でPSI計画状態の更新とコスト評価が行われて報酬(reward)が生成されるという流れです。
この後、Q学習が進行して行動(action)の選択肢を管理するQ-Tableが更新されます。
なお、手順1の入力情報、S販売(予測と実績)の取り扱いについては需要予測の様々な手法があるので、ここでは需要は事前に与えられている、所与のものとして深く検討することは避けたいと思います。
グローバルSCMでの筆者の経験からは、グローバル需給計画を検討している経営本部側で利益計画を策定する中で、各販売事業会社への供給量の割り振り(あるいは販売目標数)が事業計画レベルの月次計画で事前に作成されており、この情報を週次計画にブレイクダウンすることでS販売予測に相当する入力情報を生成できるのではないかと思います。
ただ、近年のIoTの進展もあり、リアルタイムで実需の変化をとらえて、S販売情報に軌道修正をかける仕組みが活用されてくる、あるいは既に活用されているのかもしれません。
今回は、「PSI計画に機械学習の機能を組み込むための考え方(ロット積上げPSI計画)」について説明させていただきました。
次回は、「PSI計画のコスト評価の計算方法」について説明したいと思います。