Hearthstone

Comentarios del desarrollador: La ciencia como herramienta de equilibrio

Comentarios del desarrollador: La ciencia como herramienta de equilibrio

¡Hola! Soy Tian, científico de datos sénior del equipo de Hearthstone, y hoy vamos a hablar de las matemáticas que sustentan el equilibrio de la Arena.

En la Arena hay partidas en juego en todo momento, y se genera una enorme cantidad de datos (en serio, un montonazo) que podemos emplear para garantizar su equilibrio. Si yo trabajase en los Laboratorios Bum, ¡probablemente lo haría en el departamento de ciencias matemáticas!

El proceso del equilibrio

ABunchOfKnobs_option02.jpgEl equilibrio de la Arena se consigue de dos fases. En primer lugar, decidimos a qué grupos (subconjuntos de cartas con un nivel de rendimiento similar) asignamos cada carta. Generalmente, cada carta se destina a dos grupos, y separamos las cartas legendarias y no legendarias en dos sistemas de grupos distintos. Determinamos a qué grupo pertenece cada carta en función de su índice de victorias y de su índice de selección en las partidas para que cada una de las tres cartas de cada selección tenga un nivel de poder semejante.

Luego equilibramos el índice de victorias de las nueve clases. Lo ideal es que se aproximen al 50 % en la medida de lo posible. Alcanzamos ese equilibrio ajustando los pesos asociados a cada carta. El peso es una cifra que representa la probabilidad relativa de que una carta aparezca en una fase de selección. Cuanto mayor sea el peso de una carta, mayor será la probabilidad de que la veáis durante una selección de la Arena. Si se modifica el peso de una carta, cambia también la probabilidad de que aparezca el grupo al que pertenece.

Se necesitan muchísimos datos para que el sistema funcione, pero, debido al elevado número de partidas de la Arena que se disputan cada día, disponemos de una cantidad más que suficiente.

ThreeSteps_EK_600x260.png

Emplear esos datos para modificar el equilibrio del juego requiere tres pasos:

  1. Construir un modelo;
  2. Resolver problemas de optimización con restricciones;
  3. Calcular los pesos.

Después de todo eso, tenemos que programar correcciones en vivo para aplicar los cambios.

Construir un modelo

Si sois asiduos de la Arena, es posible que estéis familiarizados con el cálculo de las probabilidades de victoria. Algunas cartas afectan más a ese cálculo que otras. Por ejemplo, robar El Rey Exánime durante una partida afecta más a la probabilidad de victoria que robar Pingüino Aletanieve.

EN_SnowFlippaLichKing.png

Supongamos que robáis El Rey Exánime durante una partida. Es probable que penséis: «¿cuál es mi probabilidad de victoria ahora que he robado El Rey Exánime? ¿60 %? ¿50 %? ¿Cómo la evalúo en términos cuantitativos?». Supongamos también que robáis Barrera de hielo en vuestro siguiente turno: ahora tendréis que volver a calcular vuestra probabilidad de victoria.

Nosotros hemos creado un modelo de aprendizaje automático para responder esas preguntas. El sistema recibe un montón de datos y, utilizando la información de todas las partidas de la Arena que se disputan, aprende a predecir la probabilidad de victoria a partir de los datos recibidos. En términos algo más formales, «entrenamos» al modelo. Así, es capaz de darnos la respuesta a la probabilidad de victoria en caso de robar X cartas cada vez que le preguntamos.

Resolver problemas de optimización con restricciones

ABunchOfKnobs_option03.jpgRetrocedamos un poco e imaginemos que el modelo es un aparato con un montón de botones que se pueden regular. Cada botón está asociado a una carta específica y, al accionar un botón, se modifican los números relacionados con esa carta.

Supongamos que, antes de girar un botón, el aparato os dice que la probabilidad de victoria actual es del 40 %. Después de girarlo, la predicción cambia al 46 %. Esto genera una pregunta muy interesante: si giráis varios botones, ¿podréis alcanzar la probabilidad de victoria que buscáis?

Esta cuestión nos lleva a la idea de que debemos crear un problema de optimización. En términos matemáticos, nos interesa encontrar la mejor solución de entre todas las posibles. Queremos que el resultado se acerque lo más posible al que buscamos «accionando unos cuantos botones» al mismo tiempo. En términos formales, minimizamos una función objetivo en un vector de grandes dimensiones.

En el equilibrio de la Arena, buscamos que el índice de victorias pronosticado se aproxime en lo posible al 50 % con independencia de la clase y, para lograrlo, modificamos los datos asociados a cada carta.

Sin embargo, no podemos regular los botones de manera arbitraria: existen algunas restricciones. Esta es una lista de restricciones que hemos programado en nuestro «aparato»:

  • El nuevo número debe hallarse en torno a un +/-30 % de un valor fijo. Los cambios drásticos podrían menoscabar la experiencia de juego.
  • Si queremos reducir el poder de una clase en la Arena, sus cartas más poderosas tendrán que aparecer con menor frecuencia que las cartas con un nivel inferior; si queremos que una clase gane poder, tendremos que hacer lo contrario.
  • Existen algunas restricciones físicas que son necesarias para que el problema sea válido. Por ejemplo, las ganancias totales de la probabilidad de aparición deben ser idénticas a las pérdidas totales (suma cero, en términos matemáticos).

Calcular los pesos

HeavyLooking.pngEl último paso del uso de datos de la Arena para influir en el equilibrio es ajustar los pesos asignados a cada carta en función de los resultados de los dos primeros pasos. En general, una carta con un peso de 2,0 aparece el doble de veces que una carta con un peso de 1,0. La optimización con restricciones nos indica «qué botones hay que regular» y «cómo regular esos botones». Después vinculamos cada «botón» con la probabilidad de aparición de cada carta en una selección. Así sabemos cuánto hay que modificar el peso de cada carta, además de otros modificadores basados en los rasgos de la carta (por ejemplo, si es un hechizo o un arma, a qué expansión pertenece, etc.).

En busca de la igualdad de condiciones

Una vez superada esta fase del equilibrio, el índice de victorias general de las nueve clases debería acercarse mucho al +/-50 %. No obstante, se han dado casos extraños en los que el índice de victorias tras el equilibrio no era ideal. Esto puede suceder cuando el índice de victorias de una clase determinada está muy lejos del 50 % antes de los ajustes de peso. En estos casos, es posible que no alcancemos las cifras ideales, pero, aun así, la situación será mucho mejor que antes.

Como este sistema es capaz de aprovechar los datos de la Arena y aplicar matemáticas computacionales avanzadas y aprendizaje automático, podemos determinar si necesitamos reforzar o debilitar una clase y elegir el peso óptimo para cada carta y cada clase.

ABunchOfKnobs_option05.jpg

¡Esperamos que esta información sobre nuestro sistema de microajustes para la Arena haya sido de vuestro interés! Nos gustaría conocer vuestras opiniones y dudas, así que contádnoslas en los comentarios.

Siguiente artículo
Heroes of the Storm
5 h.

Trifulca de héroes de la semana, 18 de enero de 2019: «¡Enzarzados!»

Acabad con vuestros rivales en la Trifulca de héroes de esta semana, «¡Enzarzados!»