今回のチュートリアルで用いる題材

このチュートリアルでは、ジョブショップスケジューリング問題を題材として使用します。この問題は、複数の機械で複数のジョブを処理する際に、全体の処理時間を最小化するという実用的な最適化問題です。

ジョブショップスケジューリング問題とは

ジョブショップスケジューリング問題は、複数の機械が並列に動作する環境で、複数のジョブ(作業)を各機械にどのように割り当てるかを決定する問題です。各ジョブは特定の処理時間を持ち、目標はすべてのジョブを完了するまでの総時間(メイクスパン)を最小化することです。

この問題は、工場の生産計画、コンピュータシステムのタスクスケジューリング、プロジェクト管理など、様々な実世界のシナリオに適用できます。

問題の主な特徴

目的関数 制約条件 決定変数
メイクスパン(全てのジョブが完了するまでの時間)の最小化
  • 各ジョブは1台の機械にのみ割り当てる
  • 各機械の合計処理時間はメイクスパン以下
  • どのジョブをどの機械に割り当てるか(バイナリ変数)
  • メイクスパン
デモを触ってみよう

ジョブショップスケジューリング問題 デモ

操作方法

10個のジョブを3台の機械に割り当て、メイクスパン(最大完了時間)を最小化しましょう。ジョブをドラッグして下のマシンエリアにドロップしてください。

未割り当てジョブ

ジョブ0 (5 時間)
ジョブ1 (8 時間)
ジョブ2 (3 時間)
ジョブ3 (6 時間)
ジョブ4 (9 時間)
ジョブ5 (4 時間)
ジョブ6 (7 時間)
ジョブ7 (5 時間)
ジョブ8 (2 時間)
ジョブ9 (8 時間)

マシン 1

負荷: 0 時間

マシン 2

負荷: 0 時間

マシン 3

負荷: 0 時間

現在のメイクスパン (最大負荷): 0 時間

次のセクションでは、この並列ジョブショップスケジューリング問題をJijModeling、OMMX、MINTOを使って実際に実装・解決する方法を学びます。