私にはそれぞれ試験を受けN
なければならない人がいます。T
各試験には「ある程度の」時間がかかります (例: 30 分) (早期に終了することはありません)。試験は、試験官の前で実施する必要があります。
私は各人が全体の時間内に試験官の前で各試験を受けるようにスケジュールする必要がありますが、昼休みを避け、最小数の試験官を最小限の時間使用します (つまり、アイドル状態の試験官がいない/最小)。
次の制限があります。
- 人は一度に 2 つの場所にいることはできません
- 1 人 1 人が各試験を 1 回受ける必要があります
- 誰も同じ検査官によって二度検査されるべきではない
最適なソリューションはおそらく NP-Complete であり、遺伝的アルゴリズムを使用して最良の推定値を取得するのがおそらく最善であることを認識しています (これに似ていますか?座席計画ソフトウェアの推奨事項 (そのような獣は存在しますか?) )。
私は遺伝的アルゴリズムの仕組みに満足しています.私が苦労しているのは、パラメーターを遺伝的に操作できるようにプログラムで問題をモデル化する方法です..
各試験に同じ時間がかかった場合、時間をこれらの長さに分割し、時間枠と試験官のマトリックスを作成して、受験者をドロップします。ただし、各試験の時間は必ずしも同じ、私はこれにアプローチする方法について少し迷っています。
現在これをやっています:
- すべての受験者と試験の間で、実施する必要があるすべての「テスト」のリストを作成します
- テストがあるのと同じ数の試験官から始める
- すべての試験官を繰り返しループします。それぞれの試験官について: (制限に基づいて) 試験官に適格な予定外の試験を見つけます。
- スケジュール可能なすべてのテストが終了するまで続行します。
- 予定外のテストがある場合は、試験官の数を増やして、もう一度開始します。
現在はかなり粗雑に感じられるため、これにアプローチする方法についてより良い提案を探しています。