Post by mota420 on Sept 12, 2013 13:49:40 GMT -6
Este es un post de Hi-RezErez en reddit traducido para ustedes por nuestro staff. Para ver el post original click aqui.
Sistema de creación de partidas en Smite
Meta: la meta del sistema de algoritmos encargado de crear las partidas en Smite es crear partidas balanceadas por Elo (ranking), habilidades del jugador y nivel de cuenta (1..30)
El sistema almacena la información de Elo y habilidades diferentes para cada uno de los modos de juego casuales; Conquest, Arena, Joust, Assault, y MOTD. Además existen Elos separados para cada uno de los modos de juego competitivos (ranked). Solo los ranked muestran dicho ranking.
El Sistema de habilidades Elo esta basado en algoritmos de Elo y de habilidades reales provenientes de Microsoft Research (http://research.microsoft.com/en-us/projects/trueskill/details.aspx). Para Smite realizamos las siguientes modificaciones:
-Solo guardamos información de las habilidades del jugador (no por cada dios), debido a que el sistema de matchmaking no puede saber de forma anticipada que dios usaras.
-Los jugadores a nivel 10 o inferior ven reducido su Elo “oficial” por el sistema en proporción a que tan nuevos son en el juego
-Después de que una partida finaliza, el sistema analiza el KDA (Kills, Deaths, Assist), oro, y nivel alcanzado en el juego (1..20). Si los niveles de un jugador son extremadamente diferentes al resto del equipo (para bien o para mal), entonces su Elo es modificado adecuadamente. Esto permite ajustar positivamente a quienes sacan la partida adelante, y negativamente quienes no contribuyen en nada.
-Si un jugador deja la partida, o no escoge un dios en el lobby, el Elo se calcula como si el jugador hubiese causado la perdida. Si se desconectan jugadores en ambos equipos, ambos verán reducido su Elo.
Matchmaking: En Smite las partidas se organizan en base a un tiempo de espera. El siguiente algoritmo describe una partida 5vs5 (10 jugadores en total), pero se aplica una lógica similar a 3vs3 y 1vs1
El tiempo llega a cero y las invitaciones son enviadas.
El sistema crea un “pozo” de jugadores disponibles basado en las invitaciones aceptadas. Si en el total de las partidas no alcanzan todos los jugadores, el sistema dejara fuera al último jugador en entrar. Por ejemplo, si 214 personas están listas para conquest, entonces 4 no podrán entrar en las partidas y el sistema intentara hacer que sean 4 personas que entraron a la cola de espera a último segundo.
Party Request are enforced. (no logro traducir esto, según mi entender quiere decir algo como; se ejecutan las peticiones de las partys)
El Elo y nivel de la party es promediado en un numero para el matchmaking. No tenemos restricciones, así que un jugador extremadamente bueno puede estar en party con uno muy malo. Esto pasa frecuentemente.
Los jugadores nuevos (nivel 1 a 6) son procesados separadamente cuando es posible para formar solo partidas de noobs.
After noobs are done, if there are enough people in the queue the group is split into 2 or 3 sub-groups by player level. A typical split would have levels 7..19 in one group and 20..30 in another group.
Despues de que estan listas las partidas de jugadores nuevos, si hay suficientes jugadores en la lista el grupo es separado en 2 o 3 sub-grupos según el nivel del jugador. Una separación típica podría tener jugadores de nivel 7...19 en un grupo y 20..30 en el otro.
Para cada sub-grupo, los jugadores son ordenados por Elo.
El sistema trabaja con las partys intentando hacer que siempre jueguen party contra party. Esto además minimiza el número de jugadores solitarios que deben jugar en partidas con partys.
Entonces prioriza las siguientes conformaciones de party:
3 y 2 vs 3 y 2
2, 2, y 1 vs 2, 2, y 1
2, 1, 1, 1 vs 2, 1, 1, 1
Todos solos vs todos solos
En este momento más de la mitad de las partidas tienen al menos una party. Nuestros datos indican que la mayor causa de partidas frustrantes son las partys mal conformadas o mal ubicadas.
Para ordenar las partidas, el sistema revisa a los jugadores de arriba a abajo según su Elo, tomando a los jugadores con mayor Elo primero para hacer un grupo de 10 jugadores en total.
Una vez que los 10 jugadores para una partida son seleccionados, el sistema exhaustivamente busca todas las combinaciones posibles sobre quien quedara en cada lado, para así encontrar la combinación en que la suma de los Elos de cada lado sea lo más similar posible. Entonces esta partida esta lista.
Hay otras sutilezas y casos extraños pueden suceder, pero es demasiado complejo como para abarcarlo en una explicación general
Los dos grandes problemas que causan una mala partida son las siguientes:
1. Una party que tiene un jugador muy bueno y otro muy malo, esto pasa a menudo cuando los jugadores invitan a sus amigos a jugar smite
2. Un jugador elige un dios que no usa habitualmente (o es malo usándolo)
Estos dos problemas son difíciles de resolver para partidas casuales, debido a que queremos permitir que los amigos puedan jugar juntos, además de que se te permite elegir cualquier dios que quieras usar.
EDITADO: He visto muchos post sobre la cantidad de jugadores y como esto podría mejorar la calidad de las partidas. Esto podría ser cierto para ciertos modos de juego como ranked conquest, el cual tiene una base muy pequeña de jugadores, pero conquest normal tiene jugadores más que suficientes en este punto para un buen matchmaking
Adicionalmente vamos a probar algunos otros métodos para mejorar el sistema de partidas (matchmaking), pero cada método requiere que se apliquen algunas restricciones a los jugadores (por ejemplo, permitir a los jugadores elegir solo ciertos dioses, o entrar en party solo con amigos de habilidades similares, etc)
Sistema de creación de partidas en Smite
Meta: la meta del sistema de algoritmos encargado de crear las partidas en Smite es crear partidas balanceadas por Elo (ranking), habilidades del jugador y nivel de cuenta (1..30)
El sistema almacena la información de Elo y habilidades diferentes para cada uno de los modos de juego casuales; Conquest, Arena, Joust, Assault, y MOTD. Además existen Elos separados para cada uno de los modos de juego competitivos (ranked). Solo los ranked muestran dicho ranking.
El Sistema de habilidades Elo esta basado en algoritmos de Elo y de habilidades reales provenientes de Microsoft Research (http://research.microsoft.com/en-us/projects/trueskill/details.aspx). Para Smite realizamos las siguientes modificaciones:
-Solo guardamos información de las habilidades del jugador (no por cada dios), debido a que el sistema de matchmaking no puede saber de forma anticipada que dios usaras.
-Los jugadores a nivel 10 o inferior ven reducido su Elo “oficial” por el sistema en proporción a que tan nuevos son en el juego
-Después de que una partida finaliza, el sistema analiza el KDA (Kills, Deaths, Assist), oro, y nivel alcanzado en el juego (1..20). Si los niveles de un jugador son extremadamente diferentes al resto del equipo (para bien o para mal), entonces su Elo es modificado adecuadamente. Esto permite ajustar positivamente a quienes sacan la partida adelante, y negativamente quienes no contribuyen en nada.
-Si un jugador deja la partida, o no escoge un dios en el lobby, el Elo se calcula como si el jugador hubiese causado la perdida. Si se desconectan jugadores en ambos equipos, ambos verán reducido su Elo.
Matchmaking: En Smite las partidas se organizan en base a un tiempo de espera. El siguiente algoritmo describe una partida 5vs5 (10 jugadores en total), pero se aplica una lógica similar a 3vs3 y 1vs1
El tiempo llega a cero y las invitaciones son enviadas.
El sistema crea un “pozo” de jugadores disponibles basado en las invitaciones aceptadas. Si en el total de las partidas no alcanzan todos los jugadores, el sistema dejara fuera al último jugador en entrar. Por ejemplo, si 214 personas están listas para conquest, entonces 4 no podrán entrar en las partidas y el sistema intentara hacer que sean 4 personas que entraron a la cola de espera a último segundo.
Party Request are enforced. (no logro traducir esto, según mi entender quiere decir algo como; se ejecutan las peticiones de las partys)
El Elo y nivel de la party es promediado en un numero para el matchmaking. No tenemos restricciones, así que un jugador extremadamente bueno puede estar en party con uno muy malo. Esto pasa frecuentemente.
Los jugadores nuevos (nivel 1 a 6) son procesados separadamente cuando es posible para formar solo partidas de noobs.
After noobs are done, if there are enough people in the queue the group is split into 2 or 3 sub-groups by player level. A typical split would have levels 7..19 in one group and 20..30 in another group.
Despues de que estan listas las partidas de jugadores nuevos, si hay suficientes jugadores en la lista el grupo es separado en 2 o 3 sub-grupos según el nivel del jugador. Una separación típica podría tener jugadores de nivel 7...19 en un grupo y 20..30 en el otro.
Para cada sub-grupo, los jugadores son ordenados por Elo.
El sistema trabaja con las partys intentando hacer que siempre jueguen party contra party. Esto además minimiza el número de jugadores solitarios que deben jugar en partidas con partys.
Entonces prioriza las siguientes conformaciones de party:
3 y 2 vs 3 y 2
2, 2, y 1 vs 2, 2, y 1
2, 1, 1, 1 vs 2, 1, 1, 1
Todos solos vs todos solos
En este momento más de la mitad de las partidas tienen al menos una party. Nuestros datos indican que la mayor causa de partidas frustrantes son las partys mal conformadas o mal ubicadas.
Para ordenar las partidas, el sistema revisa a los jugadores de arriba a abajo según su Elo, tomando a los jugadores con mayor Elo primero para hacer un grupo de 10 jugadores en total.
Una vez que los 10 jugadores para una partida son seleccionados, el sistema exhaustivamente busca todas las combinaciones posibles sobre quien quedara en cada lado, para así encontrar la combinación en que la suma de los Elos de cada lado sea lo más similar posible. Entonces esta partida esta lista.
Hay otras sutilezas y casos extraños pueden suceder, pero es demasiado complejo como para abarcarlo en una explicación general
Los dos grandes problemas que causan una mala partida son las siguientes:
1. Una party que tiene un jugador muy bueno y otro muy malo, esto pasa a menudo cuando los jugadores invitan a sus amigos a jugar smite
2. Un jugador elige un dios que no usa habitualmente (o es malo usándolo)
Estos dos problemas son difíciles de resolver para partidas casuales, debido a que queremos permitir que los amigos puedan jugar juntos, además de que se te permite elegir cualquier dios que quieras usar.
EDITADO: He visto muchos post sobre la cantidad de jugadores y como esto podría mejorar la calidad de las partidas. Esto podría ser cierto para ciertos modos de juego como ranked conquest, el cual tiene una base muy pequeña de jugadores, pero conquest normal tiene jugadores más que suficientes en este punto para un buen matchmaking
Adicionalmente vamos a probar algunos otros métodos para mejorar el sistema de partidas (matchmaking), pero cada método requiere que se apliquen algunas restricciones a los jugadores (por ejemplo, permitir a los jugadores elegir solo ciertos dioses, o entrar en party solo con amigos de habilidades similares, etc)