Markus Leopoldseder(マッキンゼーのグローバル製造およびサプライチェーンプラクティスのナレッジディレクター)は、サプライチェーンの目的における異なる可能性のあるプログラミング(DP)の適用可能性に関して、2つの関連する質問を提起しました。この技術的な投稿では、整数の制約と不確実性がそれぞれDPでどのように扱われるかについて洞察を提供しようとします。これはLokadのアプローチの最初の一見です。後日、docs.lokad.comで拡張されたレシピを投稿する予定です。

DPは整数変数にどのように適用されるのですか?実際、目的関数が整数を入力として受け取る場合、微分可能ではないかもしれません。

サプライチェーンの観点から、ほとんどの意思決定は_離散的_です:製品の単位数を4.2単位注文することはできません。4または5のいずれかです。したがって、私たちは_整数_とうまく機能する方法を学習および最適化の観点から探しています。読者から鋭く指摘されたように、DPのパラメータは数値であり、これらのパラメータは整数に制約することはできません。なぜなら、この観点はDPの中核である確率的勾配降下法と互換性がないからです。

DPを介して離散的な意思決定とそれに対応する離散的な目的関数を得るための方法はいくつかあります。それらは、単純で直感的なものから、数値最適化の観点からは非常に複雑で比類のないものまで、さまざまです。

異なる可能性のあるプログラミングにおける整数と不確実性

最も簡単なアプローチは、トレーニング時に目的関数を補間し、評価時に結果を四捨五入することです。たとえば、整数であると予想される発注数量を求める場合、目的関数は補間を介して任意の数値に拡張することができます。これは、離散的であるが比較的線形な振る舞いを示すシステムを考慮する場合にはうまく機能します。ただし、MOQ(最小発注数量)制約などの強い非線形性に直面する場合、これはあまりうまく機能しません。

そのような状況に対処するために、目的関数は代替関数に置き換えることができます。代替関数は、元の目的関数を滑らかで微分可能な方法で近似する関数です。たとえば、MOQ制約のペナルティコストに関連付けられるステップ関数は、シグモイド関数に置き換えることができます。エポックごとに、代替関数は元の目的関数に数値的に近づくように徐々に変形されます。

サプライチェーンの観点から、私たちの経験では、代替関数は驚くほどうまく機能します。実際、良い解にスムーズにイテレートすることができない状況はまれです。サプライチェーンの問題は、1ビットを変更するだけで解が完全に破綻する暗号パズルではありません。たとえば、490単位での発注が利益をもたらす場合、500のMOQがある場合には、500単位の発注も利益をもたらす可能性が高いです。

さらに、変分オートエンコーダに触発されたより洗練されたアプローチもあります。層の(「ディープラーニング層」のような)分数の出力は、任意の分布から得られるランダムな整数乱数に変換されます。たとえば、ポアソン分布です。このメカニズムにより、プログラムは分数のパラメータのみで動作し、その後、目的関数に注入できる整数の出力を生成します。確率的勾配降下法は、モンテカルロのように、ランダムな整数乱数の生成を制御する_laws_を適切に調整するために、プロセスを多数回繰り返します。

最後に、AlphaZeroなどの最も複雑なアプローチでは、複雑な層のリスト(例:「ディープ」な計算ネットワーク)の導入に頼っています。通常、Softmaxのような層で離散的な意思決定を生成します。これらのアプローチは、非常に非線形な最適化問題において最先端の結果を提供し、AlphaGo(後にAlphaZeroとして再定義)が李世ドルに勝利したことで示されています。DPもこれらの方法を活用することができます - 計算オーバーヘッドを制御するために、ネットワークの深さと複雑さを調整するだけです。幸いなことに、実際のところ、MOQ問題を解決することは比較的困難ですが、最適化問題としての世界チャンピオンに勝つことほど困難ではありませんし、(ディープラーニングの基準による)「浅い」ネットワークでも多くの成果を上げることができます。

供給チェーンの状況でよく見られるような離散的な状況に対処するためのより直接的で実践的な方法を提供することは、既存のフレームワークを曲げるのではなく、Lokadで独自のDPソフトウェアスタックを開発することに至った主な理由の1つでした。これにより、それらの状況に適した特別な構造を導入するために、より自由度を持つことができました。

それらの構造のいくつかは、DP言語自体を介して書かれた「標準」ライブラリのようなものであり、繰り返しタスクを軽減し、ミスのクラスを回避するための手段です。ただし、それらの構造のいくつかは、純粋な自動微分では実装できなかった特殊な機能を提供するために、確率的勾配降下法と絡み合っています。

DPでは不確実性をどのように扱いますか?確かに、DPはニューラルネットワークを最適化する確率的勾配降下法を使用して、任意の複雑な目的関数を最適化することができます。これは特別な関数であるニューラルネットワークを最適化する確率的勾配降下法を使用して、パラメータを調整することで実現されます。確率分布はどのように考慮されますか?

DPで不確実性を扱うために採用している主なアプローチは、基になる確率分布から生成される将来のイベントのストリームを反映した時系列である「軌跡」を生成し、その後、目的関数がモンテカルロパターンに従って操作することです。このアプローチにより、確率分布が「完成品」の将来の需要のためにのみ利用可能であった場合でも、BOM(材料の請求書)の連鎖の結果など、システム内の複雑な離散的な相互作用をモデル化することができます。

このアプローチは新しいものではありません。変分オートエンコーダは、異なる視点から設計されているものの、似たような戦略を採用しており、分布のパラメータ化(VAEの場合はガウス分布)を入力とし、乱数を出力します。すでに変分オートエンコーダを紹介した際に説明したように、私たちは頻繁に整数乱数を生成する「カウント」分布を使用しています。連続的なガウス分布ではなく。

この生成的アプローチ - 分布を観測値(つまり軌跡)に変換するアプローチ - は、DPプロセス内で完全に内部化することもできます。確率分布を入力として受け取り、それらから意思決定を最適化するのではなく、最適化が同時に行われる中で分布自体を学習することができます。たとえば、需要予測は価格最適化と共に行われることがあります。価格戦略は需要に強い影響を与えるため、2つの側面は互いに分離して分析することはできません。

上記で言及したレシピの生成部分は、写真のような写実的な画像を生成するのに非常に成功している生成対抗ネットワークでも見つけることができます。時系列を考慮する場合、LSTMとGRU(LSTMのよりシンプルでモダンな相当物)は、確率分布を明示的にモデル化することができなかった複雑な時系列を生成する方法を提供します。

供給チェーンの観点からは、DPはディープラーニングの観点から通常考慮されるシナリオと比較して、より異種なオブジェクト(グラフ、時系列、関係データ)を活用するための柔軟性を提供します。再び、Lokadのエンジニアリングのほとんどは、在庫、価格、購入、生産、アソートメントなどを最適化する際に生じる特定の要件に合わせてツールが整合していることを確認するために、供給チェーンの観点に集中しています - 画像、音声、自然言語処理に焦点を当てるのではなく。