> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 了解配對中的規則權數

> 了解 PlayFab 配對規則上的 Weight 屬性如何控制候選票證排名、比賽品質，以及配對期間票證的排序方式。

## 概觀

設定配對佇列時，您可以為每個規則指派 **Weight** 值。權數是一個數值乘數，控制配對系統在排名及排序符合資格的票證時，特定規則的影響力有多大。它不會改變票證是否通過規則，只會影響在判斷哪些票證是比賽的最佳候選時，**該規則相對於其他規則的重要性**。

了解權數對於調整比賽品質至關重要。藉由調整各規則的權數，您可以優先考量對遊戲最重要的事項，無論是技能平衡、地理鄰近性，還是共用內容。

## 權數的運作方式

每個支援權數的規則，都會為所評估的每一對票證計算**距離**值。此距離代表依據該規則，兩張票證的相似或差異程度：

* 距離為 **0** 表示這兩張票證在該規則上完全相符。
* 距離越接近 **1** 表示這兩張票證位於規則允許範圍的邊緣。
* 距離為**無限大** (硬性拒絕) 表示依據該規則，這兩張票證無法配對，與權數無關。

配對系統會使用下列公式，計算所有加權規則的**總距離**：

```
totalDistance = Σ (rule.Weight × rule.Distance)
```

總距離較低的票證會被視為較佳的候選，並在建立比賽時優先嘗試。權數是作用在每個規則對此總計之貢獻的純量乘數。

> [!NOTE]
>
> 權數**不會**覆寫硬性限制。如果規則判定兩張票證不相容，這些票證就會完全被排除。例如，差異規則中的值超過允許的最大差異時，就會發生這種情況。權數只會影響已符合資格之票證之間的**優先順序**。

## 各規則如何計算距離

在查看權數範例之前，先了解每個加權規則如何計算其距離值會很有幫助。距離一律是介於 0 到 1 之間的數字，值越低表示越相符。

| 規則類型 | 距離公式 | 距離 = 0 | 距離 = 1 |
| - | - | - | - |
| 差異 | `absoluteDifference / maxDifference` | 玩家的值完全相同 | 玩家之間的差異達到允許的完整範圍 |
| 字串相等 | 字串相符時為 0；如果規則為選用且字串不同則為 1 | 字串完全相同 | 規則為選用且字串不同 |
| 集合交集 | `1 / (1 + sharedItemCount)` | 不適用 (有一個共用項目時最小值為 0.5) | 沒有共用項目 (`1 / (1 + 0) = 1`) |
| 比賽總計 | `(maxTotal - (groupTotal + ticketValue)) / maxTotal` | 群組已達目標容量 | 群組與目標總計相差甚遠 |
| 區域選取 | `1 / (1 + Σ qualityTerms)` | 有許多低延遲的共同區域 | 共同區域很少或品質不佳 |

## 哪些規則支援權數

權數適用於參與以距離為基礎之排序的**標準規則類型**。下列規則支援 Weight 屬性：

| 規則類型 | 支援權數 |
| - | :-: |
| 字串相等 | ✔ |
| 差異 | ✔ |
| 集合交集 | ✔ |
| 比賽總計 | ✔ |
| 區域選取 | ✔ |

下列**隊伍規則類型\*\*\*\*不**支援權數。這些規則作為驗證器，只會讓比賽通過或失敗，不參與以距離為基礎的排序：

| 規則類型 | 支援權數 | 行為 |
| - | :-: | - |
| 隊伍差異 | ✘ | 驗證隊伍平均值在允許的差異範圍內 |
| 隊伍人數平衡 | ✘ | 驗證隊伍的玩家人數是否平衡 |
| 隊伍票證大小相似度 | ✘ | 驗證隊伍具有相似的隊伍群組組成 |

## 有效的權數值

權數必須是**大於 0** 且**不超過 1000** (含) 的數字。不允許權數為 0。如果未指定權數，預設值為 **1**。

## 範例

下列範例使用一個佇列，其中包含技能的**差異規則**和偏好遊戲地圖的**集合交集規則**。佇列中有三位玩家：Alice、Bob 和 Charlie。配對系統需要決定兩位候選人 (Bob 或 Charlie) 中，哪一位與 Alice 更相配。

### 佇列設定

```json theme={null}
"Rules": [
    {
        "Type": "DifferenceRule",
        "Name": "SkillRule",
        "Attribute": { "Path": "skill", "Source": "User" },
        "MaxDifference": 10,
        "MergeFunction": "Average",
        "Weight": 1
    },
    {
        "Type": "SetIntersectionRule",
        "Name": "MapRule",
        "Attribute": { "Path": "preferredMaps", "Source": "User" },
        "MinIntersectionSize": 1,
        "Weight": 1
    }
]
```

### 玩家屬性

| 玩家 | 技能 | 偏好地圖 |
| - | - | - |
| Alice | 20 | "Dustbowl", "Summit", "Lakeside" |
| Bob | 24 | "Dustbowl," "Summit" |
| Charlie | 17 | "Lakeside" |

### 步驟 1：計算各規則的距離

**SkillRule** (差異規則) 使用公式 `absoluteDifference / maxDifference`：

* Alice 對 Bob：`|20 - 24| / 10 = 4 / 10 = 0.4`
* Alice 對 Charlie：`|20 - 17| / 10 = 3 / 10 = 0.3`

**MapRule** (集合交集規則) 使用公式 `1 / (1 + sharedItemCount)`：

* Alice 對 Bob：兩人共用 "Dustbowl" 和 "Summit" (兩個項目) → `1 / (1 + 2) = 0.33`
* Alice 對 Charlie：兩人共用 "Lakeside" (一個項目) → `1 / (1 + 1) = 0.5`

### 範例 1：相同權數

兩個規則的 Weight 都為 1 時，總距離為：

```
Bob:     totalDistance = (1 × 0.4)  + (1 × 0.33) = 0.73
Charlie: totalDistance = (1 × 0.3)  + (1 × 0.5)  = 0.80
```

**結果：** Bob (0.73) 比 Charlie (0.80) 更相配。雖然 Charlie 的技能較接近，但 Bob 與 Alice 共用較多地圖，而兩個規則的貢獻相同。會優先嘗試 Bob。

### 範例 2：優先考量技能 (SkillRule 的 Weight = 10)

如果您的遊戲具競技性，且技能平衡最為重要，請提高 SkillRule 的權數：

```json theme={null}
{
    "Type": "DifferenceRule",
    "Name": "SkillRule",
    ...
    "Weight": 10
},
{
    "Type": "SetIntersectionRule",
    "Name": "MapRule",
    ...
    "Weight": 1
}
```

現在總距離會變成：

```
Bob:     totalDistance = (10 × 0.4)  + (1 × 0.33) = 4.33
Charlie: totalDistance = (10 × 0.3)  + (1 × 0.5)  = 3.50
```

**結果：** Charlie (3.50) 現在是較佳的配對。技能的權數較高，表示 Charlie 較接近的技能等級 (差異 3 對 4) 比 Bob 共用較多地圖這件事更重要。技能主導了排序順序。

### 範例 3：優先考量共用地圖 (MapRule 的 Weight = 10)

如果您的遊戲較休閒，且玩家最在意的是在自己最愛的地圖上遊玩，請改為提高 MapRule 的權數：

```json theme={null}
{
    "Type": "DifferenceRule",
    "Name": "SkillRule",
    ...
    "Weight": 1
},
{
    "Type": "SetIntersectionRule",
    "Name": "MapRule",
    ...
    "Weight": 10
}
```

現在總距離變成：

```
Bob:     totalDistance = (1 × 0.4)  + (10 × 0.33) = 3.70
Charlie: totalDistance = (1 × 0.3)  + (10 × 0.5)  = 5.30
```

**結果：** 會偏好 Bob (3.70)。與 Alice 共用兩張地圖讓 Bob 具有明顯優勢，而 Charlie 較小的技能差距幾乎沒有影響。地圖偏好主導了排序順序。

### 範例 4：玩家無法配對時 (硬性拒絕)

現在加入第四位玩家 **Dave**，他的技能與 Alice 相差甚遠，且沒有共用任何偏好地圖：

| 玩家 | 技能 | 偏好地圖 |
| - | - | - |
| Alice | 20 | "Dustbowl," "Summit," "Lakeside" |
| Dave | 35 | "Fortress" |

**SkillRule：** `|20 - 35| / 10 = 15 / 10 = 1.5`，但差異 15 超過 `MaxDifference` (10)，因此規則會傳回**無限大距離** (硬性拒絕)。

**MapRule：** Alice 和 Dave 共用 0 張地圖，而 `MinIntersectionSize` 為 1，因此此規則也會傳回**無限大距離**。

```
Dave: totalDistance = infinite  (skill difference 15 > MaxDifference 10 → hard rejection)
```

無論權數如何設定，Dave 都無法與 Alice 配對。即使只有一個規則傳回無限大距離，整個總距離也會變成無限大，且該票證會從候選清單中排除。權數無法覆寫硬性拒絕，只能影響已符合資格之票證之間的優先順序。若要讓像 Dave 這樣的玩家最終能夠配對，請使用[規則擴充](/zh-TW/services/playfab/multiplayer/matchmaking/config-queues#expansions-and-becoming-optional)隨時間放寬限制。

### 範例摘要

下表顯示在玩家屬性和規則都相同、只有權數不同的情況下，權數如何改變偏好的候選人。

| 權數設定 | Bob 的總距離 | Charlie 的總距離 | Dave 的總距離 | 與 Alice 最相配者 |
| - | :-: | :-: | :-: | - |
| 技能 = 1、地圖 = 1 (相同) | 0.73 | 0.80 | ∞ (已拒絕) | Bob |
| 技能 = 10、地圖 = 1 (技能優先) | 4.33 | 3.50 | ∞ (已拒絕) | Charlie |
| 技能 = 1、地圖 = 10 (地圖優先) | 3.70 | 5.30 | ∞ (已拒絕) | Bob |

基礎距離從未改變，改變的只有指派給每個規則的相對重要性。Dave 一律會被拒絕，因為該玩家的屬性超過硬性限制，與權數無關。這就是權數調整的威力。

## 權數與規則擴充

當規則變成選用 (透過[變成選用前的秒數](/zh-TW/services/playfab/multiplayer/matchmaking/config-queues#expansions-and-becoming-optional)或擴充) 時，它就不再硬性拒絕票證。不過，原本會被拒絕的票證仍會獲得非零的距離值。權數會繼續縮放此距離，這表示選用規則仍會影響排序順序，它們會降低「違反規則」之票證的優先順序，而不是完全排除它們。

此行為有助於確保即使規則隨時間放寬，仍會優先選擇最佳的配對。

## 最佳做法

* **從相同的權數開始**，並根據玩家對比賽品質的意見反應進行調整。
* 對遊戲體驗最重要的規則**使用較高的權數** (例如競技遊戲的技能，或休閒遊戲的共用內容)。
* **請記住，權數只會影響排序**，無法讓不可能的比賽成立。請使用[擴充](/zh-TW/services/playfab/multiplayer/matchmaking/config-queues#expansions-and-becoming-optional)隨時間放寬硬性限制。
* **避免極端的權數比例** (例如 1000:1)，除非您刻意要讓某個規則完全壓過其他所有規則。

## 另請參閱

* [設定配對佇列](/zh-TW/services/playfab/multiplayer/matchmaking/config-queues)
* [配對案例與設定範例](/zh-TW/services/playfab/multiplayer/matchmaking/config-examples)
* [為票證指定屬性](/zh-TW/services/playfab/multiplayer/matchmaking/ticket-attributes)


## Related topics

- [設定配對佇列](/zh-TW/services/playfab/multiplayer/matchmaking/config-queues.md)
- [配對規模調整](/zh-TW/services/playfab/multiplayer/matchmaking/matchmaking-partition.md)
- [配對的運作方式](/zh-TW/services/playfab/multiplayer/matchmaking/how-matchmaking-works.md)
- [配對](/zh-TW/services/playfab/multiplayer/matchmaking/index.md)
- [在 Partner Center 中設定配對](/zh-TW/services/xbox-services/multiplayer/matchmaking/config/live-matchmaking-config.md)
