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

# Como o matchmaking funciona

> Entenda o loop de matchmaking do PlayFab: como os tíquetes são usados como semente, classificados por pontuação de distância, validados em relação às regras da fila e agrupados em partidas completas.

Este artigo descreve como o PlayFab Matchmaking avalia tíquetes, aplica regras e forma partidas. Entender o processo de correspondência ajuda você a projetar configurações de fila que produzam partidas de alta qualidade com eficiência.

## Visão geral da formação de partidas

Quando você envia um tíquete para uma fila, o serviço de matchmaking o coloca junto com outros tíquetes em espera. O serviço executa continuamente um **loop de partidas** que tenta agrupar tíquetes compatíveis em partidas. Veja o que acontece em cada etapa:

1. **Os tíquetes expirados são removidos.** Os tíquetes que excedem o tempo limite de `GiveUpAfterSeconds` são cancelados.
2. **Os tíquetes são ordenados por tempo de espera:** O tíquete que está esperando há mais tempo se torna a **semente**, ou ponto de partida, de uma possível partida.
3. **Os candidatos são classificados por compatibilidade:** Cada tíquete restante recebe uma **pontuação de distância** com base no quanto seus atributos se alinham com o tíquete semente, de acordo com as regras da fila.
4. **Um grupo é formado de forma gulosa:** Começando pelos candidatos mais próximos, os tíquetes são adicionados ao grupo um de cada vez, até `MaxMatchSize`.
5. **Cada adição é validada:** À medida que um tíquete é adicionado, cada regra verifica se o candidato ainda é compatível com o grupo formado até então. Se alguma regra o rejeitar, o candidato será ignorado.
6. **O grupo completo é validado:** Quando um grupo atinge pelo menos `MinMatchSize`, uma passagem de validação final confirma se o grupo atende a todas as regras. Se passar, uma partida será criada.
7. **Retrocesso:** Se nenhum grupo válido puder ser formado, o serviço removerá o último tíquete adicionado e tentará o próximo candidato. Esse processo explora agrupamentos alternativos antes de desistir da semente atual.

Em seguida, o serviço passa para o próximo tíquete que está esperando há mais tempo como uma nova semente e repete o processo.

<Note>
  O algoritmo prioriza os tíquetes que estão esperando há mais tempo. Essa prioridade garante que os jogadores que esperam mais sejam os primeiros a receber partidas.
</Note>

## Como as regras influenciam a correspondência

As regras têm duas finalidades durante a formação de partidas: **filtragem** e **ordenação**.

### Filtragem

Uma regra pode impedir que um tíquete entre em um grupo. Por exemplo, uma `StringEqualityRule` na versão de build do jogo rejeita qualquer tíquete cujo build não corresponda ao build do grupo. O serviço de matchmaking verifica a filtragem sempre que considera um candidato. Não é apenas uma verificação única no início.

### Ordenação (distância)

As regras também contribuem com uma **pontuação de distância** que determina quais candidatos são testados primeiro. Uma distância menor significa maior compatibilidade.

* Um tíquete com um valor de atributo idêntico geralmente tem distância **0**.
* Um tíquete no limite do intervalo permitido de uma regra tem distância próxima de **1**.
* Um tíquete fora do intervalo permitido é filtrado (distância efetivamente infinita).

Quando uma fila tem várias regras, a distância de cada regra é multiplicada pelo seu [peso](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues) e somada. Os tíquetes são testados em ordem, da menor para a maior distância total, para que os candidatos mais compatíveis sejam testados primeiro.

<Tip>
  Use os pesos das regras para expressar importância relativa. Por exemplo, se a similaridade de habilidade for mais importante do que a preferência de região, atribua um peso maior à regra de habilidade.
</Tip>

### Validação

Algumas restrições só podem ser verificadas depois que um grupo completo é formado. Por exemplo, as regras de equilíbrio de equipes (`TeamDifferenceRule`, `TeamSizeBalanceRule`) precisam ver o grupo completo antes de poderem avaliar se as equipes estão equilibradas. Essas regras são executadas como uma etapa de validação final.

## Expansão e relaxamento

Quando um tíquete aguarda, as regras **relaxam** suas restrições para ampliar a busca. Dois mecanismos controlam esse processo:

* **Expansão**: Uma regra ajusta gradualmente seu limite ao longo do tempo. Por exemplo, uma `DifferenceRule` com um limite de habilidade de 0,2 pode se expandir em 0,1 a cada 5 segundos, permitindo, por fim, uma diferença de 0,5.
* **Segundos até se tornar opcional**: Após um tempo configurado, a regra para completamente de filtrar. A regra ainda contribui para a ordenação (distância), mas não bloqueia mais partidas.

A expansão é sempre **baseada em tempo**. Ela se aplica uniformemente a todos os tíquetes com base em quanto tempo eles estão esperando. Os tíquetes que esperam mais tempo naturalmente atingem estágios de expansão mais amplos e podem ser combinados com um conjunto maior de candidatos.

<Note>
  O relaxamento não significa que a qualidade da partida seja ignorada. Mesmo quando uma regra se torna opcional, ela ainda contribui com distância para a etapa de ordenação. Os candidatos que atendem à regra são testados antes dos que não atendem.
</Note>

Para obter mais detalhes sobre como configurar expansões, confira [Configurando filas de matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues).

## Dimensionamento e particionamento

Quando uma fila recebe um grande volume de tíquetes, o serviço **particiona** os tíquetes em grupos que avalia de forma independente. O particionamento usa atributos de regras que dividem naturalmente a população. Por exemplo, uma `StringEqualityRule` no modo de jogo cria limites de partição bem definidos.

À medida que a carga diminui, as partições se mesclam novamente. Esse processo fornece ao serviço um conjunto maior de candidatos e melhora a qualidade das partidas.

Para obter mais detalhes sobre como projetar filas que se dimensionam bem, confira [Dimensionamento do matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/matchmaking-partition).

## Projetando para preferências assimétricas

Alguns cenários de matchmaking envolvem preferências assimétricas, em que o Jogador A está disposto a ser combinado com o Jogador B, mas o Jogador B não está disposto a ser combinado com o Jogador A. As configurações de jogo multiplataforma (cross-play) são o exemplo mais comum. Para conhecer um padrão de configuração recomendado e um exemplo prático, confira [Lidando com preferências assimétricas de jogo multiplataforma](/pt-BR/services/playfab/multiplayer/matchmaking/config-examples#lidando-com-preferências-assimétricas-de-jogo-multiplataforma).

## Confira também

* [Configurando filas de matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/config-queues)
* [Exemplos de cenários e configurações de matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/config-examples)
* [Dimensionamento do matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/matchmaking-partition)


## Related topics

- [Matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/index.md)
- [Entendendo o peso das regras no matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/rule-weights.md)
- [Mensagens em tempo real de Lobby e Matchmaking](/pt-BR/services/playfab/multiplayer/lobby/lobby-and-matchmaking-real-time-messages.md)
- [Navegação de sessões multiplayer](/pt-BR/services/xbox-services/multiplayer/concepts/live-session-browse.md)
- [Entendendo como funciona o chat do PlayFab Party](/pt-BR/services/playfab/community/voice-communications/concepts-chat.md)
