> ## 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.

# Entendendo o peso das regras no matchmaking

> Entenda como a propriedade Weight das regras de matchmaking do PlayFab controla a classificação dos candidatos, a qualidade das partidas e como os tíquetes são ordenados durante a correspondência.

## Visão geral

Ao configurar uma fila de matchmaking, você pode atribuir a cada regra um valor de **Weight** (peso). O peso é um multiplicador numérico que controla quanta influência uma determinada regra tem quando o sistema de matchmaking classifica e ordena os tíquetes qualificados. Ele não altera se um tíquete passa ou não em uma regra; afeta apenas **a importância dessa regra em relação às outras** ao determinar quais tíquetes são os melhores candidatos para uma partida.

Entender o peso é essencial para ajustar a qualidade das partidas. Ajustando os pesos das suas regras, você pode priorizar o que é mais importante para o seu jogo, seja o equilíbrio de habilidade, a proximidade geográfica ou o conteúdo compartilhado.

## Como o peso funciona

Cada regra que dá suporte a peso calcula um valor de **distância** para cada par de tíquetes avaliado. Essa distância representa o quanto dois tíquetes são semelhantes ou diferentes de acordo com essa regra:

* Uma distância de **0** significa que os tíquetes são uma combinação perfeita para essa regra.
* Uma distância mais próxima de **1** significa que os tíquetes estão no limite do que a regra permite.
* Uma distância **infinita** (rejeição rígida) significa que os tíquetes não podem ser combinados de acordo com essa regra, independentemente do peso.

O sistema de matchmaking calcula uma **distância total** de todas as regras ponderadas usando a seguinte fórmula:

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

Os tíquetes com uma distância total menor são considerados melhores candidatos e são testados primeiro ao montar uma partida. O peso atua como um multiplicador escalar sobre a contribuição de cada regra para esse total.

> [!NOTE]
>
> O peso **não** substitui restrições rígidas. Se uma regra determinar que dois tíquetes são incompatíveis, os tíquetes serão totalmente excluídos. Por exemplo, isso acontece com uma regra de diferença em que os valores excedem a diferença máxima permitida. O peso influencia apenas a **ordem de prioridade** entre os tíquetes que já estão qualificados.

## Como cada regra calcula a distância

Antes de ver os exemplos de peso, é útil entender como cada regra ponderada calcula seu valor de distância. A distância é sempre um número entre 0 e 1, em que valores menores indicam uma correspondência mais próxima.

| Tipo de regra | Fórmula de distância | Distância = 0 | Distância = 1 |
| - | - | - | - |
| Diferença | `absoluteDifference / maxDifference` | Os valores dos jogadores são idênticos | Os jogadores diferem pelo valor total permitido |
| Igualdade de cadeia de caracteres | 0 se as cadeias corresponderem; 1 se a regra for opcional e as cadeias forem diferentes | As cadeias são idênticas | A regra é opcional e as cadeias são diferentes |
| Interseção de conjuntos | `1 / (1 + sharedItemCount)` | N/D (o mínimo é 0,5 com um item compartilhado) | Nenhum item compartilhado (`1 / (1 + 0) = 1`) |
| Total da partida | `(maxTotal - (groupTotal + ticketValue)) / maxTotal` | O grupo está na capacidade desejada | O grupo está longe do total desejado |
| Seleção de região | `1 / (1 + Σ qualityTerms)` | Muitas regiões em comum com baixa latência | Poucas regiões em comum ou de baixa qualidade |

## Quais regras dão suporte a peso

O peso se aplica aos **tipos de regras padrão** que participam da ordenação baseada em distância. As seguintes regras dão suporte à propriedade Weight:

| Tipo de regra | Dá suporte a peso |
| - | :-: |
| Igualdade de cadeia de caracteres | ✔ |
| Diferença | ✔ |
| Interseção de conjuntos | ✔ |
| Total da partida | ✔ |
| Seleção de região | ✔ |

Os seguintes **tipos de regras de equipe** **não** dão suporte a peso. Essas regras atuam como validadores: elas aprovam ou reprovam uma partida e não participam da ordenação baseada em distância:

| Tipo de regra | Dá suporte a peso | Comportamento |
| - | :-: | - |
| Diferença entre equipes | ✘ | Valida se as médias das equipes estão dentro de uma diferença permitida |
| Equilíbrio de tamanho de equipe | ✘ | Valida se as contagens de jogadores das equipes estão equilibradas |
| Similaridade de tamanho de tíquete de equipe | ✘ | Valida se as equipes têm composições de grupo semelhantes |

## Valores de peso válidos

O peso deve ser um número **maior que 0** e **até 1000** (inclusive). Um peso de 0 não é permitido. Se nenhum peso for especificado, o valor padrão será **1**.

## Exemplos

Os exemplos a seguir usam uma fila com uma **regra de diferença** para habilidade e uma **regra de interseção de conjuntos** para mapas de jogo preferidos. Três jogadores (Alice, Bob e Charlie) estão na fila. O sistema de matchmaking precisa decidir qual dos dois candidatos (Bob ou Charlie) é a melhor combinação para Alice.

### Configuração da fila

```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
    }
]
```

### Atributos dos jogadores

| Jogador | Habilidade | Mapas preferidos |
| - | - | - |
| Alice | 20 | "Dustbowl", "Summit", "Lakeside" |
| Bob | 24 | "Dustbowl," "Summit" |
| Charlie | 17 | "Lakeside" |

### Etapa 1: Calcular as distâncias por regra

**SkillRule** (regra de diferença) usa a fórmula `absoluteDifference / maxDifference`:

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

**MapRule** (regra de interseção de conjuntos) usa a fórmula `1 / (1 + sharedItemCount)`:

* Alice vs Bob: eles compartilham "Dustbowl" e "Summit" (dois itens) → `1 / (1 + 2) = 0.33`
* Alice vs Charlie: eles compartilham "Lakeside" (um item) → `1 / (1 + 1) = 0.5`

### Exemplo 1: Pesos iguais

Com ambas as regras com Weight = 1, a distância total é:

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

**Resultado:** Bob (0,73) é uma combinação melhor do que Charlie (0,80). Embora Charlie esteja mais próximo em habilidade, Bob compartilha mais mapas com Alice, e ambas as regras contribuem igualmente. Bob é testado primeiro.

### Exemplo 2: Priorizando a habilidade (Weight = 10 em SkillRule)

Se o seu jogo for competitivo e o equilíbrio de habilidade for o mais importante, aumente o peso de SkillRule:

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

Agora as distâncias totais mudam:

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

**Resultado:** Charlie (3,50) agora é a melhor combinação. O peso maior na habilidade significa que o nível de habilidade mais próximo de Charlie (diferença de três contra 4) supera o fato de Bob compartilhar mais mapas. A habilidade domina a ordem de classificação.

### Exemplo 3: Priorizando mapas compartilhados (Weight = 10 em MapRule)

Se o seu jogo for casual e os jogadores se importarem mais em jogar em seus mapas favoritos, aumente o peso de MapRule:

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

Agora as distâncias totais passam a ser:

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

**Resultado:** Bob (3,70) é o preferido. Compartilhar dois mapas com Alice dá a Bob uma vantagem significativa, e a pequena diferença de habilidade de Charlie quase não importa. A preferência de mapa domina a ordem de classificação.

### Exemplo 4: Quando os jogadores não podem ser combinados (rejeição rígida)

Agora, adicione um quarto jogador, **Dave**, cuja habilidade está longe da de Alice e que não compartilha nenhum mapa preferido:

| Jogador | Habilidade | Mapas preferidos |
| - | - | - |
| Alice | 20 | "Dustbowl," "Summit," "Lakeside" |
| Dave | 35 | "Fortress" |

**SkillRule:** `|20 - 35| / 10 = 15 / 10 = 1.5`, mas a diferença de 15 excede `MaxDifference` (10), portanto a regra retorna **distância infinita** (rejeição rígida).

**MapRule:** Alice e Dave compartilham 0 mapas, e `MinIntersectionSize` é 1, portanto esta regra também retorna **distância infinita**.

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

Independentemente de como os pesos estejam configurados, Dave não pode ser combinado com Alice. Mesmo que apenas uma regra retorne distância infinita, toda a distância total se torna infinita e o tíquete é excluído da lista de candidatos. O peso não pode substituir uma rejeição rígida; ele só pode influenciar a prioridade entre os tíquetes que já estão qualificados. Para permitir que jogadores como Dave sejam combinados em algum momento, use [expansões de regras](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues.md#expansões-e-tornar-se-opcional) para relaxar as restrições ao longo do tempo.

### Resumo dos exemplos

A tabela abaixo mostra como o peso altera qual candidato é preferido, usando os mesmos atributos de jogadores e as mesmas regras; apenas os pesos são diferentes.

| Configuração de peso | Distância total de Bob | Distância total de Charlie | Distância total de Dave | Melhor combinação para Alice |
| - | :-: | :-: | :-: | - |
| Skill = 1, Maps = 1 (iguais) | 0.73 | 0.80 | ∞ (rejeitado) | Bob |
| Skill = 10, Maps = 1 (prioridade à habilidade) | 4.33 | 3.50 | ∞ (rejeitado) | Charlie |
| Skill = 1, Maps = 10 (prioridade ao mapa) | 3.70 | 5.30 | ∞ (rejeitado) | Bob |

As distâncias subjacentes nunca mudam; apenas a importância relativa atribuída a cada regra muda. Dave é sempre rejeitado porque os atributos do jogador excedem os limites rígidos, independentemente do peso. Esse é o poder do ajuste de pesos.

## Peso e expansões de regras

Quando uma regra se torna opcional (por meio de [Segundos até se tornar opcional](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues.md#expansões-e-tornar-se-opcional) ou de expansão), ela deixa de rejeitar tíquetes de forma rígida. No entanto, os tíquetes que seriam rejeitados ainda recebem um valor de distância diferente de zero. O peso continua dimensionando essa distância, o que significa que as regras opcionais ainda influenciam a ordem de classificação: elas empurram os tíquetes "violadores" para uma prioridade menor, em vez de excluí-los totalmente.

Esse comportamento é útil para garantir que, mesmo quando as regras relaxam ao longo do tempo, as melhores combinações continuem sendo preferidas.

## Práticas recomendadas

* **Comece com pesos iguais** e ajuste com base no feedback dos seus jogadores sobre a qualidade das partidas.
* **Use pesos maiores** nas regras mais importantes para a experiência do seu jogo (como habilidade para títulos competitivos ou conteúdo compartilhado para jogos casuais).
* **Lembre-se de que o peso afeta apenas a ordenação**: ele não pode tornar possível uma partida impossível. Use [expansões](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues.md#expansões-e-tornar-se-opcional) para relaxar as restrições rígidas ao longo do tempo.
* **Evite proporções de peso extremas** (como 1000:1), a menos que você queira intencionalmente que uma regra se sobreponha completamente a todas as outras.

## Confira também

* [Configurando filas de matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues.md)
* [Exemplos de cenários e configurações de matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/config-examples.md)
* [Especificando atributos nos seus tíquetes](/pt-BR/services/playfab/multiplayer/matchmaking/ticket-attributes.md)


## Related topics

- [Configurando filas de matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues.md)
- [Como o matchmaking funciona](/pt-BR/services/playfab/multiplayer/matchmaking/how-matchmaking-works.md)
- [Dimensionamento do matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/matchmaking-partition.md)
- [Configurando o matchmaking no Partner Center](/pt-BR/services/xbox-services/multiplayer/matchmaking/config/live-matchmaking-config.md)
- [Matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/index.md)
