マッチメイキングの仕組み

この記事では、PlayFab マッチメイキングがチケットを評価し、ルールを適用し、マッチを形成する方法を学びます。 マッチング プロセスを理解すると、高品質なマッチを効率的に生成するキュー構成を設計できます。

マッチ形成の概要

チケットをキューに送信すると、マッチメイキング サービスはそれを他の待機中のチケットと並べて配置します。 サービスは、互換性のあるチケットをグループ化してマッチを作成しようとする マッチ ループ を継続的に実行します。 各ステップで行われる処理は次のとおりです。

  1. 期限切れのチケットは削除されます。 GiveUpAfterSeconds タイムアウトを超えたチケットはキャンセルされます。
  2. チケットは待機時間で並べ替えられます。 最も長く待っているチケットが シード、または開始点になり、マッチの可能性があります。
  3. 候補は互換性の高さでランク付けされます。 残りの各チケットは、キューのルールに基づき、シード チケットとの属性の具合に応じて 距離スコア を受け取ります。
  4. グループは貪欲法で構築されます。 最も近い候補から順に、チケットが 1 つずつグループに追加され、最大 MaxMatchSize まで拡大します。
  5. 各追加は検証されます。 チケットが追加されるたびに、すべてのルールによって候補がそれまでグループと互換性があるかどうかを確認されます。 いずれかのルールで拒否された場合、候補はスキップされます。
  6. 完成したグループは検証されます。 グループが少なくとも MinMatchSize に達すると、最終的な検証パスによって、グループがすべてのルールを満たしていることを確認します。 合格すると、マッチが作成されます。
  7. バックトラッキング。 有効なグループが形成できない場合、サービスは最後に追加したチケットを除外し、次の候補を試します。 このプロセスは、現在のシードをあきらめる前に代替のグループ構成を探索します。

サービスは次に長く待っているチケットを新しいシードとして選び、同じプロセスを繰り返します。

注意

このアルゴリズムは、最も長く待っているチケットを優先します。 この優先順位により、最も長く待ったプレイヤーが最初にマッチを受け取れます。

ルールがマッチングに与える影響

ルールにはマッチ形成時に フィルタリング並べ替え の 2 つの役割があります。

フィルタリング

ルールはチケットがグループに参加するのをブロックできます。 たとえば、ゲーム ビルド バージョンの StringEqualityRule は、グループのビルドと一致しないチケットを拒否します。 マッチメイキング サービスは、候補を検討するたびにフィルタリングをチェックします。 これは開始時の一度きりのチェックではありません。

並べ替え (距離)

ルールには、候補の優先順位を決める 距離スコア があります。 距離が短いほど互換性が高いことを意味します。

  • 属性値が完全に一致するチケットは、通常距離スコア 0 になります。
  • ルールの許容範囲の端にあるチケットは、距離スコアが 1 に近くなります。
  • 許容範囲外のチケットはフィルタリングされ (実質的に無限距離とみなされます)、除外されます。

キューに複数のルールがある場合、各ルールの距離スコアに 重み を掛けて合計します。 チケットは合計距離の低い順に試されるため、最も互換性の高い候補が優先されます。

ヒント

ルールの重みを使って、相対的な重要度を表します。 たとえば、スキルの類似性が地域の優先度より重要な場合は、スキル ルールに高い重みが設定されます。

検証

一部の制約は、完全なグループが形成された後でなければチェックできません。 たとえば、チーム バランス ルール (TeamDifferenceRuleTeamSizeBalanceRule) は、チームのバランスを評価するためにグループ全体を確認する必要があります。 これらのルールは、最終的な検証ステップとして実行されます。

拡張と緩和

チケットが待機すると、ルールは制約を 緩和 して検索範囲を広げます。 このプロセスは次の 2 つの仕組みで制御されます。

  • 拡張: ルールは時間経過に伴いしきい値を徐々に調整します。 たとえば、スキルのしきい値が 0.2 の DifferenceRule は、5 秒ごとに 0.1 ずつ拡張され、最終的には 0.5 の差が許容されます。
  • オプションまでの秒数: 設定時間経過後、ルールはフィルタリングを完全に停止します。 ルールは並べ替え (距離) には影響しますが、マッチのブロックはしません。

拡張は常に 時間ベース です。 これは、待機時間に応じてすべてのチケットに一律に適用されます。 長く待つチケットは自然に拡張段階が広がり、より多くの候補とマッチ可能になります。

注意

緩和はマッチ品質が無視されることを意味しません。 ルールが省略可能になっても、並べ替えの距離スコアには影響し続けます。 ルールを満たす候補は、満たさない候補より先に試されます。

拡張の構成の詳細については、「マッチメイキング キューの構成」を参照してください。

スケーリングとパーティション分割

キューが大量のチケットを受け取る場合、サービスはチケットを独立して評価するグループに 分割 します。 パーティション分割は、母集団を自然に分けるルール属性を使用します。 たとえば、ゲーム モードの StringEqualityRule は明確なパーティションの境界を作成します。

負荷が減るとパーティションは再び統合されます。 このプロセスにより、サービスはより大きな候補プールを持ち、マッチ品質が向上します。

スケーラブルなキュー設計の詳細は、「マッチメイキングのスケーリング」を参照してください。

非対称な優先設定の設計

一部のマッチメイキング シナリオでは、プレイヤー A はプレイヤー B とマッチしたいが、プレイヤー B はプレイヤー A とマッチしたくないという非対称な優先設定があります。クロスプレイ設定が最も一般的な例です。 推奨される構成パターンと具体例については、「非対称クロスプレイ設定の処理」を参照してください。

関連項目