マッチ形成の概要
チケットをキューに送信すると、マッチメイキング サービスはそのチケットを他の待機中のチケットと並べて配置します。サービスは、互換性のあるチケットをマッチにグルーピングしようとする マッチ ループ を継続的に実行します。各ステップでは次のことが行われます。- 有効期限切れのチケットが削除されます。
GiveUpAfterSecondsタイムアウトを超えたチケットはキャンセルされます。 - チケットが待機時間順にソートされます: 最も長く待機しているチケットが、潜在的なマッチの シード (開始ポイント) になります。
- 候補が互換性でランク付けされます: 残りの各チケットは、キューのルールに従って、シード チケットとの属性の一致度に基づいて 距離スコア を受け取ります。
- 貪欲にグループが構築されます: 最も近い候補から始めて、
MaxMatchSizeまで一度に 1 つずつチケットがグループに追加されます。 - 各追加が検証されます: チケットが追加されると、すべてのルールが、その候補がこれまでのグループとまだ互換性があるかを確認します。いずれかのルールで拒否された場合、候補はスキップされます。
- 完全なグループが検証されます: グループが少なくとも
MinMatchSizeに達すると、最終検証パスでグループがすべてのルールを満たしているかを確認します。合格すれば、マッチが作成されます。 - バックトラック: 有効なグループが形成できない場合、サービスは最後に追加したチケットを削除し、次の候補を試します。このプロセスは、現在のシードを諦める前に代替のグルーピングを探索します。
アルゴリズムは、最も長く待機しているチケットを優先します。この優先順位により、最も長く待機しているプレイヤーが最初にマッチを受け取ることが保証されます。
ルールがマッチングに与える影響
ルールはマッチ形成中に フィルタリング と ソート の 2 つの目的を果たします。フィルタリング
ルールはチケットがグループに参加するのをブロックできます。たとえば、ゲーム ビルド バージョンに対するStringEqualityRule は、ビルドがグループのビルドと一致しないチケットを拒否します。マッチメイキング サービスは、候補を検討するたびにフィルタリングを確認します。開始時の 1 回限りのチェックではありません。
ソート (距離)
ルールは、どの候補が最初に試されるかを決定する 距離スコア にも貢献します。距離が小さいほど互換性が高くなります。- 同一の属性値を持つチケットは、通常、距離 0 をスコアします。
- ルールの許容範囲の端にあるチケットは、距離 1 付近をスコアします。
- 許容範囲外のチケットはフィルタリングで除外されます (実質的に無限の距離)。
検証
一部の制約は、完全なグループが形成された後にのみ確認できます。たとえば、チーム バランス ルール (TeamDifferenceRule、TeamSizeBalanceRule) は、チームがバランスされているかを評価するために、完全なグループを見る必要があります。これらのルールは最終検証ステップとして実行されます。
拡張と緩和
チケットが待機すると、ルールは検索範囲を広げるために制約を 緩和 します。このプロセスを制御する 2 つのメカニズムがあります。- 拡張: ルールは時間とともにしきい値を徐々に調整します。たとえば、スキルしきい値 0.2 の
DifferenceRuleは 5 秒ごとに 0.1 ずつ拡張し、最終的に 0.5 の差を許可することがあります。 - Seconds until optional: 構成された時間が経過すると、ルールはフィルタリングを完全に停止します。ルールは依然としてソート (距離) には貢献しますが、マッチをブロックしなくなります。
緩和はマッチの品質を無視することを意味しません。ルールが任意になった場合でも、ソート ステップに距離を貢献します。ルールを満たす候補は、満たさない候補よりも先に試されます。
スケーリングとパーティショニング
キューが大量のチケットを受け取ると、サービスは独立して評価するグループにチケットを パーティショニング します。パーティショニングは、母集団を自然に分割するルール属性を使用します。たとえば、ゲーム モードに対するStringEqualityRule は、クリーンなパーティション境界を作成します。
負荷が減少すると、パーティションはマージされて戻ります。このプロセスは、サービスにより大きな候補プールを提供し、マッチの品質を向上させます。
スケーリングに適したキューの設計の詳細については、マッチメイキングのスケーリング を参照してください。
