バックグラウンド
(アルゴリズムだけが気になる場合は、これをスキップしてください)
私が働いている大学では、私たちの学部で最大の問題の1つは教室のスケジュールです。説明のため、および問題の範囲をレイアウトするために、現在のスケジューリング方法は次のとおりです。
- 教授は、彼らが教えたいクラスのリストを、彼らが教えたいと思う時間枠とともに、優先度の高い順に(最も望ましいものから最も望まれないものへ)ランク付けしてくれます。
- 管理者は、私たちが割り当てることができる部屋のリストと、それらの部屋が私たちの部門で使用できる時間とともに提供します。
- 私たちは、さまざまな教授の好みを考慮に入れようとして(最初は)部屋に教授を割り当て始めます。
- 必然的に、対立が生じ、教授は変更を求め始め、計画は教授番号30あたりのどこかでバラバラになります。その時点で、基本的に私たちが収まるところならどこでも部屋を割り当て始め、しわくちゃの紙片はいたるところにあり、誰も幸せではありません。(なぜあなたのクラスが木曜日の午前9時30分であるのに、隔日で午後4時であるのか疑問に思ったことがあるなら、今あなたは知っています)
私は、ソフトウェアがこれをより最適に行うことができるかどうかを静かに調査するように求められました。
実際の質問
次の基準が満たされるように、リソースのセットを効率的にスケジュールするアルゴリズムはありますか?
- アルゴリズムは、2人の教授を同時に同じ部屋に割り当ててはなりません。
- すべての教授に部屋/時間が割り当てられるまで、タスクは完了しません。
- アルゴリズムは、利用可能なタイムスロットの量に対して教授が多すぎることを心配する必要はありません。(私たちはそれほど資金がありません。)
- 可能な限り、アルゴリズムは個々の教授のスケジュール設定を尊重する必要があります。
私はこれを最初に尋ねることはできないような気がします。これには効率的なアルゴリズムがありますか、それともブルートフォースでしかできないような問題ですか?