この問題は、NP 完全であるビン パッキング(およびおそらくジョブ ショップ スケジューリング)の形式のように見えるため、OptaPlanner は FIFO アルゴリズムよりも優れています。
しかし、それは本当にNP 完全なのですか? これらの条件がすべて満たされている場合、次のような状況ではない可能性があります。
- 40 台のサーバーはすべて同一です。そのため、サーバー B ではなくサーバー A で優先レポートを実行しても、レポートの配信は速くなりません。
- 40 台のサーバーはすべて同一です。そのため、合計期間 (特定の入力セットの場合) は一定です。
- メイクスパンの合計は関係ありません。したがって、1 時間の小規模な仕事が 20 件と、20 時間の大きな仕事が 1 件あり、2 台のマシンがある場合、合計 30 時間のメイクスパンを考えると、大きな仕事が始まる 10 時間後にすべての小さな仕事が完了しても問題ありません。メークスパンを 20 時間に短縮したいという欲求はありません。
- 「キュー内の平均時間」には議論の余地があります。ジョブが開始されるまで、または終了するまで、ジョブがキューにある時間を気にしますか? 合計期間が一定の場合、これは、小さなジョブを最初または最後に先入れ先出しするだけで実行できます (もちろん優先度は考慮します)。
- ジョブ間に依存関係はありません。
これらの条件がすべて満たされている場合、OptaPlanner は、正しく記述された貪欲なアルゴリズム (最小/最大の優先順位が最も高いジョブを最初にスケジュールする) よりも優れた処理を行うことはできません。これらの条件のいずれかが満たされない場合 (たとえば、より高速な新しいサーバーを 10 台購入するなど)、OptaPlanner の方がうまくいく可能性があります。それを理解するために 1 スレッドを費やす価値があるかどうかを評価するだけです。
OptaPlanner を使用する場合は、リアルタイム スケジューリングとデーモン モードを確認して、新しいレポートがシステムに入力されるたびに再計画してください。