リーグスケジューリングアルゴリズムの特定に支援が必要


9

私はスポーツリーグのスケジューラを作成しようとしています。各スロットを効率的に埋めるのに役立つアルゴリズムを特定できません。

スケジュールを作成するためのサンプルデータは次のとおりです。

  1. 10チーム
  2. 各チームはお互いに1回プレイします(合計45試合必要)
  3. 各チームは1日に1回しかプレイしません
  4. テストでは、1日あたり5スロットで9日間使用しています。

コンボテーブル(45のコンボを含む)

ID
Team1ID
Team2ID ビット割り当て
済み

スケジュールテーブル(45のタイムスロットを含む)

scheduleID
homeTeamID
awayTeamID
GameDate
GameTime

現在、私の既存の手順は、スロットの約90%を占め、上記のルールに基づいて、スケジュールの競合のためにスロットの10%を空にします。

スケジュールテーブルを日付/時間の昇順でループします。
私の最初の時間帯は土曜日の午前8時です。
まだスケジュールされていないチームのリストを照会します。次に、それらのチームの可能な組み合わせの配列を作成します。次に、その配列を使用して、まだスケジュールされていない組み合わせから組み合わせテーブルから1つのランダムなレコードを取り出し、それらのチームをスケジュールに配置します。次に、その組み合わせを使用するように設定します。

ループを何度も繰り返し、使用可能なチームのリストが小さくなるたびに、結果として配列も小さくなります。

いくつかの日はうまく行き、他の日に私の最後の最後の2つの残りのチームは前の週にすでにプレーしたので、それらは再びスケジュールに追加されません。

まだ試していないのは、競合する日を「リセット」して、もう一度試し、より良い配置が得られるかどうかを確認することだけです。

誰か提案はありますか?


5
ラウンドロビントーナメントのスケジュール
ケビンクライン14

ケビンありがとう。あなたの右。今のところ、私のアレイは毎回同じ場所から始まり、ローテーションがないため、チームをペアリングするための整然とした流れがないようです。
スティーブ

1
私は完全にランダムなアプローチを使用しています。スロットと2つのチームをランダムに選択します。ルールが満たされている場合は、ゲームをスケジュールします。破棄しない場合は、再試行してください。合計試行回数に制限を設定し、制限に達した場合は、スケジュール全体を破棄してやり直します。実際には、これは非常にうまく機能します。
Cerad 2014

結局、ラウンドロビンアプローチに従いました。DBに接続するためのスクリプトの作成は95%完了しましたが、テストでは、スムーズでバランスの取れた状態で実行されているようです。私は自分の日々を「ラウンド」のように扱い、彼らはバランスの取れた状態を保っています。私は自分のラウンドを任意の順序でプレイし、各ラウンドのゲームを任意の順序で配置できますが、ゲームをあるラウンドから別のラウンドに移動すると、最終的にルールが破られます。
スティーブは'12

回答:


5

これが私が自分で発明したアルゴリズムです。私はそれがすでに存在するのか、実際にラウンドロビン実装であるのかわかりません:

1 4    1 5   1 6   1 3   1 2
2 5    4 6   5 3   6 2   3 4
3 6    2 3   4 2   5 4   6 5

基本的にあなたは

回転写真

常に1を同じ位置に保ち、残りを回転させます。

そうすれば、常にユニークな試合のスケジュールを取得できます。これは非常に簡単に実装でき、任意の数の対戦相手でも、均等または均等にスケーリングできます。対戦相手の数が不均一な場合は、チームを1の位置に配置しないでください。彼らはフリーラウンドになります。


2
ホームとアウェイのバランスをどのように管理しますか?
Eric Cope、2015年

これは実際には機能しません。この単純なローテーションアルゴリズムでは、2スロット離れている(2 / 4、3 / 5)ローテーションチームはプレーしません。
mdryden

@mdryden動作します。よく確認してコメントを削除してください。
Pieter B

@PieterBうまくいくと思っていましたが、チームの数が奇数の場合、実際にはうまくいきません。隣同士のチーム(4と5など)は、お互いにプレーすることはないからです。ぶら下がりチーム(さようなら)があるので、1で最後に、もう一方の端でもかなり簡単に確認できます。これも奇数を処理する良い応答です:stackoverflow.com/a/6649732/ 6489306
ragingasiancoder

@ragingasiancoderチームが奇数の場合は、ダミーチームを追加します。あなたがリンクした答えは、私が提示したのとまったく同じソリューションを説明しています。
Pieter B

1

逆にやっていると思います。スケジュールテーブルではなく、すべてのゲームの組み合わせ(45ゲーム)のテーブル/配列/何からでも始めます。そこから、チームが1日1回だけプレイすることに基づいて、ゲームを1日に割り当てるのは簡単なプロセスです。また、マッチアップは1回しか発生しないため(チームAはチームBを1回しかプレイしません)、マッチアップが発生していないことを確認するだけでよいので、スケジュールは簡単です(エントリはそのように「一意」です)。


1

以下の10チームシングルラウンドロビンスケジュールを生成しました。約3分かかりました。

スケジュール情報:

10チーム-1ラウンドロビン(最初の6週間のみが表示されます)
シーズン開始日1/6 /15-終了日3/5/15
火曜日に2ゲーム、毎週木曜日に3ゲーム、毎週5ゲームスキップ日なし

  • すべてのチームは、5つのタイムスロットで均等にプレーするように分配されます。
  • すべては9つのゲームをします。
  • すべてが1度互いにプレイします。
  • すべてがホームとビジターとして均等に配布されます(5/4または4/5)。注:ラウンドロビン2の最後に、すべてのチームが18ゲーム(ホームとして9、ビジターとして9)をプレイし、すべてのチームに2つのバイがあります。
  • すべてが毎週5つのタイムスロットで均等にプレイできるように配布されます。

旧式のハネウェルのメインフレームコンピューターを使用して、わずか3年弱でこのすべてをまとめました。スケジューリングソフトウェアがデバッグされると、メインフレームコンピューターが何百万もの置換と組み合わせを検索して、探していた4〜22チームのバランスの取れたパターンを計算および作成するのに何時間もかかりました。

10 Team Division Schedule   DATE 12/20/14

DATE   DAY TIME    LOCATION  GM  HOME vs VISITOR

Jan  6 Tue 6:00pm  Field #1   1  # 1 vs #10 
Jan  6 Tue 6:00pm  Field #2   1  # 2 vs # 9 
Jan  8 Thu 6:30pm  Field #3   1  # 3 vs # 8 
Jan  8 Thu 6:30pm  Field #4   1  # 4 vs # 7 
Jan  8 Thu 6:30pm  Field #5   1  # 5 vs # 6

Jan 13 Tue 6:00pm  Field #1   2  # 6 vs # 3 
Jan 13 Tue 6:00pm  Field #2   2  #10 vs # 8 
Jan 15 Thu 6:30pm  Field #3   2  # 7 vs # 2 
Jan 15 Thu 6:30pm  Field #4   2  # 9 vs # 1 
Jan 15 Thu 6:30pm  Field #5   2  # 4 vs # 5

Jan 20 Tue 6:00pm  Field #1   3  # 7 vs # 9 
Jan 20 Tue 6:00pm  Field #2   3  # 5 vs # 2 
Jan 22 Thu 6:30pm  Field #3   3  # 6 vs #10 
Jan 22 Thu 6:30pm  Field #4   3  # 3 vs # 4 
Jan 22 Thu 6:30pm  Field #5   3  # 8 vs # 1

Jan 27 Tue 6:00pm  Field #1   4  # 9 vs # 5 
Jan 27 Tue 6:00pm  Field #2   4  # 1 vs # 7 
Jan 29 Thu 6:30pm  Field #3   4  # 2 vs # 3 
Jan 29 Thu 6:30pm  Field #4   4  # 8 vs # 6 
Jan 29 Thu 6:30pm  Field #5   4  #10 vs # 4

Feb  3 Tue 6:00pm  Field #1   5  # 4 vs # 8 
Feb  3 Tue 6:00pm  Field #2   5  # 7 vs # 5 
Feb  5 Thu 6:30pm  Field #3   5  # 1 vs # 6 
Feb  5 Thu 6:30pm  Field #4   5  #10 vs # 2 
Feb  5 Thu 6:30pm  Field #5   5  # 3 vs # 9

Feb 10 Tue 6:00pm  Field #1   6  # 3 vs # 7 
Feb 10 Tue 6:00pm  Field #2   6  # 6 vs # 4 
Feb 12 Thu 6:30pm  Field #3   6  # 5 vs # 1 
Feb 12 Thu 6:30pm  Field #4   6  # 9 vs #10 
Feb 12 Thu 6:30pm  Field #5   6  # 8 vs # 2 

数百または数千の異なるタイプのリーグ、スポーツ、および潜在的な状況に関連する全体的なスケジューリング問題を解決するアルゴリズムはありません。この問題を解決するために行ったのは、スケジュールを計算するために別のアプローチを取ることでした。それは、適切なラウンドロビンチームのペア(マッチアップ)を決定するための非常に複雑な数学から始まりますが、それはほんの始まりにすぎません。公開して配布できる有用でバランスの取れたスケジュールを作成するには、他の要素が必要です。プレーヤー、コーチ、保護者などは、誰がプレーしているのかを知るだけなく、しかし、彼らが遊んでいるところ彼らが遊んでいる時間 ; 彼らが家や訪問者である場合 ; 多くのリーグでは、ゲーム番号

これがあなたや他の人が私たちが理解するのに3年かかった理由を理解するのに役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.