私は Python でスイス トーナメント システムに取り組んでおり、最適なペアリング アルゴリズムを見つけようとしています。
私の最大の問題は、私が持ってきたすべてのアルゴリズムがいくつかのシーケンスでエラーを生成したことです。そこでは、選択される最後のペアがすでに互いにプレイされており、ペアリングが無効であると判断されています.
私が取り組んでいるスイスのシステムは単純です: プレイヤーでさえ、誰もが各ラウンドでプレイし、ペアリングは勝利の近さに基づいて行われます (つまり、強いプレーヤーは強いプレーヤーと対戦し、弱いプレーヤーは弱いプレーヤーと対戦します)。
No Bye、勝ち負けのみ(引き分けなし)、対戦相手は2回対戦できません。
私が行った現在のアルゴリズムは次のように機能します。
- ランキング順 (勝数の多い順) でプレイヤー リストを作成します。
- 勝利数の多いプレイヤーから順に選ぶ
- 最も近いランクのプレーヤーと彼を一致させます。彼らがすでにプレーしている場合は、一致が見つかるまで、彼を次の人と一致させます
- リストからペアを取り出して 1 に戻す
例:
2 ラウンド後のランキング:
1. P1: [P2 win, P3 win] 2 wins
2. P5: [P6 win, P2 win] 2 wins
3. P3: [P4 win, P1 lost] 1 win, 1 loss
4. P4: [P6 win, P3 lost] 1 win, 1 loss
5. P2: [P1 lost, P5 lost] 2 losses
6. P6: [P5 lost, P4 lost] 2 losses
最初のピックは P1 で、最初の試合は P5 です。リストから (P1,P5) を取り出します。
1. P3: [P4 win, P1 lost] 1 win, 1 loss
2. P4: [P6 win, P3 lost] 1 win, 1 loss
3. P2: [P1 lost, P5 lost] 2 losses
4. P6: [P5 lost, P4 lost] 2 losses
最初のピックは P3 で、すでに P4 でプレイされているため、試合は P2 になります。リストから (P3,P2) を取り出します。
このシーケンスでは、互いに対戦したペアで終了し、ペアリングは無効です。
1. P4: [P6 win, P3 lost] 1 win, 1 loss
2. P6: [P5 lost, P4 lost] 2 losses
質問: お互いにプレイした 2 人のプレイヤーで最後に「スタック」しないことを確認しながら、最適なペアリング モジュールを保証するアルゴリズムはありますか?