私は以前働いていたプールのスケジューリングの問題を解決しようとしばらく試みてきました。この問題は次のように...
プールで働く監視員は X 人いて、それぞれが働きたい特定の時間数を持っています。私たちは、各ライフガードが希望する時間数から平均時間をできるだけ短くし、すべての人にできるだけ公平に保つことを望んでいます. 各ライフガードも大学生であるため、対応可能なスケジュールが異なります。
毎週、プールのイベント スケジュールは前回とは異なるため、毎週新しいスケジュールを作成する必要があります。
毎日、特定の時間間隔で非常に多くの監視員が必要になります (例: 午前 8 時から午前 10 時までは警備員 3 名、午前 10 時から午後 3 時までは警備員 4 名、午後 3 時から午後 10 時までは警備員 2 名)。ここが難しい部分です。ライフガードのそれぞれを配置するための明確に定義されたシフト (スロット) はありません (ライフガードの可用性に加えて、毎週プールのスケジュールが変更される場合、スケジュールを作成できない可能性があるため)イベントの)。
したがって、スケジュールは、提供された白紙の状態から作成する必要があります...
- ライフガードとその情報 (希望時間数、空き状況)
- プールのイベントのスケジュールと、常時勤務が必要な警備員の数
この問題は、「必要な数の警備員を毎日常にカバーする可能なスケジュールを作成し、スケジューリングにおいてすべてのライフガードに対して可能な限り公平にする」と明確に定義できるようになりました。
曜日ごとに必要な数の警備員を常にカバーする可能なスケジュールを作成することは、必要であり、完全に解決されなければならない問題の一部です。すべてのライフガードに対して可能な限り公平であることに関する後半は、問題を大幅に複雑にし、概算アプローチが必要になると私に信じ込ませます。公平を期すために、可能なスケジュールのみがばかげている場合があります。
編集:私が見つけた最も一般的に提案されているアルゴリズムの1つは「病院/居住者の問題」ですが、労働者を配置するための明確に定義されたスロットがないため、これが適用されるとは思いません.