ノードがさまざまな種類のワークロードであり、エッジがワークロード間の依存関係であるグラフがあるとします。(循環依存関係が存在してはならないため、これはDAGです。)
また、作業を実行できる複数のエージェントのセットがあります。
一部のワークロードの種類は任意のエージェントに与えることができ、他の種類は特定のエージェントに与える必要があり、他の種類は特定のエージェントグループの1つのエージェントに与える必要があります。
次のようなワークロードを割り当てるにはどうすればよいですか。
すべてのブロッキングワークロードが完了するまで、エージェントにワークロードは与えられません
総ワークロードグラフを完成させるには、可能な限り最短の時間が必要です。(エージェントのアイドル時間を最小限に抑えることは一般的には良いことですが、基本的な要件ではないことに注意してください。特定のエージェントが長時間アイドル状態になるシナリオがありますが、すべてのエージェントのすべてのジョブを完了するための合計時間は最小です。)
ワークロードには期間の見積もりがありますが、簡単にするために、すべてのワークロードの計算に同じ時間がかかると想定しています。(すべてのワークロードが実質的に一定時間の操作になるまで、各ワークロードを複数のシリアル依存のワークロードに分割するだけです。)
トポロジカルDAGソートを認識していますが、これにより、ノードの単一のシリアル順序が生成されます。複数のエージェントが並行して動作しており、タスクの非自明な並べ替えによって、潜在的に大規模なタイミング最適化を実行できるような関係になっています。
この結果は、全体の最小期間のガントチャートとして最適にレンダリングされます。実際、この問題を、マイルストーンをできるだけ早く完了することを目的として、チーム内のエンジニアにマイルストーンでバグチケットを割り当てることと考えると、そのアイデアが得られます。(いいえ...グラフをMS Projectにインポートしてからエクスポートするように言わないでください:)-その背後にあるアルゴリズムに興味があります!)
よく知られているアルゴリズム、ソフトウェアライブラリ、または一般的な問題と原則へのポインタは大歓迎です!