「与えられた条件で計算する」と「問題の構造自体を動的に制御する」はなぜ別物なのか
従来のスケジューリング最適化システムは「与えられた条件で計算する」システムだ。
全ての割当候補をあらかじめ変数として定義し、制約条件を満たす最適な組み合わせを探索する。
学習塾の時間割作成、物流の配送計画、工場の生産計画。これらの領域でこの技術は長年使われてきた。
しかし実際の業務運用では、全ての局面が「全てをゼロから作る」わけではない。
確定済みの配置が存在する状態で未確定の部分だけを最適化する局面、特定の1件に変更が生じたとき影響範囲のみを再計算する局面が常に発生する。
従来技術でこれに対応しようとすると、ユーザーが「固定したい割当」を個別に指定し、再計算の対象範囲を手動で設定する必要があった。
固定すべき箇所を探索対象に含めてしまうと、関係のない配置まで変わってしまう。
探索対象とすべき箇所を固定してしまうと、解なしとなり配置を生成できない。
この判断をユーザーに委ねる構造が、従来技術の根本的な限界だった。
shiftect.が解こうとしている問題は、この判断をシステムが担うという制御の問題だ。
ユーザーの操作状況と確定済みデータの保持状況という状態情報に基づいて、今回の最適化処理における変数と定数の構成をシステムが自動的に決定する。
「全体をゼロから作る局面」では全リソースを変数とし、「一部を修正する局面」では影響範囲のみを変数とし、それ以外を定数として固定する。
この切り替えをシステムが自動的に判断する。
「与えられた条件で計算する」とは、問題の構造があらかじめ外から与えられることを前提とする。
「問題の構造自体を動的に制御する」とは、業務の文脈に応じて問題の構造そのものをシステムが決定することだ。
shiftect.の発明の核心はここにある。
最適化アルゴリズム自体を切り替えるのではない。
同一のアルゴリズムに渡す入力構成の構造を、業務の局面に応じてシステムが自動的に決定するという制御の仕組みが、先行技術に存在しない新しさだ。