サプライチェーンを救うのはコンパイルですか?
コンパイルとは、ソースコードを別の言語に変換するコンピュータプログラムであるコンパイラを作成する技術のことを指します。プログラマ以外の人々の中には、コンパイラが何をするのかを知らない人が少なく、プログラマの中にもコンパイラの設計方法を知っている人は少ないです。最初は、コンパイルに関する問題は(少なくとも言っても)サプライチェーンには関係ないように思われます。しかし、現在では、Lokadでは、コンパイルの技術が日々のサプライチェーンプロジェクトを救っています。
自己紹介: コンパイルスキルを持つソフトウェアエンジニアはなかなかいませんが、私たちは採用しています。重要なことに取り組みたいですか?では、次回の飛行機が部品不足で遅れたり、求めている薬が在庫切れの場合には、Lokadに参加することで、あなたが違いを生み出すことができることを忘れないでください :-)
サプライチェーンは複雑で、狂気じみています。グローバル化により、調達の機会は増えましたが、遅延は以前よりも長く、不規則になりました。販売チャネルも増えています:物理店舗、オンラインストア、マーケットプレイス、リセラー、卸売業者などがあります。そして、Amazonのおかげで、誰もがどこでもすべてを注文して翌日に受け取ることを期待しています。サプライチェーンの期待はこれまで以上に高まっています。
サプライチェーンの問題をプログラミング言語の表現力を持たない方法で取り組むことはうまくいきません。レゴのプログラミングが実現しないように、サプライチェーンの課題はチェックボックスやドロップダウンには収まりません。これによって、ソフトウェアベンダーが試みることを妨げるものではありません。1000以上のテーブルを含むソリューションは非常に一般的で、各テーブルは平均して100のフィールドを持っています。そして、クライアント企業はソリューションの機能領域の約1%しか使用していませんが、それでも普及している複雑さに対処しなければなりません。
コンパイルは、統計的および組み合わせ的な問題を解決するためのパワーツールとしての高品質な抽象化を作成する際に、非常に多くの知識とノウハウを提供するため、サプライチェーンの問題を救います(実際にはそれ以上のこともあります)。そして、ほとんどのサプライチェーンの課題は統計的および組み合わせ的な問題であることが多いです。例えば、Lokadでは、分布の代数を導入することで、パッケージ化されたソフトウェアの機能を通じたより直接的なアプローチでは解決できなかった複雑なリードタイムの問題を解決しました。
言語の機能が通常のアプリの機能(wysiwygなど)と異なる点は、言語の機能が特定の課題の特異性に対してアプリの機能よりもはるかに敏感ではないということです。例えば、超季節的な製品の特定の場合に在庫切れの検出ロジックがうまく機能しない状況を考えてみましょう。もし機能が言語の構造を通じて提供される場合、データの範囲を常に狭めることで、機能が正確に意図した場所で動作するようにすることができます。必要に応じて、数値解析を通じて範囲を動的に調整することもできます。一方、アプリの機能では、この機能に組み込まれたフィルターオプションに制約されることになります。アプリの機能は、問題が狭く明確に定義されている場合にのみ適しており、これは実際にはサプライチェーンの最適化とは非常に異なります。
サプライチェーンでは、プログラム可能性が光ります。なぜなら:
- 問題は非常に数値的であり、非常に構造化されている
- サプライチェーンはモジュラーであり、このモジュラリティを活用する必要がある
- 変数の数は多いが、圧倒的ではない
- 問題の正確な形状に合わせることが重要である
ソフトウェアベンダーの多くが、プログラム可能性を_徐々に_再発明しようとする様子は少し面白いです。ユーザーインターフェースが深く複雑になり、フィルター、オプション、前処理や後処理フック、テンプレート化されたアラート、KPIモニターなどを追加できるようになると、ユーザーインターフェースは徐々にプログラム可能なものになり、プログラマー以外は実際には理解できなくなります(彼ら自身の既存のプログラミングスキルのおかげで)。プログラム可能ではありますが、非常に複雑な方法であると言えます。
コンパイルは、エンジニアリングスキルを高める芸術です。問題の解決をスムーズにするために、抽象化と言語構造を作り上げる必要があります。有名なBrian Kernighanの言葉によれば、「デバッグはプログラムを書くことの2倍難しいことは誰でも知っています。だから、書くときにできるだけ賢いなら、どうやってデバッグするのですか?」とあります。サプライチェーン最適化にも同じ論理が適用されます。なぜなら、それは本質的にコードを書くことと同じだからです。実際、Lokadでは文字通り同じことです。
従来のITの知恵は、まず簡単な部分を自動化し、人間の専門家によってより複雑な要素に対処させるべきだと述べています。しかし、サプライチェーンでは、このアプローチは_毎回大失敗します_。サプライチェーンの最も複雑な部分はほとんど常に最もコストのかかる部分であり、緊急に注意を必要とします。簡単な部分は、最小/最大在庫やKanbanによって自己管理できます。自動列車運行のソフトウェアを洗練させることで自動車のためのソフトウェアを構築しないように、単純な課題を解決するために設計されたソフトウェアを洗練させることで、困難なサプライチェーンの問題に取り組むことはできません。
もちろん、コンパイルだけではサプライチェーンの課題に対処するのは十分ではありません。機械学習、ビッグデータ処理、そして相当な量の人間のスキルも言及する価値があります。ただし、すべての場合において、注意深く高品質な抽象化を行うことは非常に役立ちます。入力データが適切に準備されている場合、機械学習ははるかに簡単です。計算が高度に並列化されることが容易である場合、ビッグデータ処理もはるかに簡単です。