マッチアルゴリズムのカスタマイズ
FlexMatch は、ほとんどのゲームに対してデフォルトのアルゴリズムを最適化し、プレイヤーを最小限の待機時間で許容可能なマッチに入れます。ゲームのアルゴリズムをカスタマイズし、マッチメーキングを調整できます。
以下はデフォルトの FlexMatch マッチメーキングアルゴリズムです。
-
FlexMatch は、オープンマッチメーキングチケットとバックフィルチケットはすべてチケットプールに配置します。
-
FlexMatch は、プール内のチケットを 1 つ以上のバッチにランダムにグループ化します。チケットプールが大きくなると、FlexMatch は最適なバッチサイズを維持するために追加のバッチを作成します。
-
FlexMatch は、各バッチ内のチケットを経過時間別にソートします。
-
FlexMatch は、各バッチの最も古いチケットに基づいてマッチを作成します。
対戦アルゴリズムをカスタマイズするには、ルールセットスキーマに algorithm コンポーネントを追加します。詳細については、FlexMatch ルールセットスキーマ コマンドのリファレンスを参照してください。
次のオプションのカスタマイズは、マッチメーキングプロセスのさまざまな段階に影響します。
事前バッチソートの追加
バッチを作成する前にチケットプールをソートします。このタイプのカスタマイズは、大規模なチケットプールを持つゲームで最も効果的です。事前バッチソートは、マッチメーキングプロセスをスピードアップし、定義された特性においてプレイヤーの均一性を高めるのに役立ちます。
バッチ前のソート方法は、アルゴリズムプロパティbatchingPreference で定義します。デフォルトの設定は random です。
事前バッチソートのカスタマイズには、次のオプションが含まれます。
-
プレイヤーの属性でソート。チケットプールを事前ソートするプレイヤー属性のリストを提供します。
プレイヤー属性でソートするには、
batchingPreferenceをsortedに設定し、sortByAttributesでプレイヤー属性のリストを定義します。属性を使用するには、最初にルールセットのplayerAttributesコンポーネント内で属性を宣言します。次の例では、FlexMatch はプレイヤーの優先ゲームマップに基づいてチケットプールをソートし、次にプレイヤーのスキル別にソートします。結果のバッチには、同じマップを使用したい類似のスキルのプレイヤーが含まれる可能性が高くなります。
"algorithm": { "batchingPreference": "sorted", "sortByAttributes": ["map", "player_skill"], "strategy": "exhaustiveSearch" }, -
レイテンシーでソート。可能な限りのレイテンシーでマッチを作成するか、許容できるレイテンシーでマッチを迅速に作成します。このカスタマイズは、40 人以上のプレイヤーが参加する大規模なマッチを形成するルールセットに役立ちます。
アルゴリズムプロパティ
strategyをbalancedに設定します。バランス戦略では、使用できるルールステートメントのタイプが制限されます。詳細については、「FlexMatch の大規模マッチングルールセットを設計する」を参照してください。FlexMatch は、次のいずれかの方法で、プレイヤーから報告されたレイテンシーデータに基づいてチケットをソートします。
-
レイテンシーが最も低い場所。チケットプールは、プレイヤーがレイテンシーの最小値を報告するロケーションによって事前にソートされています。 FlexMatch は、同じロケーションでレイテンシーの低いチケットをバッチ処理するため、ゲームプレイエクスペリエンスが向上します。また、各バッチのチケット数を減らすため、マッチメーキングに時間がかかることがあります。このカスタマイズを使用するには、次の例のように
batchingPreferenceをfastestRegionに設定します。"algorithm": { "batchingPreference": "fastestRegion", "strategy": "balanced" }, -
許容可能なレイテンシーをすぐにマッチングする。チケットプールは、プレーヤーが許容可能なレイテンシー値を報告するロケーション別に事前にソートされています。これにより、より多くのチケットを含むバッチの数が減ります。各バッチでより多くのチケットがあると、許容可能なマッチを見つけるのが迅速になります。このカスタマイズを使用するには、次の例のようにプロパティ
batchingPreferenceをlargestPopulationに設定します。"algorithm": { "batchingPreference": "largestPopulation", "strategy": "balanced" },
注記
バランス戦略のデフォルト値は、
largestPopulationです。 -
バックフィルチケットの優先順位付け
ゲームが自動バックフィルまたは手動バックフィルを実行している場合、FlexMatch はリクエストタイプに基づいてマッチメーキングチケットを処理する方法をカスタマイズできます。リクエストタイプは、新しいマッチリクエストでもバックフィルリクエストでもかまいません。デフォルトでは、FlexMatch はどちらのタイプのリクエストも同様に扱います。
バックフィルの優先順位付けは、FlexMatch がチケットをバッチ処理した後の処理方法に影響します。バックフィルの優先順位付けは、網羅的な検索戦略を使用するルールセットを必要とします。
FlexMatch は複数のバックフィルチケットをまとめてマッチングしません。
バックフィルチケットの優先順位を変更するには、プロパティ backfillPriority を設定します。
-
バックフィルチケットを最初にマッチします。このオプションは、新しいマッチを作成する前に、バックフィルチケットのマッチングを試みます。つまり、参加するプレイヤーは、既存のゲームにスロットされる可能性が高くなります。
ゲームで自動バックフィルを使用している場合は、これを使用するのが最適です。自動バックフィルは、ゲームセッション時間が短く、プレーヤーのターンアラウンドが高いゲームでよく使用されます。自動バックフィルは、FlexMatch がオープンスロットを埋めるためにより多くのプレイヤーを検索しても、これらのゲームが最小限の実行可能な試合を形成して開始するのに役立ちます。
backfillPriorityをhighに設定します。"algorithm": { "backfillPriority": "high", "strategy": "exhaustiveSearch" }, -
バックフィルチケットを最後にマッチングする。このオプションでは、他のすべてのチケットが評価されるまで、バックフィルチケットは無視されます。つまり、FlexMatch は参加するプレイヤーを新しいゲームにマッチングできない場合にのみ、既存のゲームにバックフィルします。
このオプションは、バックフィルを、新しい試合を形成できるプレーヤーが十分ではない場合などに、プレイヤーがゲームに参加できる最後のチャンスのオプションとして使用する場合に便利です。
backfillPriorityをlowに設定します。"algorithm": { "backfillPriority": "low", "strategy": "exhaustiveSearch" },
拡張時に古いチケットを優先
拡張ルールは、マッチングの完了が難しい場合にマッチング基準を緩和します。 は、部分的に完了したマッチングのチケットが特定の期間に達したときに拡張ルール Amazon GameLift Servers を適用します。チケットの作成タイムスタンプによって、Amazon GameLift Servers が適用されるタイミングが決まります。デフォルトでは、FlexMatch は最後に対戦したチケットのタイムスタンプを追跡します。
FlexMatch が拡張ルールを適用するタイミングを変更するには、プロパティ expansionAgeSelection を以下のように設定します。
-
最新のチケットに基づいて拡張します。このオプションは、潜在的な対戦に追加された最新のチケットに基づいて拡張ルールを適用します。FlexMatch が新しいチケットをマッチングするたびに、タイムクロックがリセットされます。このオプションを使うと、マッチの質が高くなる傾向がありますが、マッチングに時間がかかる傾向があります。マッチングに時間がかかりすぎると、完了する前にマッチリクエストがタイムアウトする場合があります。
expansionAgeSelectionをnewestに設定します。newestはデフォルトです。 -
最も古いチケットに基づいて拡張する。このオプションは、マッチ候補の最も古いチケットに基づいて拡張ルールを適用します。このオプションを使用すると、FlexMatch は拡張をより速く適用するため、最も早くマッチングしたプレイヤーの待ち時間が改善されるますが、すべてのプレイヤーのマッチ品質が低下します。
expansionAgeSelectionをoldestに設定します。
"algorithm": { "expansionAgeSelection": "oldest", "strategy": "exhaustiveSearch" },