私はスポーツリーグのスケジューラを作成しようとしています。各スロットを効率的に埋めるのに役立つアルゴリズムを特定できません。
スケジュールを作成するためのサンプルデータは次のとおりです。
- 10チーム
- 各チームはお互いに1回プレイします(合計45試合必要)
- 各チームは1日に1回しかプレイしません
- テストでは、1日あたり5スロットで9日間使用しています。
コンボテーブル(45のコンボを含む)
ID
Team1ID
Team2ID ビット割り当て
済み
スケジュールテーブル(45のタイムスロットを含む)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
現在、私の既存の手順は、スロットの約90%を占め、上記のルールに基づいて、スケジュールの競合のためにスロットの10%を空にします。
スケジュールテーブルを日付/時間の昇順でループします。
私の最初の時間帯は土曜日の午前8時です。
まだスケジュールされていないチームのリストを照会します。次に、それらのチームの可能な組み合わせの配列を作成します。次に、その配列を使用して、まだスケジュールされていない組み合わせから組み合わせテーブルから1つのランダムなレコードを取り出し、それらのチームをスケジュールに配置します。次に、その組み合わせを使用するように設定します。
ループを何度も繰り返し、使用可能なチームのリストが小さくなるたびに、結果として配列も小さくなります。
いくつかの日はうまく行き、他の日に私の最後の最後の2つの残りのチームは前の週にすでにプレーしたので、それらは再びスケジュールに追加されません。
まだ試していないのは、競合する日を「リセット」して、もう一度試し、より良い配置が得られるかどうかを確認することだけです。
誰か提案はありますか?