この記事では、PlayFab マッチメイキングがチケットを評価し、ルールを適用し、マッチを形成する方法を学びます。 マッチング プロセスを理解すると、高品質なマッチを効率的に生成するキュー構成を設計できます。
マッチ形成の概要
チケットをキューに送信すると、マッチメイキング サービスはそれを他の待機中のチケットと並べて配置します。 サービスは、互換性のあるチケットをグループ化してマッチを作成しようとする マッチ ループ を継続的に実行します。 各ステップで行われる処理は次のとおりです。
- 期限切れのチケットは削除されます。
GiveUpAfterSecondsタイムアウトを超えたチケットはキャンセルされます。 - チケットは待機時間で並べ替えられます。 最も長く待っているチケットが シード、または開始点になり、マッチの可能性があります。
- 候補は互換性の高さでランク付けされます。 残りの各チケットは、キューのルールに基づき、シード チケットとの属性の具合に応じて 距離スコア を受け取ります。
-
グループは貪欲法で構築されます。 最も近い候補から順に、チケットが 1 つずつグループに追加され、最大
MaxMatchSizeまで拡大します。 - 各追加は検証されます。 チケットが追加されるたびに、すべてのルールによって候補がそれまでグループと互換性があるかどうかを確認されます。 いずれかのルールで拒否された場合、候補はスキップされます。
-
完成したグループは検証されます。 グループが少なくとも
MinMatchSizeに達すると、最終的な検証パスによって、グループがすべてのルールを満たしていることを確認します。 合格すると、マッチが作成されます。 - バックトラッキング。 有効なグループが形成できない場合、サービスは最後に追加したチケットを除外し、次の候補を試します。 このプロセスは、現在のシードをあきらめる前に代替のグループ構成を探索します。
サービスは次に長く待っているチケットを新しいシードとして選び、同じプロセスを繰り返します。
注意
このアルゴリズムは、最も長く待っているチケットを優先します。 この優先順位により、最も長く待ったプレイヤーが最初にマッチを受け取れます。
ルールがマッチングに与える影響
ルールにはマッチ形成時に フィルタリング と 並べ替え の 2 つの役割があります。
フィルタリング
ルールはチケットがグループに参加するのをブロックできます。 たとえば、ゲーム ビルド バージョンの StringEqualityRule は、グループのビルドと一致しないチケットを拒否します。 マッチメイキング サービスは、候補を検討するたびにフィルタリングをチェックします。 これは開始時の一度きりのチェックではありません。
並べ替え (距離)
ルールには、候補の優先順位を決める 距離スコア があります。 距離が短いほど互換性が高いことを意味します。
- 属性値が完全に一致するチケットは、通常距離スコア 0 になります。
- ルールの許容範囲の端にあるチケットは、距離スコアが 1 に近くなります。
- 許容範囲外のチケットはフィルタリングされ (実質的に無限距離とみなされます)、除外されます。
キューに複数のルールがある場合、各ルールの距離スコアに 重み を掛けて合計します。 チケットは合計距離の低い順に試されるため、最も互換性の高い候補が優先されます。
ヒント
ルールの重みを使って、相対的な重要度を表します。 たとえば、スキルの類似性が地域の優先度より重要な場合は、スキル ルールに高い重みが設定されます。
検証
一部の制約は、完全なグループが形成された後でなければチェックできません。 たとえば、チーム バランス ルール (TeamDifferenceRule、TeamSizeBalanceRule) は、チームのバランスを評価するためにグループ全体を確認する必要があります。 これらのルールは、最終的な検証ステップとして実行されます。
拡張と緩和
チケットが待機すると、ルールは制約を 緩和 して検索範囲を広げます。 このプロセスは次の 2 つの仕組みで制御されます。
-
拡張: ルールは時間経過に伴いしきい値を徐々に調整します。 たとえば、スキルのしきい値が 0.2 の
DifferenceRuleは、5 秒ごとに 0.1 ずつ拡張され、最終的には 0.5 の差が許容されます。 - オプションまでの秒数: 設定時間経過後、ルールはフィルタリングを完全に停止します。 ルールは並べ替え (距離) には影響しますが、マッチのブロックはしません。
拡張は常に 時間ベース です。 これは、待機時間に応じてすべてのチケットに一律に適用されます。 長く待つチケットは自然に拡張段階が広がり、より多くの候補とマッチ可能になります。
注意
緩和はマッチ品質が無視されることを意味しません。 ルールが省略可能になっても、並べ替えの距離スコアには影響し続けます。 ルールを満たす候補は、満たさない候補より先に試されます。
拡張の構成の詳細については、「マッチメイキング キューの構成」を参照してください。
スケーリングとパーティション分割
キューが大量のチケットを受け取る場合、サービスはチケットを独立して評価するグループに 分割 します。 パーティション分割は、母集団を自然に分けるルール属性を使用します。 たとえば、ゲーム モードの StringEqualityRule は明確なパーティションの境界を作成します。
負荷が減るとパーティションは再び統合されます。 このプロセスにより、サービスはより大きな候補プールを持ち、マッチ品質が向上します。
スケーラブルなキュー設計の詳細は、「マッチメイキングのスケーリング」を参照してください。
非対称な優先設定の設計
一部のマッチメイキング シナリオでは、プレイヤー A はプレイヤー B とマッチしたいが、プレイヤー B はプレイヤー A とマッチしたくないという非対称な優先設定があります。クロスプレイ設定が最も一般的な例です。 推奨される構成パターンと具体例については、「非対称クロスプレイ設定の処理」を参照してください。