

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 自訂比對演算法
<a name="match-rulesets-components-algorithm"></a>

FlexMatch 最佳化大多數遊戲的預設演算法，讓玩家以最短的等待時間進入可接受的配對。您可以自訂演算法並調整遊戲的配對。

以下是預設FlexMatch配對演算法：

1. FlexMatch 會將所有開啟的配對票證和回填票證放入票證集區。

1. FlexMatch 會將集區中的票證隨機分組為一或多個批次。隨著票證集區變大， 會FlexMatch形成額外的批次，以維持最佳的批次大小。

1. FlexMatch 會根據年齡在每個批次中排序票證。

1. FlexMatch 根據每個批次最舊的票證來建置相符項目。

若要自訂比對演算法，請將 `algorithm`元件新增至規則集結構描述。如需完整的參考資訊，[FlexMatch 規則集結構描述](match-ruleset-schema.md)請參閱 。

使用以下選用的自訂來影響配對程序的不同階段。
+ [新增批次前排序](#match-rulesets-components-algorithm-presort)
+ [根據 batchDistance 屬性形成批次 ](https://docs.aws.amazon.com//gameliftservers/latest/flexmatchguide/match-rules-reference-ruletype.html#match-rules-reference-ruletype-batchdistance)
+ [排定回填票證的優先順序](#match-rulesets-components-algorithm-backfill)
+ [偏好具有擴展的舊票證](#match-rulesets-components-algorithm-expansion)

## 新增批次前排序
<a name="match-rulesets-components-algorithm-presort"></a>

您可以在形成批次之前排序票證集區。這種類型的自訂對具有大型票證集區的遊戲最有效。批次前排序有助於加速配對程序，並提高玩家在定義特性中的一致性。

使用演算法屬性 定義批次前排序方法`batchingPreference`。預設設定為 `random`。

自訂批次前排序的選項包括：
+ **依玩家屬性排序。**提供玩家屬性清單，以預先排序票證集區。

  若要依玩家屬性排序，請將 `batchingPreference`設定為 `sorted`，並在 中定義玩家屬性清單`sortByAttributes`。若要使用 屬性，請先在規則集的 `playerAttributes`元件中宣告 屬性。

  在下列範例中， 會根據玩家偏好的遊戲地圖來FlexMatch排序票證集區，然後依玩家技能來排序。產生的批次更有可能包含想要使用相同映射的類似熟練玩家。

  ```
  "algorithm": {
      "batchingPreference": "sorted",
      "sortByAttributes": ["map", "player_skill"],
      "strategy": "exhaustiveSearch"
  },
  ```
+ **依延遲排序。**建立具有最低可用延遲的相符項目，或快速建立具有可接受延遲的相符項目。此自訂適用於規則集形成超過 40 名玩家的大型配對。

  將演算法屬性`strategy`設定為 `balanced`。平衡策略會限制規則陳述式的可用類型。如需詳細資訊，請參閱[設計FlexMatch大型相符規則集](match-design-rulesets-large.md)。

  FlexMatch 根據玩家報告的延遲資料，以下列其中一種方式排序票證：
  + *最低延遲位置。*票證集區會依玩家報告其最低延遲值的位置預先排序。FlexMatch然後， 會將相同位置中低延遲的票證批次處理，進而提供更佳的遊戲體驗。它也會減少每個批次中的票證數量，因此配對可能需要更長的時間。若要使用此自訂，請將 `batchingPreference`設定為 `fastestRegion`，如下列範例所示。

    ```
    "algorithm": {
        "batchingPreference": "fastestRegion",
        "strategy": "balanced"
    },
    ```
  + *可接受的延遲會快速相符。*票證集區會依玩家回報可接受延遲值的位置預先排序。這會形成包含更多票證的較少批次。隨著每個批次中有更多票證，尋找可接受的相符項目更快。若要使用此自訂，請將 屬性設定為 `batchingPreference`` largestPopulation`，如下列範例所示。

    ```
    "algorithm": {
        "batchingPreference": "largestPopulation",
        "strategy": "balanced"
    },
    ```
**注意**  
平衡策略的預設值為 `largestPopulation`。

## 排定回填票證的優先順序
<a name="match-rulesets-components-algorithm-backfill"></a>

如果您的遊戲實作自動回填或手動回填，您可以根據請求類型自訂FlexMatch處理配對票證的方式。請求類型可以是新的比對或回填請求。根據預設， 會將這兩種類型的請求FlexMatch視為相同。

回填優先順序會影響 FlexMatch如何處理批次處理票證。回填優先順序需要規則集才能使用詳盡的搜尋策略。

FlexMatch 不符合多個回填票證。

若要變更回填票證的優先順序，請設定 屬性 `backfillPriority`。
+ **先比對回填票證。**在建立新的相符項目之前，此選項會嘗試比對回填票證。這表示傳入玩家加入現有遊戲的機率較高。

  如果您的遊戲使用自動回填，最好使用此項目。自動回填通常用於具有短遊戲工作階段和高玩家周轉率的遊戲。自動回填有助於這些遊戲形成最少的可行配對，並使其開始，同時FlexMatch搜尋更多玩家來填滿開放的插槽。

  將 `backfillPriority` 設定為 `high`。

  ```
  "algorithm": {
      "backfillPriority": "high",
      "strategy": "exhaustiveSearch"
  },
  ```
+ **最後比對回填票證。**此選項會忽略回填票證，直到評估所有其他票證為止。這表示當傳入玩家無法將其配對至新遊戲時， 會將他們FlexMatch回填至現有遊戲。

  當您想要使用回填做為最後機會選項，讓玩家進入遊戲時，例如沒有足夠的玩家來組成新的配對時，此選項非常有用。

  將 `backfillPriority` 設定為 `low`。

  ```
  "algorithm": {
      "backfillPriority": "low",
      "strategy": "exhaustiveSearch"
  },
  ```

## 偏好具有擴展的舊票證
<a name="match-rulesets-components-algorithm-expansion"></a>

當配對難以完成時，擴展規則會放寬配對條件。當部分完成配對中的票證達到特定年齡時， 會Amazon GameLift Servers套用擴展規則。票證的建立時間戳記會決定何時Amazon GameLift Servers套用規則；根據預設， 會FlexMatch追蹤最近相符票證的時間戳記。

若要在 FlexMatch 套用擴展規則時變更 ，請設定 屬性`expansionAgeSelection`，如下所示：
+ **根據最新的票證展開。**此選項會根據新增至潛在配對的最新票證套用擴展規則。每次FlexMatch符合新的票證時，就會重設時鐘。使用此選項時，產生的配對品質通常較高，但需要更長的時間才能配對；如果配對請求花費太長的時間才能配對，則配對請求可能會在完成之前逾時。`expansionAgeSelection` 設定為 `newest`。`newest`預設為 。
+ **根據最舊的票證展開。**此選項會根據潛在配對中最舊的票證套用擴展規則。使用此選項時， 會更快速地FlexMatch套用擴展，從而改善最早配對玩家的等待時間，但會降低所有玩家的配對品質。將 `expansionAgeSelection` 設定為 `oldest`。

```
"algorithm": {
    "expansionAgeSelection": "oldest",
    "strategy": "exhaustiveSearch"
},
```