

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Creación de un conjunto de reglas de FlexMatch
<a name="match-rulesets"></a>

Cada emparejador de FlexMatch debe tener un conjunto de reglas. El conjunto de reglas determina los dos elementos clave de un emparejamiento: la estructura y el tamaño del equipo del juego, y cómo agrupar los jugadores para lograr el mejor emparejamiento posible. 

Por ejemplo, un conjunto de reglas podría describir un emparejamiento de este tipo: Crear un emparejamiento con dos equipos de cinco jugadores cada uno (un equipo de defensores y un equipo de invasores). Un equipo puede tener jugadores novatos y experimentados, pero la habilidad media de los dos equipos debe estar dentro de los 10 puntos de diferencia entre sí. Si después de 30 segundos no se ha realizado ningún emparejamiento, reduzca gradualmente los requisitos de habilidad.

Los temas de esta sección describen cómo diseñar y crear un conjunto de reglas de emparejamiento. Para crear un conjunto de reglas, puede utilizar la consola de Amazon GameLift Servers o la CLI de AWS.

**Topics**
+ [Diseño de un conjunto de reglas de FlexMatch](match-design-ruleset.md)
+ [Diseño de un conjunto de reglas de emparejamiento amplio de FlexMatch](match-design-rulesets-large.md)
+ [Tutorial: Creación de un conjunto de reglas de emparejamiento](match-create-ruleset.md)
+ [Ejemplos de conjuntos de reglas de FlexMatch](match-examples.md)

# Diseño de un conjunto de reglas de FlexMatch
<a name="match-design-ruleset"></a>

En este tema se trata la estructura básica de un conjunto de reglas y cómo compilar un conjunto de reglas para emparejamientos pequeños de hasta 40 jugadores. Un conjunto de reglas de emparejamiento hace dos cosas: establece una estructura y tamaño del equipo de un emparejamiento, e indica al emparejador cómo elegir a los jugadores para formar el mejor emparejamiento posible. 

Sin embargo, el conjunto de reglas de emparejamiento puede hacer más. Por ejemplo, puede hacer lo siguiente:
+ Optimizar el algoritmo de emparejamiento para el juego.
+ Establecer requisitos mínimos de latencia de los jugadores para proteger la calidad del juego.
+ Con el tiempo, flexibilizar los requisitos del equipo y las reglas de los emparejamientos para que todos los jugadores activos puedan encontrar un emparejamiento aceptable cuando lo deseen.
+ Definir la gestión de las solicitudes de emparejamiento grupal mediante la agregación de grupos.
+ Procesar emparejamientos de gran tamaño de 40 o más jugadores. Para obtener más información sobre la compilación de emparejamientos de gran tamaño, consulte [Diseño de un conjunto de reglas de emparejamiento amplio de FlexMatch](match-design-rulesets-large.md).

Al compilar un conjunto de reglas de emparejamiento, tenga en cuenta las siguientes tareas opcionales y obligatorias: 
+ [Descripción del conjunto de reglas (obligatorio)](match-rulesets-components-set.md)
+ [Personalización del algoritmo de coincidencia](match-rulesets-components-algorithm.md)
+ [Declaración de atributos de jugador](match-rulesets-components-attributes.md)
+ [Definición de los equipos de emparejamiento](match-rulesets-components-teams.md)
+ [Establecimiento de reglas para el emparejamiento de jugador](match-rulesets-components-rules.md)
+ [Permiso para que los requisitos se flexibilicen con el tiempo](match-rulesets-components-expansion.md)

Puede compilar el conjunto de reglas mediante la consola de Amazon GameLift Servers o la operación `[CreateMatchmakingRuleSet](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreateMatchmakingRuleSet.html)`.

# Descripción del conjunto de reglas (obligatorio)
<a name="match-rulesets-components-set"></a>

Proporcione detalles para el conjunto de reglas.
+ *nombre* (opcional): una etiqueta descriptiva para su uso personal. Este valor no está asociado al nombre del conjunto de reglas que especifique al crear el conjunto de reglas con Amazon GameLift Servers.
+ *ruleLanguageVersion*— La versión del lenguaje de expresión de propiedades que se utiliza para crear FlexMatch reglas. El valor debe ser `1.0`.

# Personalización del algoritmo de coincidencia
<a name="match-rulesets-components-algorithm"></a>

FlexMatch optimiza el algoritmo predeterminado de la mayoría de los juegos para que los jugadores participen en emparejamientos aceptables con un tiempo de espera mínimo. Puede personalizar el algoritmo y ajustar el emparejamiento para el juego.

El siguiente es el algoritmo de emparejamiento de FlexMatch predeterminado: 

1. FlexMatch coloca todos los tickets de emparejamiento abiertos y los tickets de reposición en un grupo de tickets.

1. FlexMatch agrupa aleatoriamente los tickets del grupo en uno o más lotes. A medida que aumenta el grupo de tickets, FlexMatch forma lotes adicionales para mantener un tamaño de lote óptimo.

1. Dentro de cada lote, FlexMatch clasifica los tickets por edad.

1. FlexMatch compila un emparejamiento basado en el ticket más antiguo de cada lote. 

Para personalizar el algoritmo de emparejamiento, añada un componente de `algorithm` a su esquema de conjunto de reglas. Para obtener información de referencia completa, consulte [Esquema del conjunto de reglas de FlexMatch](match-ruleset-schema.md). 

Utilice las siguientes personalizaciones opcionales para influir en las diferentes etapas del proceso de emparejamiento. 
+ [Adición de la clasificación previa a los lotes](#match-rulesets-components-algorithm-presort)
+ [Formación de lotes en función de los atributos de batchDistance](https://docs.aws.amazon.com//gameliftservers/latest/flexmatchguide/match-rules-reference-ruletype.html#match-rules-reference-ruletype-batchdistance)
+ [Priorización los tickets de reposición](#match-rulesets-components-algorithm-backfill)
+ [Preferencia de los tickets más antiguos con expansiones](#match-rulesets-components-algorithm-expansion)

## Adición de la clasificación previa a los lotes
<a name="match-rulesets-components-algorithm-presort"></a>

Puede ordenar el grupo de tickets antes de formar los lotes. Este tipo de personalización es más eficaz en juegos con grandes grupos de tickets. La clasificación previa por lotes puede ayudar a acelerar el proceso de emparejamiento y a aumentar la uniformidad de los jugadores en cuanto a las características definidas.

Defina los métodos de clasificación previa a los lotes mediante la propiedad del algoritmo `batchingPreference`. El ajuste predeterminado es `random`.

Entre las opciones para personalizar la clasificación previa a los lotes se incluyen las siguientes:
+ **Ordenar por atributos de jugador.** Proporcione una lista de los atributos de los jugadores para ordenar previamente el grupo de tickets. 

  Para ordenar por atributos de jugador, establezca `batchingPreference` en `sorted` y defina su lista de atributos de jugador en `sortByAttributes`. Para usar un atributo, primero declare el atributo en el componente `playerAttributes` del conjunto de reglas. 

  En el siguiente ejemplo, FlexMatch ordena el grupo de tickets según el mapa de juego preferido de los jugadores y, a continuación, según la habilidad del jugador. Es más probable que los lotes resultantes contengan jugadores con habilidades similares que quieran utilizar el mismo mapa.

  ```
  "algorithm": {
      "batchingPreference": "sorted",
      "sortByAttributes": ["map", "player_skill"],
      "strategy": "exhaustiveSearch"
  },
  ```
+ **Ordenar por latencia.** Cree coincidencias con la latencia más baja disponible o cree rápidamente emparejamientos con una latencia aceptable. Esta personalización resulta útil para conjuntos de reglas que forman emparejamientos grandes de más de 40 jugadores. 

  Establezca la propiedad del algoritmo `strategy` en`balanced`. La estrategia equilibrada limita los tipos de declaraciones de reglas disponibles. Para obtener más información, consulte [Diseño de un conjunto de reglas de emparejamiento amplio de FlexMatch](match-design-rulesets-large.md). 

  FlexMatch clasifica los tickets en función de los datos de latencia informados por los jugadores de una de las siguientes maneras: 
  + *Ubicaciones de latencia más baja.* El grupo de tickets se clasifica previamente según las ubicaciones en las que los jugadores informan de sus valores de latencia más bajos. FlexMatch agrupa entonces los tickets con una latencia baja en las mismas ubicaciones, lo que contribuye a crear una mejor experiencia de juego. También reduce la cantidad de tickets en cada lote, por lo que el emparejamiento puede llevar más tiempo. Para utilizar esta personalización, establezca `batchingPreference` en `fastestRegion`, como se muestra en el siguiente ejemplo.

    ```
    "algorithm": {
        "batchingPreference": "fastestRegion",
        "strategy": "balanced"
    },
    ```
  + *La latencia aceptable realiza el emparejamiento rápidamente.* El grupo de tickets se clasifica previamente mediante ubicaciones en las que los jugadores informan de un valor de latencia aceptable. Esto forma menos lotes con más tickets. Con más tickets en cada lote, es más rápido encontrar emparejamientos aceptables. Para utilizar esta personalización, establezca la propiedad `batchingPreference` en ` largestPopulation`, como se muestra en el siguiente ejemplo.

    ```
    "algorithm": {
        "batchingPreference": "largestPopulation",
        "strategy": "balanced"
    },
    ```
**nota**  
El valor predeterminado para la estrategia equilibrada es `largestPopulation`.

## Priorización los tickets de reposición
<a name="match-rulesets-components-algorithm-backfill"></a>

Si el juego implementa la reposición automática o manual, puede personalizar la forma en que FlexMatch procesa los tickets de emparejamiento según el tipo de solicitud. El tipo de solicitud puede ser un nuevo emparejamiento o una solicitud de relleno. De forma predeterminada, FlexMatch trata ambos tipos de solicitudes de la misma manera.

La priorización de reposición afecta a la forma en que FlexMatch gestiona los tickets después de agruparlos por lotes. La priorización de reposición requiere conjuntos de reglas para utilizar la estrategia de búsqueda exhaustiva. 

FlexMatch no combina varios tickets de reposición.

Para cambiar la prioridad de los tickets de reposición, configure la propiedad `backfillPriority`.
+ **Emparejar primero los tickets de reposición.** Con esta opción se intenta igualar los tickets de reposición antes de crear nuevos emparejamientos. Esto significa que los jugadores entrantes tienen más probabilidades de unirse a un juego existente. 

  Es mejor usar esto si el juego utiliza la reposición automática. La reposición automática se suele utilizar en juegos con sesiones de juego cortas y una alta rotación de jugadores. Además, la reposición automática ayuda a estos juegos a formar emparejamientos mínimos viables y a que comiencen, mientras que FlexMatch busca más jugadores para llenar las ranuras abiertas.

  Configure el `backfillPriority` en `high`.

  ```
  "algorithm": {
      "backfillPriority": "high",
      "strategy": "exhaustiveSearch"
  },
  ```
+ **Emparejar los tickets de reposición al final.** Con esta opción se ignoran los tickets de reposición hasta que evalúa todos los demás tickets. Esto significa que FlexMatch repone a los jugadores entrantes en los juegos existentes cuando no puede unirlos a juegos nuevos. 

  Esta opción resulta útil cuando quiere utilizar la reposición como última opción para atraer jugadores a un juego, por ejemplo, cuando no hay suficientes jugadores para formar un nuevo juego. 

  Establece `backfillPriority` en `low`. 

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

## Preferencia de los tickets más antiguos con expansiones
<a name="match-rulesets-components-algorithm-expansion"></a>

Las reglas de expansión flexibilizan los criterios de los emparejamientos cuando estos son difíciles de completar. Amazon GameLift Servers aplica reglas de expansión cuando los tickets de un emparejamiento parcialmente completado alcanzan una antigüedad determinada. Las marcas de tiempo de creación de los tickets determinan cuándo Amazon GameLift Servers aplica las reglas; de forma predeterminada, FlexMatch realiza un seguimiento de la marca de tiempo del ticket emparejado más recientemente. 

Para cambiar el momento en que FlexMatch aplica las reglas de expansión, defina la propiedad `expansionAgeSelection` de la siguiente manera: 
+ **Ampliar en función de los tickets más recientes.** Esta opción permite aplicar las reglas de expansión en función del ticket más reciente que se añada al posible emparejamiento. Cada vez que FlexMatch empareja un ticket nuevo, el reloj se restablece. Con esta opción, los emparejamientos resultantes suelen ser de mayor calidad, pero tardan más en igualarse; las solicitudes de emparejamiento pueden agotarse antes de completarse si tardan demasiado en emparejarse. Establezca `expansionAgeSelection` en `newest`. `newest` es el valor predeterminado.
+ **Ampliar en función de los tickets más antiguos.** Esta opción permite aplicar las reglas de expansión en función del ticket más antiguo en el posible emparejamiento. Con esta opción, FlexMatch aplica las expansiones más rápido, lo que mejora los tiempos de espera para los primeros jugadores emparejados, pero reduce la calidad del emparejamiento para todos los jugadores. Establece `expansionAgeSelection` en `oldest`. 

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

# Declaración de atributos de jugador
<a name="match-rulesets-components-attributes"></a>

En esta sección aparecen los atributos individuales de los jugadores para incluirlos en las solicitudes de emparejamiento. Hay dos motivos por los que puede declarar los atributos de los jugadores en un conjunto de reglas: 
+ Cuando el conjunto de reglas contiene reglas que se basan en los atributos del jugador.
+ Cuando quiere pasar un atributo de jugador a la sesión de juego a través de la solicitud de emparejamiento. Por ejemplo, es posible que desees transferir las opciones de personaje del jugador a la sesión de juego antes de que cada jugador se conecte. 

Al declarar el atributo del jugador, incluya la siguiente información: 
+ *nombre* (obligatorio): este valor debe ser único en el conjunto de reglas. 
+ *tipo* (obligatorio): es el tipo de datos del valor de atributo. Los tipos de datos válidos son number, string, string list o string map.
+ *predeterminado* (opcional): introduce un valor predeterminado para usarlo si una solicitud de emparejamiento no proporciona un valor de atributo. Si no se declara ningún valor predeterminado y la solicitud no incluye un valor, FlexMatch no podrá tramitar la solicitud.

# Definición de los equipos de emparejamiento
<a name="match-rulesets-components-teams"></a>

Describa la estructura y el tamaño de los equipos para un emparejamiento. Cada emparejamiento debe tener al menos un equipo, y puede definir tantos equipos como quiera. Los equipos pueden tener el mismo número de jugadores o ser asimétricos. Por ejemplo, puede definir un equipo monstruo de un jugador y un equipo de cazadores con 10 jugadores. 

FlexMatch procesa las solicitudes de emparejamiento como emparejamientos reducidos o de gran tamaño en función de la forma en la que el conjunto de reglas define los tamaños de los equipos. Los emparejamientos potenciales de hasta 40 jugadores son emparejamientos reducidos, mientras que los emparejamientos con más de 40 jugadores son emparejamientos de gran tamaño. Para determinar el tamaño de emparejamiento potencial de un conjunto de reglas, sume la configuración de *maxPlayer* para todos los equipos definidos en el conjunto de reglas. 
+ *nombre* (obligatorio): permite asignar un nombre único a cada equipo. Utilice este nombre en las reglas y expansiones, y FlexMatch hará referencia a los datos de emparejamiento en una sesión de juego.
+ *maxPlayers* (obligatorio): permite especificar el número máximo de jugadores que desea asignar al equipo.
+ *minPlayers* (obligatorio): permite especificar el número máximo de jugadores que desea asignar al equipo. 
+ *cantidad* (opcional): permite especificar el número de equipos que quiere formar con esta definición. Cuando FlexMatch crea un emparejamiento, proporciona a esos equipos el nombre proporcionado con un número adjunto. Por ejemplo `Red-Team1`, `Red-Team2` y `Red-Team3`. 

FlexMatch intenta llenar los equipos hasta el tamaño máximo de jugadores, pero crea equipos con menos jugadores. Si desea que todos los equipos del emparejamiento tengan el mismo tamaño, puede crear una regla para eso. Consulte el tema [Ejemplos de conjuntos de reglas de FlexMatch](match-examples.md) para ver un ejemplo de una regla de `EqualTeamSizes` .

# Establecimiento de reglas para el emparejamiento de jugador
<a name="match-rulesets-components-rules"></a>

Cree un conjunto de declaraciones de reglas que evalúe a los jugadores para su aceptación en un emparejamiento. Las reglas pueden establecer requisitos aplicables a jugadores individuales, equipos o a todo el emparejamiento. Cuando Amazon GameLift Servers procesa una solicitud de emparejamiento, comienza con el jugador más antiguo del grupo de jugadores disponibles y crea un emparejamiento alrededor de ese jugador. Para obtener ayuda detallada sobre la creación de reglas de FlexMatch, consulte [Tipos de reglas de FlexMatch](match-rules-reference-ruletype.md).
+ *nombre* (obligatorio): es un nombre fácil de recordar, que identifica de forma exclusiva la regla dentro de un conjunto de reglas. También se hace referencia a los nombres de la reglas en registros de eventos y métricas que realizan un seguimiento de la actividad relacionada con esta regla. 
+ *descripción* (opcional): utilice este elemento para asociar una descripción de texto de formato libre.
+ *tipo* (obligatorio): el elemento “tipo” identifica la operación que se debe utilizar al procesar la regla. Cada tipo de regla requiere un conjunto de propiedades adicionales. Consulte una lista de tipos de reglas y propiedades válidos en [Lenguaje de las reglas de FlexMatch](match-rules-reference.md). 
+ Propiedad de tipo de regla (puede ser obligatoria): según el tipo de regla definido, es posible que deba configurar determinadas propiedades de la regla. Para obtener más información sobre las propiedades y cómo usar el lenguaje de expresión de propiedades FlexMatch, consulte [Lenguaje de las reglas de FlexMatch](match-rules-reference.md).

# Permiso para que los requisitos se flexibilicen con el tiempo
<a name="match-rulesets-components-expansion"></a>

Las expansiones le permiten flexibilizar los criterios de las reglas con el tiempo cuando FlexMatch no puede encontrar un emparejamiento. Esta característica garantiza que FlexMatch hará todo lo posible cuando no pueda ofrecer un emparejamiento perfecto. Al flexibilizar las reglas con una expansión, está ampliando gradualmente el grupo de jugadores que se puede emparejar. 

Las expansiones comienzan cuando la antigüedad del ticket más reciente del emparejamiento incompleto coincide con el tiempo de espera de una expansión. Cuando FlexMatch añade un nuevo ticket al emparejamiento, es posible que se restablezca el reloj de espera de la expansión. Puede personalizar el inicio de las expansiones en la sección `algorithm` del conjunto de reglas.

Este es un ejemplo de una expansión que aumenta gradualmente el nivel mínimo de habilidad necesario para el emparejamiento. El conjunto de reglas utiliza una regla de distancia, llamada así *SkillDelta*para exigir que todos los jugadores de una partida tengan una diferencia de 5 niveles de habilidad entre sí. Si no se realizan nuevos emparejamientos durante quince segundos, esta expansión busca una diferencia de nivel de habilidad de 10 y, diez segundos después, busca una diferencia de 20.

```
"expansions": [{
        "target": "rules[SkillDelta].maxDistance",
        "steps": [{
            "waitTimeSeconds": 15,
            "value": 10
        }, {
            "waitTimeSeconds": 25,
            "value": 20
        }]
    }]
```

Si un emparejador tiene habilitada la reposición automática, no flexibilice los requisitos de recuento de jugadores demasiado rápido. La nueva sesión del juego tarda unos segundos en arrancar y en iniciar la reposición automática. Es mejor iniciar la expansión después de que la reposición automática tienda a activarse para sus juegos. El tiempo de expansión varía en función de la composición del equipo, así que realice las pruebas para encontrar la mejor estrategia de expansión para el juego.

# Diseño de un conjunto de reglas de emparejamiento amplio de FlexMatch
<a name="match-design-rulesets-large"></a>

Si el conjunto de reglas crea emparejamientos que permiten de 41 a 200 jugadores, tendrá que realizar algunos ajustes en la configuración del conjunto de reglas. Esos ajustes optimizan el algoritmo de emparejamiento para que pueda compilar emparejamientos grandes y viables y, al mismo tiempo, reducir los tiempos de espera de los jugadores. Como resultado, los conjuntos de reglas de emparejamiento amplio sustituyen a las laboriosas reglas personalizadas por soluciones estándar optimizadas para las prioridades habituales en materia de emparejamiento. 

A continuación, le explicamos cómo determinar si necesita optimizar el conjunto de reglas para emparejamientos numerosos:

1. Para cada equipo definido en el conjunto de reglas, obtenga el valor de *MaxPlayer*,

1. Sume todos los valores de *MaxPlayer*. Si el total es superior a 40, tiene conjunto de reglas de emparejamiento amplio. 

Para optimizar el conjunto de reglas para emparejamientos amplios, realice los ajustes que se describen a continuación. Consulte el esquema para ver un conjunto de reglas de emparejamiento amplio establecido en [Esquema de conjuntos de reglas para emparejamientos de gran tamaño](match-ruleset-schema-large.md) y ejemplos de conjuntos de reglas en [Ejemplo: Crear un emparejamiento amplio](match-examples-7.md).

# Personalización del algoritmo de emparejamiento para emparejamientos grandes
<a name="match-design-rulesets-large-algorithm"></a>

Añada un componente de algoritmo al conjunto de reglas, si aún no existe ninguno. Establezca las siguientes propiedades. 
+ `strategy` (obligatorio): establezca la propiedad `strategy` en “equilibrado”. Este ajuste hará que FlexMatch realice comprobaciones adicionales después del emparejamiento para encontrar el equilibrio óptimo del equipo en función de un atributo de jugador específico, que se define en la propiedad `balancedAttribute`. La estrategia equilibrada reemplaza la necesidad de reglas personalizadas para crear equipos emparejados.
+ `balancedAttribute` (obligatorio): permite identificar un atributo del jugador para usarlo al equilibrar los equipos en un emparejamiento. Este atributo debe tener un tipo de datos numéricos (doble o entero). Por ejemplo, si elige equilibrar la habilidad de los jugadores, FlexMatch intenta asignar jugadores para que todos los equipos tengan niveles de habilidad agregados que estén lo más igualados posible. Asegúrese de declarar el atributo de equilibrio en los atributos de jugador del conjunto de reglas. 
+ `batchingPreference` (opcional): permite elegir cuánto énfasis quiere poner en formar emparejamientos con la menor latencia posible para los jugadores. Esta configuración afecta a la forma en que se ordenan los tickets para los emparejamientos antes de organizar los emparejamientos. Las opciones son: 
  + Mayor población. FlexMatch permite los emparejamientos utilizando todos los tickets del grupo que tengan valores de latencia aceptables en al menos una ubicación en común. Como resultado, el grupo de tickets potencial tiende a ser grande, lo que facilita completar los emparejamientos con mayor rapidez. Es posible que los jugadores participen en juegos con una latencia aceptable, pero no siempre óptima. Si la propiedad `batchingPreference` no está establecida, este es el comportamiento predeterminado cuando `strategy` se establece en “equilibrado”.
  + Ubicación más rápida. FlexMatch clasifica previamente todos los tickets del grupo en función de dónde se informe de valores de latencia más bajos. Como resultado, los emparejamientos suelen estar formadas por jugadores que muestran una baja latencia en las mismas ubicaciones. Al mismo tiempo, la cantidad potencial de tickets para cada emparejamiento es menor, lo que puede aumentar el tiempo necesario para completar el emparejamiento. Además, puesto que se da mayor prioridad a la latencia, los jugadores de los emparejamientos pueden variar más en función del atributo de equilibrio.

En el siguiente ejemplo, se configura el algoritmo de emparejamientos para que se comporte de la siguiente manera: (1) Clasifique previamente los grupos de tickets para agrupar los tickets por ubicación donde tengan valores de latencia aceptables; (2) Forme lotes de tickets clasificados para igualarlos; (3) Cree emparejamientos con los tickets de un lote y equilibre los equipos para igualar la habilidad media de los jugadores.

```
"algorithm": {
    "strategy": "balanced",
    "balancedAttribute": "player_skill",
    "batchingPreference": "largestPopulation"
},
```

# Declaración de atributos de jugador
<a name="match-design-rulesets-large-attributes"></a>

Asegúrese de declarar el atributo de jugador que se utiliza como atributo de equilibrio en el algoritmo del conjunto de reglas. Este atributo debe incluirse para cada jugador en una solicitud de emparejamiento. Puede proporcionar un valor predeterminado para el atributo del jugador, pero el equilibrio de atributos funciona mejor cuando se proporcionan valores específicos del jugador.

# Definición de equipos
<a name="match-design-rulesets-large-teams"></a>

El proceso de definir el tamaño y la estructura del equipo es el mismo que el de los emparejamientos reducidos, pero la forma en la que FlexMatch completa los equipos es diferente. Esto afecta al aspecto que puedan tener los emparejamientos cuando se completen solo parcialmente. Por eso, es posible que desee ajustar los tamaños mínimos del equipo.

FlexMatch utiliza las siguientes reglas cuando asigna un jugador a un equipo. Primero: busque equipos que aún no hayan alcanzado su requisito mínimo de jugador. Segundo: de esos equipos, encuentre el que tenga más ranuras abiertas. 

Para los emparejamientos que definen Varios equipos de igual tamaño, los jugadores se añaden secuencialmente a cada equipo hasta que estén completos. Como resultado, los equipos de un emparejamiento siempre tienen casi el mismo número de jugadores, incluso cuando el emparejamiento no está completo. Actualmente no hay forma de forzar equipos de igual tamaño en emparejamientos amplios. Para emparejamientos con equipos de tamaño asimétrico, el proceso es un poco más complejo. En este caso, los jugadores se asignan inicialmente a los equipos más grandes con el mayor número de ranuras abiertas. A medida que el número de ranuras abiertas se distribuye de manera más uniforme en todos los equipos, los jugadores se agrupan en una ranura en equipos más pequeños.

Por ejemplo, supongamos que tiene un conjunto de reglas con tres equipos. Los equipos rojo y azul están configurados en `maxPlayers`=10, `minPlayers`=5. El equipo verde tiene establecido `maxPlayers`=3, `minPlayers`=2. Esta es la secuencia de llenado: 

1. Ningún equipo ha llegado a `minPlayers`. Los equipos Rojo y Azul tienen 10 ranuras abiertas, mientras que el Verde tiene 3. Se asignan los primeros 10 jugadores (5 en cada uno) a los equipos Rojo y Azul. Ambos equipos han llegado a `minPlayers`.

1. El equipo verde aún no ha llegado a `minPlayers`. Se asignan los siguientes 2 jugadores al equipo Verde. El equipo verde ya ha llegado a `minPlayers`.

1. Con todos los equipos en `minPlayers`, ahora se asignan jugadores adicionales en función del número de ranuras disponibles. Los equipos rojo y azul tienen 5 ranuras abiertas, mientras que el verde tiene 1. Se asignan los primeros 8 jugadores (4 en cada uno) a los equipos rojo y azul. Ahora todos los equipos tienen una ranura libre.

1. Las tres ranuras para jugadores restantes se asignan (una para cada uno) a los equipos sin ningún orden en particular.

# Establecimiento de reglas para emparejamientos grandes
<a name="match-design-rulesets-large-rule"></a>

El emparejamiento para emparejamientos grandes se basa principalmente en la estrategia de equilibrio y en las optimizaciones de la latencia por lotes. la mayoría de las reglas personalizadas no están disponibles. Sin embargo, puede incorporar los siguientes tipos de reglas: 
+ Regla que establece un límite estricto en la latencia de los jugadores. Utilice el tipo de regla `latency` con la propiedad `maxLatency`. Consulte la referencia [Latency rule](match-rules-reference-ruletype.md#match-rules-reference-ruletype-latency). A continuación se muestra un ejemplo que establece la latencia máxima del jugador en 200 milisegundos:

  ```
  "rules": [{
          "name": "player-latency",
          "type": "latency",
          "maxLatency": 200
      }],
  ```
+ Regla para agrupar a los jugadores en función de la cercanía de un atributo de jugador específico. Esto no es lo mismo que definir un atributo de equilibrio como parte del algoritmo de emparejamientos grandes, que se centra en formar equipos igualados. Esta regla clasifica los tickets de los emparejamientos en función de la similitud entre los valores de los atributos especificados, como la habilidad de principiante o experto, lo que suele llevar a que los jugadores de los emparejamientos estén muy alineados con respecto al atributo especificado. Utilice el tipo de regla `batchDistance`, identifique un atributo numérico y especifique el rango más amplio que desee permitir. Consulte la referencia [Regla de distancia por lotes](match-rules-reference-ruletype.md#match-rules-reference-ruletype-batchdistance). Este es un ejemplo en el que se exige que los jugadores de un emparejamiento estén separados por un nivel de habilidad entre sí:

  ```
  "rules": [{
          "name": "batch-skill",
          "type": "batchDistance",
          "batchAttribute": "skill",
          "maxDistance": 1
  ```

# Reducción de los requisitos de emparejamientos amplios
<a name="match-design-rulesets-large-relax"></a>

Al igual que con los pequeños emparejamientos, puede usar expansiones para reducir los requisitos de los emparejamientos con el paso del tiempo cuando no sea posible conseguir emparejamientos válidos. Con los emparejamientos amplios, tiene la opción de reducir las reglas de latencia o el recuento de jugadores del equipo. 

Si utiliza la reposición automática de emparejamientos para emparejamientos amplios, evite reducir los recuentos de jugadores del equipo demasiado rápido. FlexMatch comienza a generar solicitudes de reposición solo después de que comience una sesión de juego, que puede que no se lleve a cabo durante varios segundos después de la creación de un emparejamiento. Durante ese tiempo, FlexMatch puede crear varias sesiones de juego nuevas parcialmente completas, especialmente cuando se reducen las reglas de recuento de jugadores. Como resultado, dispondrá de más sesiones de juego de las que necesita y los jugadores se extenderán demasiado entre ellas. La práctica recomendada es proporcionar al primer paso de la expansión del recuento de jugadores un tiempo de espera más largo, lo suficiente para que su sesión de juego comience. Puesto que las solicitudes de reposición tienen mayor prioridad con los emparejamientos amplios, los jugadores entrantes se incluirán en los juegos existentes antes de comenzar un nuevo juego. Es posible que tenga que hacer varias pruebas hasta encontrar el tiempo de espera ideal para su juego.

Aquí tiene un ejemplo que reduce gradualmente el recuento de jugadores del equipo Amarillo con un tiempo de espera inicial más largo. Tenga en cuenta que los tiempos de espera en las expansiones de conjuntos de reglas son absolutos, no compuestos. Por lo tanto, la primera expansión se produce los cinco segundos, y la segunda expansión cinco segundos después, a los diez segundos.

```
"expansions": [{
        "target": "teams[Yellow].minPlayers",
        "steps": [{
            "waitTimeSeconds": 5,
            "value": 8
        }, {
            "waitTimeSeconds": 10,
            "value": 5
        }]
    }]
```

# Tutorial: Creación de un conjunto de reglas de emparejamiento
<a name="match-create-ruleset"></a>

Antes de crear un conjunto de reglas de emparejamiento para el emparejador de Amazon GameLift Servers FlexMatch, le recomendamos comprobar la [sintaxis del conjunto de reglas](match-rules-reference.md). Después de crear un conjunto de reglas con la consola de Amazon GameLift Servers o la AWS Command Line Interface (AWS CLI), no podrá cambiarlo.

Tenga en cuenta que hay una [cuota de servicio](https://console.aws.amazon.com/servicequotas/home/services/gamelift/quotas/) para el número máximo de conjuntos de reglas que puede tener en una región de AWS, por lo que conviene eliminar los conjuntos de reglas que no se utilizan.

**Topics**

------
#### [ Console ]

**Creación de un conjunto de reglas**

1. Abra la consola de Amazon GameLift Servers en [https://console.aws.amazon.com/gamelift/](https://console.aws.amazon.com/gamelift/).

1. Cambie a la región de AWS donde desee crear el conjunto de reglas. Defina conjuntos de reglas en la misma región que la configuración de emparejamiento que los utiliza.

1. En el panel de navegación, elija **FlexMatch**, **Conjuntos de reglas de emparejamiento**.

1. En la página **Conjuntos de reglas de emparejamiento**, elija **Crear conjunto de reglas**.

1. En la página **Crear un conjunto de reglas de emparejamiento**, realice el siguiente procedimiento:

   1. En **Configuración del conjunto de reglas**, en **Nombre**, especifique un nombre descriptivo único que pueda utilizar para identificarlo en una lista o en las tablas de eventos y métricas.

   1. En **Conjunto de reglas**, especifique el conjunto de reglas en JSON. Para obtener información sobre el diseño de un conjunto de reglas, consulte [Diseño de un conjunto de reglas de FlexMatch](match-design-ruleset.md). También puede utilizar uno de los conjuntos de reglas de ejemplo de [Ejemplos de conjuntos de reglas de FlexMatch](match-examples.md).

   1. Elija **Validar** para verificar que la sintaxis del conjunto de reglas sea correcta. No puede editar los conjuntos de reglas una vez creados, por lo que es una buena idea validarlos primero.

   1. En **Etiquetas**, añada etiquetas que le ayuden a administrar recursos de AWS y a realizar un seguimiento de ellos.

1. Seleccione **Crear**. Si la creación se realiza correctamente, podrá utilizar el conjunto de reglas con un emparejador.

------
#### [ AWS CLI ]

**Creación de un conjunto de reglas**

Abra una ventana de línea de comandos y utilice el comando [create-matchmaking-rule-set](https://docs.aws.amazon.com/cli/latest/reference/gamelift/create-matchmaking-rule-set.html).

Este comando de ejemplo crea un sencillo conjunto de reglas de emparejamiento para configurar un equipo. Asegúrese de crear el conjunto de reglas en la misma región de AWS que las configuraciones de emparejamiento que lo utilizan.

```
aws gamelift create-matchmaking-rule-set \
    --name "SampleRuleSet123" \
    --rule-set-body '{"name": "aliens_vs_cowboys", "ruleLanguageVersion": "1.0", "teams": [{"name": "cowboys", "maxPlayers": 8, "minPlayers":  4}]}'
```

Si la solicitud de creación es correcta, Amazon GameLift Servers devuelve un objeto [MatchmakingRuleSet](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_MatchmakingRuleSet.html) que incluye la configuración que haya especificado. Un emparejador puede utilizar ahora el conjunto de reglas nuevo.

------<a name="match-delete-ruleset"></a><a name="match-delete-ruleset-cli"></a>

------
#### [ Console ]

**Eliminación de un conjunto de reglas**

1. Abra la consola de Amazon GameLift Servers en [https://console.aws.amazon.com/gamelift/](https://console.aws.amazon.com/gamelift/).

1. Cambie a la región en la que creó el conjunto de reglas.

1. En el panel de navegación, elija **FlexMatch**, **Conjuntos de reglas de emparejamiento**.

1. En la página **Conjuntos de reglas de emparejamiento**, seleccione el conjunto de reglas que desee eliminar y, a continuación, elija **Eliminar**.

1. En el cuadro de diálogo **Eliminar conjunto de reglas**, elija **Eliminar** para confirmar la eliminación.
**nota**  
Si una configuración de emparejamiento utiliza el conjunto de reglas, Amazon GameLift Servers muestra un mensaje de error (**No se puede eliminar el conjunto de reglas**). Si esto ocurre, cambie la configuración de emparejamiento para utilizar un conjunto de reglas diferente e inténtelo de nuevo. Para saber qué configuraciones de emparejamiento utilizan actualmente un conjunto de reglas, elija el nombre de un conjunto de reglas para ver la página de detalles correspondiente.

------
#### [ AWS CLI ]

**Eliminación de un conjunto de reglas**

Abra una ventana de línea de comandos y utilice el comando [delete-matchmaking-rule-set](https://docs.aws.amazon.com/cli/latest/reference/gamelift/delete-matchmaking-rule-set.html) para eliminar un conjunto de reglas de emparejamiento.

Si una configuración de emparejamiento utiliza el conjunto de reglas, Amazon GameLift Servers devuelve un mensaje de error. Si esto ocurre, cambie la configuración de emparejamiento para utilizar un conjunto de reglas diferente e inténtelo de nuevo. Para obtener una lista de las configuraciones de emparejamiento que utilizan un conjunto de reglas, utilice el comando [describe-matchmaking-configurations](https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-matchmaking-configurations.html) y especifique el nombre del conjunto de reglas.

En este comando de ejemplo, primero se comprueba el uso del conjunto de reglas de emparejamiento y, a continuación, se elimina el conjunto de reglas.

```
aws gamelift describe-matchmaking-rule-sets \
    --rule-set-name "SampleRuleSet123" \
    --limit 10

aws gamelift delete-matchmaking-rule-set \
    --name  "SampleRuleSet123"
```

------

# Ejemplos de conjuntos de reglas de FlexMatch
<a name="match-examples"></a>

Los conjuntos de reglas de FlexMatch pueden cubrir una amplia variedad de situaciones de emparejamiento. Los siguientes ejemplos se ajustan a la estructura de configuración y el lenguaje de expresiones de propiedad de FlexMatch. Copie estos conjuntos de reglas en su totalidad o elija los componentes según sea necesario.

Para obtener más información sobre cómo utilizar las reglas y los conjuntos de reglas de FlexMatch, consulte los siguientes temas:

**nota**  
Cuando evalúe un ticket de emparejamiento que incluya varios jugadores, todos los jugadores de la solicitud deben cumplir los requisitos del emparejamiento.

**Topics**
+ [Ejemplo: Crear dos equipos con jugadores emparejados de manera uniforme](match-examples-1.md)
+ [Ejemplo: Crear equipos desiguales (cazadores contra monstruo)](match-examples-2.md)
+ [Ejemplo: Establecer los requisitos de nivel de equipo y los límites de latencia](match-examples-3.md)
+ [Ejemplo: Usar la ordenación explícita para encontrar los mejores emparejamientos](match-examples-4.md)
+ [Ejemplo: Buscar intersecciones de varios atributos de los jugadores](match-examples-5.md)
+ [Ejemplo: Comparar atributos entre todos los jugadores](match-examples-6.md)
+ [Ejemplo: Crear un emparejamiento amplio](match-examples-7.md)
+ [Ejemplo: Crear un emparejamiento amplio de varios equipos](match-examples-8.md)
+ [Ejemplo: Crear un emparejamiento amplio con jugadores con atributos similares](match-examples-9.md)
+ [Ejemplo: Utilizar una regla compuesta para crear un emparejamiento con jugadores con atributos o selecciones similares](match-examples-10.md)
+ [Ejemplo: Crear una regla que utilice la lista de bloqueados de un jugador](match-examples-11.md)

# Ejemplo: Crear dos equipos con jugadores emparejados de manera uniforme
<a name="match-examples-1"></a>

Este ejemplo ilustra cómo configurar dos equipos de jugadores emparejados de manera uniforme con las siguientes instrucciones. 
+ Cree dos equipos de jugadores.
  + Incluya entre cuatro y ocho jugadores en cada equipo.
  + Los equipos definitivos deben tener el mismo número de jugadores.
+ Incluya el nivel de habilidad de un jugador (si no se proporciona, de manera predeterminada es 10).
+ Elija jugadores en función de si su nivel de habilidad es similar al de otros jugadores. Asegúrese de que la habilidad promedio de los jugadores de ambos equipos esté dentro de 10 puntos entre sí.
+ Si el emparejamiento no se completa rápidamente, relaje el requisito de habilidades de los jugadores para completar un emparejamiento dentro de un tiempo razonable. 
  + Transcurridos 5 segundos, expanda la búsqueda para permitir equipos con habilidades promedio de los jugadores dentro de los 50 puntos. 
  + Transcurridos 15 segundos, expanda la búsqueda para permitir equipos con habilidades promedio de los jugadores dentro de los 100 puntos. 

Notas sobre el uso de este conjunto de reglas: 
+ Este ejemplo permite que los equipos tengan cualquier tamaño entre cuatro y ocho jugadores (aunque deben ser del mismo tamaño). En el caso de los equipos con un rango de tamaños válido, el emparejador hace todo lo posible para emparejar el número máximo de jugadores permitidos.
+ La regla `FairTeamSkill` garantiza que los equipos estén emparejados de manera uniforme según las habilidades de los jugadores. Para evaluar esta regla con cada posible jugador nuevo, FlexMatch prueba a añadir el jugador a un equipo y calcula las medias. Si la regla genera un error, no se agrega el posible jugador al emparejamiento.
+ Puesto que ambos equipos tienen estructuras idénticas, puede optar por crear una sola definición de equipo y establecer la cantidad de equipos en "2". En este caso, si le ha asignado el nombre "extranjeros" al equipo, sus equipos se denominarán "extranjeros\$11" y "extranjeros\$12".

```
{
    "name": "aliens_vs_cowboys",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "skill",
        "type": "number",
        "default": 10
    }],
    "teams": [{
        "name": "cowboys",
        "maxPlayers": 8,
        "minPlayers": 4
    }, {
        "name": "aliens",
        "maxPlayers": 8,
        "minPlayers": 4
    }],
    "rules": [{
        "name": "FairTeamSkill",
        "description": "The average skill of players in each team is within 10 points from the average skill of all players in the match",
        "type": "distance",
        // get skill values for players in each team and average separately to produce list of two numbers
        "measurements": [ "avg(teams[*].players.attributes[skill])" ],
        // get skill values for players in each team, flatten into a single list, and average to produce an overall average
        "referenceValue": "avg(flatten(teams[*].players.attributes[skill]))",
        "maxDistance": 10 // minDistance would achieve the opposite result
    }, {
        "name": "EqualTeamSizes",
        "description": "Only launch a game when the number of players in each team matches, e.g. 4v4, 5v5, 6v6, 7v7, 8v8",
        "type": "comparison",
        "measurements": [ "count(teams[cowboys].players)" ],
        "referenceValue": "count(teams[aliens].players)",
        "operation": "=" // other operations: !=, <, <=, >, >=
    }],
    "expansions": [{
        "target": "rules[FairTeamSkill].maxDistance",
        "steps": [{
            "waitTimeSeconds": 5,
            "value": 50
        }, {
            "waitTimeSeconds": 15,
            "value": 100
        }]
    }]
}
```

# Ejemplo: Crear equipos desiguales (cazadores contra monstruo)
<a name="match-examples-2"></a>

Este ejemplo describe un modo de juego en el que un grupo de jugadores da caza a un único monstruo. Las personas eligen el rol de cazador o de monstruo. Los cazadores especifican el nivel de habilidad mínimo del monstruo al que quieren enfrentarse. El tamaño mínimo del equipo de cazadores puede relajarse a lo largo del tiempo para completar el emparejamiento. Esta situación establece las siguientes instrucciones: 
+ Cree un equipo con cinco cazadores. 
+ Cree otro equipo con un monstruo. 
+ Incluya los siguientes atributos de los jugadores:
  + El nivel de habilidad de un jugador (si no se proporciona, de manera predeterminada es 10).
  + El nivel de habilidad de un monstruo preferido del jugador (si no se proporciona, de manera predeterminada es 10).
  + Si el jugador quiere ser el monstruo (si no se proporciona, de manera predeterminada es 0 o false).
+ Elija un jugador para que sea el monstruo en función de los siguientes criterios:
  + El jugador debe solicitar el rol del monstruo.
  + El jugador debe cumplir o superar el nivel de habilidad más alto preferido por los jugadores que ya se han agregado al equipo de cazadores. 
+ Elija jugadores para el equipo de cazadores en función de los siguientes criterios:
  + Los jugadores que soliciten el rol del monstruo no pueden unirse al equipo de cazadores.
  + Si el rol del monstruo ya se ha asignado, el jugador debe desear un nivel de habilidad de monstruo inferior a la habilidad del monstruo propuesto. 
+ Si un emparejamiento no se completa rápidamente, relaje el tamaño mínimo del equipo de cazadores de la siguiente manera:
  + Después de 30 segundos, permita que el juego comience con tan solo cuatro jugadores en el equipo de cazadores.
  + Después de 60 segundos, permita que el juego comience con tan solo tres personas en el equipo de cazadores.

Notas sobre el uso de este conjunto de reglas: 
+ Al utilizar dos equipos independientes para cazadores y monstruo, puede evaluar la pertenencia según diferentes conjuntos de criterios.

```
{
    "name": "players_vs_monster_5_vs_1",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "skill",
        "type": "number",
        "default": 10
    },{
        "name": "desiredSkillOfMonster",
        "type": "number",
        "default": 10
    },{
        "name": "wantsToBeMonster",
        "type": "number",
        "default": 0
    }],
    "teams": [{
        "name": "players",
        "maxPlayers": 5,
        "minPlayers": 5
    }, {
        "name": "monster",
        "maxPlayers": 1,
        "minPlayers": 1 
    }],
    "rules": [{
        "name": "MonsterSelection",
        "description": "Only users that request playing as monster are assigned to the monster team",
        "type": "comparison",
        "measurements": ["teams[monster].players.attributes[wantsToBeMonster]"],
        "referenceValue": 1, 
        "operation": "="
    },{
        "name": "PlayerSelection",
        "description": "Do not place people who want to be monsters in the players team",
        "type": "comparison",
        "measurements": ["teams[players].players.attributes[wantsToBeMonster]"],
        "referenceValue": 0,
        "operation": "="
    },{
        "name": "MonsterSkill",
        "description": "Monsters must meet the skill requested by all players",
        "type": "comparison",
        "measurements": ["avg(teams[monster].players.attributes[skill])"],
        "referenceValue": "max(teams[players].players.attributes[desiredSkillOfMonster])",
        "operation": ">="
    }],
    "expansions": [{
        "target": "teams[players].minPlayers",
        "steps": [{
            "waitTimeSeconds": 30,
            "value": 4 
        },{
            "waitTimeSeconds": 60,
            "value": 3 
        }]
    }]
}
```

# Ejemplo: Establecer los requisitos de nivel de equipo y los límites de latencia
<a name="match-examples-3"></a>

En este ejemplo se muestra cómo configurar equipos de jugadores y aplicar un conjunto de reglas a cada equipo, en lugar de a cada jugador. En él se utiliza una definición única para crear tres equipos igualmente emparejados. También establece una latencia máxima para todos los jugadores. Los máximos de latencia pueden relajarse con el tiempo para completar el emparejamiento. En este ejemplo se establecen las siguientes instrucciones:
+ Cree tres equipos de jugadores.
  + Incluya entre tres y cinco jugadores en cada equipo.
  + Los equipos definitivos deben contener el mismo o casi el mismo número de jugadores (dentro de uno).
+ Incluya los siguientes atributos de los jugadores:
  + El nivel de habilidad de un jugador (si no se proporciona, de manera predeterminada es 10).
  + Un rol de personaje de jugador (si no se proporciona, de manera predeterminada es "ignorante").
+ Elija jugadores en función de si su nivel de habilidad es similar al de otros jugadores del emparejamiento.
  + Asegúrese de que la habilidad promedio de los jugadores de cada equipo esté dentro de 10 puntos entre sí. 
+ Limite los equipos al siguiente número de personajes de "médicos":
  + Un emparejamiento completo puede tener un máximo de cinco médicos.
+ Solo empareje los jugadores que cuenten con una latencia de 50 milisegundos o menos.
+ Si un emparejamiento no se completa rápidamente, relaje el requisito de latencia de los jugadores de la siguiente manera: 
  + Transcurridos 10 segundos, permita valores de latencia de los jugadores de hasta 100 ms.
  + Transcurridos 20 segundos, permita valores de latencia de los jugadores de hasta 150 ms. 

Notas sobre el uso de este conjunto de reglas: 
+ El conjunto de reglas garantiza que los equipos estén emparejados de manera uniforme según las habilidades de los jugadores. Para evaluar la regla `FairTeamSkill`, FlexMatch añade provisionalmente el posible jugador a un equipo y calcula la habilidad media de los jugadores del equipo. A continuación, la compara con las habilidades medias de los jugadores de ambos equipos. Si la regla genera un error, no se agrega el posible jugador al emparejamiento.
+ Los requisitos del equipo y del nivel de emparejamiento (número total de médicos) se logran mediante una regla de colección. Este tipo de regla toma una lista de atributos de personajes para todos los jugadores y la compara con los recuentos máximos. Utilice `flatten` para crear una lista de todos los jugadores en todos los equipos.
+ Cuando realice la evaluación en función de la latencia, tenga en cuenta lo siguiente: 
  + Se proporcionan datos de latencia en la solicitud de emparejamiento como parte del objeto Player. No se trata de un atributo del jugador, por lo que no necesita enumerarse como tal. Para obtener mediciones de latencia precisas, utilice señalizadores de pings de UDP de Amazon GameLift Servers. Estos puntos de conexión le permiten medir la latencia real de la red UDP entre los dispositivos de los jugadores y cada una de las posibles ubicaciones de alojamiento, de forma que pueda tomar decisiones de ubicación más precisas que utilizando pings de ICMP. Para obtener más información sobre el uso de señalizadores de pings de UDP para medir la latencia, consulte [Señalizadores de pings de UDP](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/reference-udp-ping-beacons.html).
  + El emparejador evalúa la latencia por región. Cualquier región con una latencia superior al máximo se ignora. Para ser aceptado para un emparejamiento, un jugador debe tener al menos una región con una latencia por debajo del máximo.
  + Si en una solicitud de emparejamiento no se proporcionan los datos de latencia de uno o varios jugadores, la solicitud se rechaza para todos los emparejamientos.

```
{
    "name": "three_team_game",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "skill",
        "type": "number",
        "default": 10
    },{
        "name": "character",
        "type": "string_list",
        "default": [ "peasant" ]
    }],
    "teams": [{
        "name": "trio",
        "minPlayers": 3,
        "maxPlayers": 5,
        "quantity": 3
    }],
    "rules": [{
        "name": "FairTeamSkill",
        "description": "The average skill of players in each team is within 10 points from the average skill of players in the match",
        "type": "distance",
        // get players for each team, and average separately to produce list of 3
        "measurements": [ "avg(teams[*].players.attributes[skill])" ],
        // get players for each team, flatten into a single list, and average to produce overall average
        "referenceValue": "avg(flatten(teams[*].players.attributes[skill]))",
        "maxDistance": 10 // minDistance would achieve the opposite result
    }, {
        "name": "CloseTeamSizes",
        "description": "Only launch a game when the team sizes are within 1 of each other.  e.g. 3 v 3 v 4 is okay, but not 3 v 5 v 5",
        "type": "distance",
        "measurements": [ "max(count(teams[*].players))"],
        "referenceValue": "min(count(teams[*].players))",
        "maxDistance": 1
    }, {
        "name": "OverallMedicLimit",
        "description": "Don't allow more than 5 medics in the game",
        "type": "collection",
        // This is similar to above, but the flatten flattens everything into a single
        // list of characters in the game.
        "measurements": [ "flatten(teams[*].players.attributes[character])"],
        "operation": "contains",
        "referenceValue": "medic",
        "maxCount": 5
    }, {
        "name": "FastConnection",
        "description": "Prefer matches with fast player connections first",
        "type": "latency",
        "maxLatency": 50
    }],
    "expansions": [{
        "target": "rules[FastConnection].maxLatency",
        "steps": [{
            "waitTimeSeconds": 10,
            "value": 100
        }, {
            "waitTimeSeconds": 20,
            "value": 150
        }]
    }]
}
```

# Ejemplo: Usar la ordenación explícita para encontrar los mejores emparejamientos
<a name="match-examples-4"></a>

Este ejemplo configura un emparejamiento sencillo con dos equipos de tres jugadores. Muestra cómo utilizar reglas de ordenación explícitas para encontrar los mejores emparejamientos posibles lo más rápido posible. Estas reglas ordenan todos los tickets de emparejamiento activos para crear los mejores emparejamientos según determinados requisitos clave. Este ejemplo se implementa con las siguientes instrucciones:
+ Cree dos equipos de jugadores.
+ Incluya exactamente tres jugadores en cada equipo.
+ Incluya los siguientes atributos de los jugadores:
  + Nivel de experiencia (si no se proporciona, de manera predeterminada es 50).
  + Modos de juego preferidos (puede enumerar varios valores) (si no se proporcionan, de manera predeterminada son "coop" y "deathmatch").
  + Mapas de juego preferidos, se incluyen el nombre del mapa y la ponderación de preferencias (si no se proporciona, de manera predeterminada es `"defaultMap"` con un peso de 100).
+ Configure la ordenación previa:
  + Ordene los jugadores en función de su preferencia por el mismo mapa de juego que el jugador de referencia. Los jugadores pueden tener varios mapas de juego favoritos, por lo que este ejemplo utiliza un valor de preferencia. 
  + Ordene los jugadores según el grado de coincidencia de su nivel de experiencia con el del jugador de referencia. Con esta ordenación, todos los jugadores de todos los equipos tendrían niveles de experiencia lo más similares posible. 
+ Todos los jugadores de todos los equipos deben haber seleccionado al menos un modo de juego en común.
+ Todos los jugadores de todos los equipos deben haber seleccionado al menos un mapa de juego en común. 

Notas sobre el uso de este conjunto de reglas: 
+ La ordenación de mapa de juego utiliza una ordenación absoluta que compara el valor del atributo mapPreference. Puesto que es la primera del conjunto de reglas, se realiza esta ordenación en primer lugar. 
+ La ordenación por experiencia utiliza una ordenación por distancia para comparar el nivel de habilidades de un posible jugador en relación con las habilidades del jugador de referencia. 
+ Las ordenaciones se realizan según la disposición en la que aparecen en un conjunto de reglas. En esta situación, se ordena a los jugadores por preferencia de mapa de juego y, a continuación, por el nivel de experiencia. 

```
{
    "name": "multi_map_game",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "experience",
        "type": "number",
        "default": 50
    }, {
        "name": "gameMode",
        "type": "string_list",
        "default": [ "deathmatch", "coop" ]
    }, {
        "name": "mapPreference",
        "type": "string_number_map",
        "default": { "defaultMap": 100 }
    }, {
        "name": "acceptableMaps",
        "type": "string_list",
        "default": [ "defaultMap" ]
    }],
    "teams": [{
        "name": "red",
        "maxPlayers": 3,
        "minPlayers": 3
    }, {
        "name": "blue",
        "maxPlayers": 3,
        "minPlayers": 3
    }],
    "rules": [{
        // We placed this rule first since we want to prioritize players preferring the same map
        "name": "MapPreference",
        "description": "Favor grouping players that have the highest map preference aligned with the anchor's favorite",
        // This rule is just for sorting potential matches.  We sort by the absolute value of a field.
        "type": "absoluteSort",
        // Highest values go first
        "sortDirection": "descending",
        // Sort is based on the mapPreference attribute.
        "sortAttribute": "mapPreference",
        // We find the key in the anchor's mapPreference attribute that has the highest value.
        // That's the key that we use for all players when sorting.
        "mapKey": "maxValue"
    }, {
        // This rule is second because any tie-breakers should be ordered by similar experience values
        "name": "ExperienceAffinity",
        "description": "Favor players with similar experience",
        // This rule is just for sorting potential matches.  We sort by the distance from the anchor.
        "type": "distanceSort",
        // Lowest distance goes first
        "sortDirection": "ascending",
        "sortAttribute": "experience"
    }, {
        "name": "SharedMode",
        "description": "The players must have at least one game mode in common",
        "type": "collection",
        "operation": "intersection",
        "measurements": [ "flatten(teams[*].players.attributes[gameMode])"],
        "minCount": 1
    }, {
        "name": "MapOverlap",
        "description": "The players must have at least one map in common",
        "type": "collection",
        "operation": "intersection",
        "measurements": [ "flatten(teams[*].players.attributes[acceptableMaps])"],
        "minCount": 1
    }]
}
```

# Ejemplo: Buscar intersecciones de varios atributos de los jugadores
<a name="match-examples-5"></a>

Este ejemplo ilustra cómo utilizar una regla de colección para encontrar intersecciones en dos o más atributos de los jugadores. Cuando trabaje con colecciones, puede utilizar la operación `intersection` para un único atributo y la operación `reference_intersection_count` para varios atributos. 

Para ilustrar este enfoque, este ejemplo evalúa los jugadores de un emparejamiento en función de sus personajes preferidos. El juego de ejemplo es un estilo free-for-all «» en el que todos los jugadores de una partida son oponentes. A cada jugador se le pide que (1) elija un personaje para sí mismo, y (2) elija los personajes contra los que desea jugar. Necesitamos una regla que garantice que cada jugador de un emparejamiento utiliza un personaje que está la lista de oponentes preferidos de todos los demás jugadores. 

El conjunto de reglas del ejemplo describe un emparejamiento con las siguientes características: 
+ Estructura del equipo: un equipo de cinco jugadores
+ Atributos de los jugadores: 
  + *myCharacter*: el personaje elegido por el jugador.
  + *preferredOpponents*: lista de personajes contra los que desea jugar el jugador.
+ Reglas de emparejamiento: un posible emparejamiento es aceptable si cada uno de los personajes en uso se encuentra en la lista de oponentes preferidos de cada jugador. 

Para implementar la regla de emparejamiento, en este ejemplo se utiliza una regla de colección con los siguientes valores de propiedades:
+ Operación: utiliza la operación para evaluar el grado de coincidencia de cada lista de cadenas del valor de medición con la lista de cadenas del valor de referencia. 
+ Medición: utiliza la expresión de propiedad `flatten` para crear una lista de listas de cadenas, cada una de las cuales contiene el valor del atributo *myCharacter* de un jugador. 
+ Valor de referencia: utiliza la expresión de propiedad `set_intersection` para crear una lista de cadenas de todos los valores del atributo *preferredOpponents* que son comunes a cada jugador del emparejamiento.
+ Restricciones: se establece en 1 para garantizar que el personaje elegido por cada jugador (una lista de cadenas en la medición) coincide al menos con uno de los oponentes preferidos comunes a todos los jugadores (una cadena en el valor de referencia). 
+ Expansión: si no se consigue realizar un emparejamiento en 15 segundos, flexibilizar el requisito mínimo de intersección. 

El flujo de proceso para esta regla es el siguiente:

1. Se añade un jugador al posible emparejamiento. El valor de referencia (una lista de cadenas) se vuelve a calcular para incluir las intersecciones con la lista de oponentes preferidos del nuevo jugador. El valor de la medición (una lista de listas de cadenas) se vuelve a calcular para añadir el personaje elegido del jugador nuevo como una lista de cadenas nueva.

1. Amazon GameLift Servers verifica que cada lista de cadenas del valor de medición (los personajes elegidos por los jugadores) coincide al menos con una cadena del valor de referencia (los oponentes preferidos de los jugadores). Dado que en este ejemplo cada lista de cadenas de la medición contiene solo un valor, la intersección es 0 o 1.

1. Si cualquier lista de cadenas de la medición no tiene un valor que coincide con la lista de cadenas de valores de referencia, la regla no se cumple y el jugador nuevo se elimina del posible emparejamiento.

1. Si no se consigue un emparejamiento en un plazo de 15 segundos, se elimina el requisito de emparejamiento con el contrincante para rellenar el resto de ranuras de jugadores en el emparejamiento.

```
{
    "name": "preferred_characters",
    "ruleLanguageVersion": "1.0",

    "playerAttributes": [{
        "name": "myCharacter",
        "type": "string_list"
    }, {
        "name": "preferredOpponents",
        "type": "string_list"
    }],

    "teams": [{
        "name": "red",
        "minPlayers": 5,
        "maxPlayers": 5
    }],

    "rules": [{
        "description": "Make sure that all players in the match are using a character that is on all other players' preferred opponents list.",
        "name": "OpponentMatch",
        "type": "collection",
        "operation": "reference_intersection_count",
        "measurements": ["flatten(teams[*].players.attributes[myCharacter])"],
        "referenceValue": "set_intersection(flatten(teams[*].players.attributes[preferredOpponents]))",
        "minCount":1
    }],
    "expansions": [{
        "target": "rules[OpponentMatch].minCount",
        "steps": [{
            "waitTimeSeconds": 15,
            "value": 0
        }]
    }]
}
```

# Ejemplo: Comparar atributos entre todos los jugadores
<a name="match-examples-6"></a>

Este ejemplo ilustra cómo comparar los atributos de los jugadores entre un grupo de jugadores. 

El conjunto de reglas del ejemplo describe un emparejamiento con las siguientes características: 
+ Estructura del equipo: dos equipos de un solo jugador
+ Atributos de los jugadores: 
  + *gameMode*: tipo de juego elegido por el jugador (si no se proporciona, el valor predeterminado es "turn-based" (por turnos)).
  + *gameMap*: mundo del juego elegido por el jugador (si no se proporciona, el valor predeterminado es 1).
  + *character* (personaje): personaje elegido por el jugador (si no hay ningún valor predeterminado, significa que los jugadores deben especificar un personaje).
+ Reglas de emparejamiento: los jugadores deben emparejarse de acuerdo con los requisitos siguientes: 
  + Los jugadores deben elegir el mismo modo de juego.
  + Los jugadores deben elegir el mismo mapa de juego.
  + Los jugadores deben elegir personajes distintos.

Notas sobre el uso de este conjunto de reglas: 
+ Para implementar la regla de emparejamiento, en este ejemplo se utilizan reglas de comparación para comprobar todos los valores de los atributos de los jugadores. Para el modo y el mapa de juego, la regla verifica que los valores sean los mismos. Para el personaje, la regla verifica que los valores sean distintos. 
+ En este ejemplo se utiliza una definición de jugador con una propiedad de cantidad para crear ambos equipos de jugadores. Al equipo se le asignan los siguientes nombres: "jugador\$11" y "jugador\$12".

```
{
    "name": "",
    "ruleLanguageVersion": "1.0",

    "playerAttributes": [{
        "name": "gameMode",
        "type": "string",
        "default": "turn-based"
    }, {
        "name": "gameMap",
        "type": "number",
        "default": 1
    }, {
        "name": "character",
        "type": "number"
    }],

    "teams": [{
        "name": "player",
        "minPlayers": 1,
        "maxPlayers": 1,
        "quantity": 2
    }],

    "rules": [{
        "name": "SameGameMode",
        "description": "Only match players when they choose the same game type",
        "type": "comparison",
        "operation": "=",
        "measurements": ["flatten(teams[*].players.attributes[gameMode])"]
    }, {
        "name": "SameGameMap",
        "description": "Only match players when they're in the same map",
        "type": "comparison",
        "operation": "=",
        "measurements": ["flatten(teams[*].players.attributes[gameMap])"]
    }, {
        "name": "DifferentCharacter",
        "description": "Only match players when they're using different characters",
        "type": "comparison",
        "operation": "!=",
        "measurements": ["flatten(teams[*].players.attributes[character])"]
    }]
}
```

# Ejemplo: Crear un emparejamiento amplio
<a name="match-examples-7"></a>

En este ejemplo se muestra cómo configurar un conjunto de reglas para emparejamientos que pueden superar los 40 jugadores. Cuando un conjunto de reglas describe equipos con un recuento de maxPlayer total superior a 40, se procesa como un emparejamiento de gran tamaño. Obtenga más información en [Diseño de un conjunto de reglas de emparejamiento amplio de FlexMatch](match-design-rulesets-large.md). 

El conjunto de reglas de ejemplo crea un emparejamiento mediante las siguientes instrucciones: 
+ Cree un equipo con un máximo de 200 jugadores con un requisito mínimo de 175 jugadores. 
+ Criterios de equilibrio: seleccione jugadores en función del nivel de habilidades similar. Todos los jugadores deben informar sobre su nivel de habilidades para realizar el emparejamiento.
+ Preferencia por lotes: agrupe los jugadores por criterios de equilibrio similares cuando cree los emparejamientos. 
+ Reglas de latencia: configure el máximo aceptable de latencia de jugadores de 150 milisegundos.
+ Si el emparejamiento no se completa rápidamente, suavice los requisitos para completar un emparejamiento dentro de un tiempo razonable. 
  + Después de 10 segundos, acepte un equipo con 150 jugadores. 
  + Después de 12 segundos, aumente el máximo aceptable de latencia a 200 milisegundos. 
  + Después de 15 segundos, acepte un equipo con 100 jugadores.

Notas sobre el uso de este conjunto de reglas: 
+ Puesto que el algoritmo utiliza la preferencia por lotes "largest population" (mayor población), los jugadores se ordenan primero según los criterios de equilibrio. Como resultado, los emparejamientos suelen estar más completos y contener jugadores con habilidades más similares. Todos los jugadores cumplirán los requisitos de latencia aceptable, pero es posible que no obtengan la mejor latencia posible para su ubicación.
+ La estrategia de algoritmo que se utiliza en este conjunto de reglas, "largest population" (mayor población), es la configuración predeterminada. Para utilizar el valor predeterminado, puede optar por omitir la configuración.
+ Si ha habilitado la reposición de emparejamiento, no suavice los requisitos de número de jugadores demasiado rápido. De ser así, podría acabar con demasiadas sesiones de juego parcialmente completas. Obtenga más información en [Reducción de los requisitos de emparejamientos amplios](match-design-rulesets-large-relax.md).

```
{
    "name": "free-for-all",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "skill",
        "type": "number"
    }],
    "algorithm": {
        "balancedAttribute": "skill",
        "strategy": "balanced",
        "batchingPreference": "largestPopulation"
    },
    "teams": [{
        "name": "Marauders",
        "maxPlayers": 200,
        "minPlayers": 175
    }],
    "rules": [{
        "name": "low-latency",
        "description": "Sets maximum acceptable latency",
        "type": "latency",
        "maxLatency": 150
    }],
    "expansions": [{
        "target": "rules[low-latency].maxLatency",
        "steps": [{
            "waitTimeSeconds": 12,
            "value": 200
        }],
    }, {
        "target": "teams[Marauders].minPlayers",
        "steps": [{
            "waitTimeSeconds": 10,
            "value": 150
        }, {
            "waitTimeSeconds": 15,
            "value": 100
        }]
    }]
}
```

# Ejemplo: Crear un emparejamiento amplio de varios equipos
<a name="match-examples-8"></a>

En este ejemplo se muestra cómo configurar un conjunto de reglas para emparejamientos con varios equipos que pueden superar los 40 jugadores. En él se explica cómo crear varios equipos idénticos con una definición y cómo se pueblan los equipos con un tamaño asimétrico durante la creación del emparejamiento.

El conjunto de reglas de ejemplo crea un emparejamiento mediante las siguientes instrucciones: 
+ Cree diez equipos de "cazadores" idénticos con un máximo de 15 jugadores y un equipo de "monstruos" con exactamente 5 jugadores. 
+ Criterios de equilibrio: seleccione jugadores en función del número de monstruos matados. Si los jugadores no informan del número de muertes, utilice el valor predeterminado de 5.
+ Preferencia por lotes: agrupe los jugadores en función de las regiones en las que informan de la latencia de jugador más rápida. 
+ Regla de latencia: establece un máximo de latencia de jugadores aceptable de 200 milisegundos. 
+ Si el emparejamiento no se completa rápidamente, suavice los requisitos para completar un emparejamiento dentro de un tiempo razonable. 
  + Después de 15 segundos, acepte los equipos con 10 jugadores. 
  + Después de 20 segundos, acepte los equipos con 8 jugadores. 

Notas sobre el uso de este conjunto de reglas: 
+ Este conjunto de reglas define a los equipos que pueden albergar hasta 155 jugadores, lo que los convierte en un emparejamiento de gran tamaño. (10 x 15 cazadores \$1 5 monstruos = 155)
+ Puesto que el algoritmo utiliza la preferencia por lotes de "región más rápida", los jugadores suelen colocarse en regiones en las que informan de una latencia más rápida y no en regiones en las que informan de una latencia alta (pero aceptable). Al mismo tiempo, es probable que los emparejamientos tengan menos jugadores y que los criterios de equilibrio (número de habilidades de los monstruos) varíen de forma más amplia.
+ Cuando se define una expansión para una definición de varios equipos (cantidad > 1), la expansión se aplica a todos los equipos creados con esa definición. Por lo tanto, si se reduce la configuración de jugadores mínimos del equipo de cazadores, los diez equipos de cazadores se verán afectados de igual manera.
+ Puesto que este conjunto de reglas está optimizado para minimizar la latencia de los jugadores, la regla de latencia funciona como un cajón para excluir a los jugadores que no tienen opciones de conexión aceptables. No tenemos que reducir este requisito.
+ A continuación se explica cómo FlexMatch realiza los emparejamientos para este conjunto de reglas antes de que las expansiones surtan efecto.
  + Ningún equipo ha alcanzado aún el recuento de minPlayers. Los equipos de cazadores cuentan con 15 ranuras abiertas, mientras que el equipo de monstruos dispone de 5. 
    + Se asignan los primeros 100 jugadores (10 en cada uno) en los diez equipos de cazadores.
    + Los siguientes 22 jugadores se asignarán de forma secuencial (2 en cada uno) en los equipos de cazadores y de monstruos.
  + Los equipos de cazadores alcanzaron el recuento de minPlayers de 12 jugadores cada uno. El equipo de monstruos dispone de dos jugadores y no ha alcanzado el recuento de minPlayers.
    + Los siguientes tres jugadores se asignan al equipo de monstruos.
  + Todos los equipos han alcanzado el recuento de minPlayers. Los equipos de cazadores tienen tres ranuras abiertas cada uno. El equipo de monstruos está completo.
    + Los últimos 30 jugadores se asignan de forma secuencial a los equipos de cazadores, lo que garantiza que todos los equipos de cazadores tienen casi el mismo tamaño (un jugador más o menos).
+ Si ha habilitado la reposición para emparejamientos creados con este conjunto de reglas, no reduzca los requisitos de número de jugadores demasiado rápido. De ser así, podría acabar con demasiadas sesiones de juego parcialmente completas. Obtenga más información en [Reducción de los requisitos de emparejamientos amplios](match-design-rulesets-large-relax.md).

```
{
    "name": "monster-hunters",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "monster-kills",
        "type": "number",
        "default": 5
    }],
    "algorithm": {
        "balancedAttribute": "monster-kills",
        "strategy": "balanced",
        "batchingPreference": "fastestRegion"
    },
    "teams": [{
        "name": "Monsters",
        "maxPlayers": 5,
        "minPlayers": 5
    }, {
        "name": "Hunters",
        "maxPlayers": 15,
        "minPlayers": 12,
        "quantity": 10
    }],
    "rules": [{
        "name": "latency-catchall",
        "description": "Sets maximum acceptable latency",
        "type": "latency",
        "maxLatency": 150
    }],
    "expansions": [{
        "target": "teams[Hunters].minPlayers",
        "steps": [{
            "waitTimeSeconds": 15,
            "value": 10
        }, {
            "waitTimeSeconds": 20,
            "value": 8
        }]
    }]
}
```

# Ejemplo: Crear un emparejamiento amplio con jugadores con atributos similares
<a name="match-examples-9"></a>

En este ejemplo se muestra cómo configurar un conjunto de reglas para emparejamientos con dos equipos que utilizan `batchDistance`. En el ejemplo: 
+ La regla `SimilarLeague` garantiza que todos los jugadores de un emparejamiento tengan una `league` dentro de otros dos jugadores. 
+ La regla `SimilarSkill` garantiza que todos los jugadores de un emparejamiento tengan una `skill` dentro de otros diez jugadores Si un jugador ha estado esperando 10 segundos, la distancia se amplía a 20. Si un jugador ha estado esperando 20 segundos, la distancia se amplía a 40. 
+ La regla `SameMap` garantiza que todos los jugadores de un emparejamiento hayan solicitado el mismo `map`. 
+ La regla `SameMode` garantiza que todos los jugadores de un emparejamiento hayan solicitado el mismo `mode`. 

```
{
    "ruleLanguageVersion": "1.0",
    "teams": [{
        "name": "red",
        "minPlayers": 100,
        "maxPlayers": 100
    }, {
        "name": "blue",
        "minPlayers": 100,
        "maxPlayers": 100
    }],
    "algorithm": {
        "strategy":"balanced",
        "balancedAttribute": "skill",
        "batchingPreference":"fastestRegion"
    },
    "playerAttributes": [{
        "name": "league",
        "type": "number"
    },{
        "name": "skill",
        "type": "number"
    },{
        "name": "map",
        "type": "string"
    },{
        "name": "mode",
        "type": "string"
    }],
    "rules": [{
        "name": "SimilarLeague",
        "type": "batchDistance",
        "batchAttribute": "league",
        "maxDistance": 2
    }, {
        "name": "SimilarSkill",
        "type": "batchDistance",
        "batchAttribute": "skill",
        "maxDistance": 10
    }, {
        "name": "SameMap",
        "type": "batchDistance",
        "batchAttribute": "map"
    }, {
        "name": "SameMode",
        "type": "batchDistance",
        "batchAttribute": "mode"
    }],
    "expansions": [{
        "target": "rules[SimilarSkill].maxDistance",
        "steps": [{
            "waitTimeSeconds": 10,
            "value": 20
        }, {
            "waitTimeSeconds": 20,
            "value": 40
        }]
    }]
}
```

# Ejemplo: Utilizar una regla compuesta para crear un emparejamiento con jugadores con atributos o selecciones similares
<a name="match-examples-10"></a>

En este ejemplo se muestra cómo configurar un conjunto de reglas para emparejamientos con dos equipos que utilizan `compound`. En el ejemplo: 
+ La regla `SimilarLeagueDistance` garantiza que todos los jugadores de un emparejamiento tengan una `league` dentro de otros dos jugadores. 
+ La regla `SimilarSkillDistance` garantiza que todos los jugadores de un emparejamiento tengan una `skill` dentro de otros diez jugadores Si un jugador ha estado esperando 10 segundos, la distancia se amplía a 20. Si un jugador ha estado esperando 20 segundos, la distancia se amplía a 40. 
+ La regla `SameMapComparison` garantiza que todos los jugadores de un emparejamiento hayan solicitado el mismo `map`. 
+ La regla `SameModeComparison` garantiza que todos los jugadores de un emparejamiento hayan solicitado el mismo `mode`. 
+ La regla `CompoundRuleMatchmaker` garantiza un emparejamiento si se cumple al menos una de las siguientes condiciones: 
  + Los jugadores de un emparejamiento han solicitado el mismo `map` y el mismo `mode`.
  + Los jugadores de un emparejamiento tienen atributos `skill` y `league` comparables.

```
{
    "ruleLanguageVersion": "1.0",
    "teams": [{
        "name": "red",
        "minPlayers": 10,
        "maxPlayers": 20
    }, {
        "name": "blue",
        "minPlayers": 10,
        "maxPlayers": 20
    }],
    "algorithm": {
        "strategy":"balanced",
        "balancedAttribute": "skill",
        "batchingPreference":"fastestRegion"
    },
    "playerAttributes": [{
        "name": "league",
        "type": "number"
    },{
        "name": "skill",
        "type": "number"
    },{
        "name": "map",
        "type": "string"
    },{
        "name": "mode",
        "type": "string"
    }],
    "rules": [{
        "name": "SimilarLeagueDistance",
        "type": "distance",
        "measurements": ["max(flatten(teams[*].players.attributes[league]))"],
        "referenceValue": "min(flatten(teams[*].players.attributes[league]))",
        "maxDistance": 2
    }, {
        "name": "SimilarSkillDistance",
        "type": "distance",
        "measurements": ["max(flatten(teams[*].players.attributes[skill]))"],
        "referenceValue": "min(flatten(teams[*].players.attributes[skill]))",
        "maxDistance": 10
    }, {
        "name": "SameMapComparison",
        "type": "comparison",
        "operation": "=",
        "measurements": ["flatten(teams[*].players.attributes[map])"]
    }, {
        "name": "SameModeComparison",
        "type": "comparison",
        "operation": "=",
        "measurements": ["flatten(teams[*].players.attributes[mode])"]
    }, {
        "name": "CompoundRuleMatchmaker",
        "type": "compound",
        "statement": "or(and(SameMapComparison, SameModeComparison), and(SimilarSkillDistance, SimilarLeagueDistance))"
    }],
    "expansions": [{
        "target": "rules[SimilarSkillDistance].maxDistance",
        "steps": [{
            "waitTimeSeconds": 10,
            "value": 20
        }, {
            "waitTimeSeconds": 20,
            "value": 40
        }]
    }]
}
```

# Ejemplo: Crear una regla que utilice la lista de bloqueados de un jugador
<a name="match-examples-11"></a>

Este ejemplo muestra un conjunto de reglas que permite a los jugadores evitar el emparejamiento con otros jugadores. Los jugadores pueden crear una lista de bloqueados, que el emparejador evalúa durante la selección del jugador para un emparejamiento. Para obtener más información sobre cómo añadir una lista de bloqueados o una característica de lista de evitación, consulte el blog de [AWS para videojuegos](https://aws.amazon.com/blogs/gametech/category/game-development/amazon-gamelift/).

En este ejemplo se establecen las siguientes instrucciones:
+ Cree dos equipos de exactamente cinco jugadores.
+ Incluye la lista de bloqueados de un jugador, que es una lista de jugadores IDs (hasta 100).
+ Compara a todos los jugadores con la lista de bloqueados de cada jugador y rechaza una partida propuesta si IDs encuentras algún jugador bloqueado.

Notas sobre el uso de este conjunto de reglas: 
+ Al evaluar a un nuevo jugador para añadirlo a un emparejamiento propuesto (o para cubrir una plaza en un emparejamiento ya existente), es posible que el jugador sea rechazado por alguna de las siguientes razones: 
  + Si el nuevo jugador está en la lista de bloqueados de algún jugador que ya esté seleccionado para el emparejamiento. 
  + Si los jugadores que ya están seleccionados en el emparejamiento están en la lista de bloqueados del nuevo jugador.
+ Como se muestra, este conjunto de reglas impide emparejar a un jugador con cualquier jugador de su lista de bloqueados. Puede cambiar este requisito por una lista de preferencias (también llamada lista de “evitación”) añadiendo una expansión de reglas y aumentando el valor `maxCount`.

```
{
    "name": "Player Block List",
    "ruleLanguageVersion": "1.0",
    "teams": [{
        "maxPlayers": 5,
        "minPlayers": 5,
        "name": "red"
    }, {
        "maxPlayers": 5,
        "minPlayers": 5,
        "name": "blue"
    }],
    "playerAttributes": [{
        "name": "BlockList",
        "type": "string_list",
        "default": []
    }],
    "rules": [{
        "name": "PlayerIdNotInBlockList",
        "type": "collection",
        "operation": "reference_intersection_count",
        "measurements": "flatten(teams[*].players.attributes[BlockList])",
        "referenceValue": "flatten(teams[*].players[playerId])",
        "maxCount": 0
    }]
}
```