Las matemáticas detrás de Pokémon

Bienvenidos al Escritorio de Enrique. Antes de nada, si queréis descargaros en pdf el contenido de esta entrada podéis pinchar en este enlace post15. Este artículo es muy especial para mí por dos razones: la primera es porque es el primero que escribo como graduado en Matemáticas, y la segunda es porque voy a escribir sobre Pokémon, algo que me fascinó desde pequeñito (no me avergüenza decir que sigo jugando a mi edad, y no al Pokémon GO precisamente). Hoy vamos a adentrarnos en la dinámica de los juegos de consola de Pokémon e inspeccionaremos las matemáticas que se esconden detrás de estas increíbles criaturas. La nostalgia está asegurada.

Todos sabemos qué son los pokémon. Hay una gran cantidad de especies diferentes, y cada una de ellas pertenece a un tipo (algunas especies tienen dos tipos). Pikachu, por ejemplo, es de tipo Eléctrico, mientras que Charizard es de tipo Fuego/Volador. En total hay los siguientes tipos:

  1. Acero.
  2. Agua.
  3. Bicho.
  4. Dragón.
  5. Eléctrico.
  6. Fantasma.
  7. Fuego.
  8. Hada.
  9. Hielo.
  10. Lucha.
  11. Normal.
  12. Planta.
  13. Psíquico.
  14. Roca.
  15. Siniestro.
  16. Tierra.
  17. Veneno.
  18. Volador.

Los pokémon y las personas son grandes amigos. Para estrechar vínculos, las personas combaten junto a sus pokémon contra otros entrenadores. Un pokémon derrota a otro cuando lo debilita. Para luchar, estas criaturas utilizan movimientos, como Rayo de Pikachu.

Al igual que los pokémon, los movimientos también pertenecen a un tipo. Por ejemplo, Lanzallamas es de tipo fuego. En los videojuegos, los pokémon pueden aprender solo 4 movimientos, y no tienen por qué ser del mismo tipo que el pokémon. Por ejemplo, Charizard (tipo Fuego/Volador) puede aprender Garra Dragón, que es de tipo Dragón. Sin embargo, cada pokémon puede aprender solo una cantidad determinada de movimientos, no todos.

Cada pokémon tiene unas estadísticas de combate. Estas determinan cuán fuerte es. Las estadísticas son las siguientes:

  1. PS (puntos de salud): cuando se debilita al pokémon, los PS toman el valor 0.
  2. Ataque.
  3. Ataque Especial.
  4. Defensa.
  5. Defensa Especial.
  6. Velocidad

El motivo por el que hay ataque y ataque especial es porque los movimientos que causan daño al rival se dividen en movimientos de impacto (utilizan el ataque del agresor y son defendidos con la defensa del rival) y movimientos especiales (utilizan el ataque especial del agresor y son defendidos con la defensa especial del rival). Por ejemplo, Surf es un movimiento especial de tipo Agua, y su potencia es de 90 (esto último no tiene nada que ver con las estadísticas del pokémon que usa el movimiento, es una cantidad igual para cada pokémon que sepa usar el movimiento).

En los combates siempre ataca primero un pokémon y luego el otro, y comienza atacando el que tiene mayor velocidad de los dos (aunque hay movimientos como Ataque Rápido que permiten atacar siempre en primer lugar). En caso de que ambos pokémon tengan la misma velocidad, el juego decide aleatoriamente quién ataca primero en cada turno.

Genética Pokémon

Cabe destacar que dos pokémon de una misma especie (por ejemplo dos Pikachu) con una probabilidad de prácticamente el 100% van a tener estadísticas diferentes aun teniendo el mismo nivel. Eso se debe a varias causas. Una de ellas es la naturaleza del pokémon. Cada pokémon nace con una naturaleza diferente. En este enlace podéis ver todas las naturalezas que existen y cómo afectan a las estadísticas de los pokémon. Cada naturaleza, o bien mantiene neutras todas las estadísticas o bien aumenta un 10% una, disminuye un 10% otra y mantiene neutras las demás. Por ejemplo, la naturaleza Serena aumenta la defensa especial y disminuye el ataque. Otra de las causas es los llamados IVs o valores individuales. Los valores individuales son, por decirlo así, el código genético de cada pokémon. Para cada una de las estadísticas anteriores, el pokémon tiene un IV que varía de 0 a 31 y determina el máximo valor alcanzable para esa estadística.

Es necesario hacer un inciso aquí para comentar que cuando un pokémon vence a otro, gana unos puntos de experiencia y puntos de esfuerzo (PE). Los PE varían en función del pokémon al que se ha derrotado, y sirven para saber cómo aumentan las estadísticas de este al subir de nivel. En este enlace se muestran los PE que otorga cada pokémon que se derrota. Cuando acumula suficientes puntos de experiencia sube de nivel y aumentan sus estadísticas. El menor nivel que puede tener un pokémon es 1 y el mayor es 100. A partir de llegar al nivel 100, el pokémon ya no consigue puntos de experiencia ni PE al ganar combates, por lo que no puede aumentar sus estadísticas.

Apoyándonos en esta observación, añadiremos que, por mucho que un pokémon tuviera 31 de IV en cada estadística, no tendría por qué alcanzar sus máximos. Todo depende del entrenamiento que haga (aunque en este tema no me voy a meter sí cabe mencionar que este entrenamiento se basa en los PE que se ganen, por lo que es importante saber qué estadísticas quieres aumentar más y, en función de eso y del listado del enlace que he compartido en el párrafo anterior, elegir los rivales a los que quieres enfrentarte).

Lo que sí que tienen en común dos pokémon de una misma especie son las estadísticas base, con un valor numérico para cada una de las estadísticas de combate del pokémon. Estos valores nos servirán para calcular cómo aumentan las estadísticas cada vez que se sube de nivel.

Dado un pokémon que acaba de subir de nivel, llamemos Nivel a ese nivel que alcanza, EB a la estadística base (si calculamos qué PS va a tener, EB representará la estadística base de PS, mientras que si calculamos, por ejemplo, el ataque especial, EB representará la estadística base de ataque especial), IV al valor individual de la estadística concreta (con la misma consideración que con EB), PE a los puntos de esfuerzo acumulados para la estadística concreta y Naturaleza a la acción de la naturaleza del pokémon con respecto a esa estadística. Las fórmulas que nos indican cómo aumentan las estadísticas de un pokémon al subir de nivel son las siguientes:

Fórmula para calcular el aumento de PS

PS = 10 + \left( \dfrac{Nivel}{100}(2EB + IV + PE) \right) + Nivel.

Veamos un ejemplo de esta fórmula.

Este es Greninja:

Greninja es un pokémon de tipo Agua/Siniestro.

Greninja es uno de mis pokémon favoritos y, sin duda, el mejor pokémon de mi equipo (en la edición Pokémon X). En los ejemplos siguientes ha decidido acompañarnos.

En este enlace podemos ver las estadísticas base de Greninja. Para calcular los PS que tendrá al nivel 100 necesitamos saber las variables de la fórmula, a saber, EB, IV y PE. En el enlace comprobamos que EB para PS vale 72. IV y PE no sabemos bien cuánto valen (aunque haciendo un seguimiento de los pokémon a los que vence durante todo su entrenamiento podríamos llegar a saber el valor de PE), así que vamos a suponer que IV = 22 y PE = 72. Gracias a la fórmula anterior tenemos que PS = 10 + \left( \dfrac{100}{100}(2 \cdot 72 + 22 + 72) \right) + 100 = 348.

Fórmula para calcular el aumento del resto de estadísticas

Stat = 5 + \left( \dfrac{Nivel}{100}(2EB + IV + PE) \right)Naturaleza.

Vamos a tratar de entender a grandes rasgos la forma de las ecuaciones, ya que puede resultar sorprendente por qué los creadores de Pokémon se inventaron unas fórmulas así. Detengámonos primero en la fórmula de los PS.

El primer problema es garantizar que a cada nivel los PS no disminuyen. En efecto esto es así. Las únicas operaciones de la ecuación son la suma y el producto, así que, con comprobar que las variables involucradas no disminuyen a medida que aumentamos de nivel, ya nos vale. Nivel obviamente aumenta al aumentar de nivel. En cuanto a EB e IV, son valores fijos (constantes que dependen del pokémon en cuestión), luego tampoco tampoco decrecen (ni crecen, dicho sea de paso). Para terminar, PE, los puntos de esfuerzo, son los que ha acumulado el pokémon hasta ese momento, luego cuanto más aumenta de nivel, más ha luchado y, por lo menos, esta variable no es más pequeña que en los niveles inferiores. Por tanto, la fórmula es consistente.

Otro problema es que quizás no creciera la característica de manera “sensata” al subir de nivel, haciendo que el crecimiento fuera muy descompensado. Nuestra fórmula tiene 3 sumandos. El primero de ellos es 10, seguramente lo añadirían de manera artificial para que les cuadraran mejor los resultados. Por ejemplo, en una fórmula del tipo f(x) = 10 + x, la gráfica que se obtiene muestra un desplazamiento en 10 unidades de los valores que se obtendrían con f(x) = x.

El tercer sumando es Nivel, y nos dice que PS crece linealmente respecto de ese sumando. Si solo tuviera esos dos sumandos, la gráfica sería exactamente como la negra de la imagen anterior (considerando solo la parte positiva) correspondiente a los valores a partir de 1 de la x (que sería nuestro Nivel).

El segundo sumando es el que tiene más chicha. Básicamente, al ser EB e IV constantes, \dfrac{Nivel}{100} es un valor menor o igual que 1 (solo es 1 si Nivel = 100) y positivo (porque Nivel \geq 1) que hace crecer muy lentamente el factor 2EB + IV + PE, lo que, sumado a que PE crece muy lentamente de un nivel al siguiente, hace que el aumento de la característica PS sea muy controlado.

La fórmula correspondiente al resto de estadísticas se analizaría de una forma similar. Los detalles de las ecuaciones anteriores, como sumar 10 o 5, o multiplicar EB por 2, son detalles que los desarrolladores del juego tuvieron que analizar, seguramente, de manera experimental para encontrar la “fórmula perfecta”, probando con diversos sumandos y factores.

Calculando los IVs

Ya hemos dicho que cada pokémon tiene sus IVs prácticamente únicos. Sin embargo, saber qué IVs tiene un pokémon no es tarea fácil. Solo podemos hacernos una idea estimada. Aquí van algunos trucos.

Cuando miras los datos de un pokémon capturado te dice su naturaleza (la cual no sirve para este propósito) y una frase que nos informa sobre un gusto del pokémon. En esta frase está encerrado un posible valor del IV de una de sus estadísticas. En este enlace están recogidas en formato tabla todas las frases que hay a este respecto y el posible valor del IV. Fijémonos en que hay 5 filas y 5 columnas (por lo que hay 25 frases). Las columnas representan de qué estadística podemos saber su posible IV, y las filas representan los posibles valores que toma el IV. Por ejemplo, mi Greninja “es un buen fajador”. En la tabla del enlace dice que la estadística a la que hace referencia es la Defensa, y que los posibles valores de su IV son 1, 6, 11, 16, 21, 26, 31. Esta es la única información de la que dispongo.

Me gustaría añadir como curiosidad que en cada fila, el primer valor de IV son 0, 1, 2, 3 y 4 (respectivamente para las filas de 1 a 5), y el resto de valores para cada fila son sumas de 5 en 5 de cada uno de estos primeros valores hasta llegar a un valor menor o igual que 31 de forma que si vuelves a sumar 5 te pasas de 31. Vamos a releerlo con lo aprendido en mi artículo Congruencias. Las matemáticas de la semana. Los valores 0, 1, 2, 3, 4, son los elementos de \mathbb{Z}_{5}, es decir, son los posibles restos de dividir cualquier número entero entre 5. Además, en ese artículo vimos que a cualquier número entero se le puede asociar su resto al dividirlo entre 5. Es decir, si n \in \mathbb{Z} y n = 5c + r, como en nuestra fórmula favorita dividendo = divisor \cdot cociente + resto, podemos hacer la correspondencia n \leftrightarrow r, donde r es 0, 1, 2, 3 o 4. Así, cada número natural admite escritura en \mathbb{Z}_{5}. Además, lo escribiremos como \bar{n} = r. Lo que digo es que en la fila i, \; i = 1, 2, 3, 4, 5, los posibles valores que toma IV son \{ m \in \mathbb{Z} \; : \; \bar{m} = i-1,\; 0 \leq m \leq 31 \}. Es decir, son todos los enteros no negativos y menores o iguales que 31 cuyo resto coincide con el número de la fila anterior (porque los restos de 5 son de 0 a 4 y las filas están numeradas de 1 a 5). Por ejemplo, para la fila i = 2, los valores que encontramos son los mencionados anteriormente, 1, 6, 11, 16, 21, 26, 31.

Me consta que en todos los videojuegos hay un juez de genes, es decir, un personaje que evalúa a tu pokémon y te hace una serie de comentarios que se pueden traducir en más información sobre los IV de tu pokémon. En Pokémon X, este juez está en el Centro Pokémon de Ciudad Batik. Esto es lo que dice sobre mi Greninja: “Ya veo, ya veo… // Este Pokémon tiene un potencial extraordinario. Así lo juzgo yo, al menos. // Por cierto, diría que su potencial radica en sus PS. // Y también en su Ataque. // Y también en su Defensa, por supuesto. // Y su Defensa Especial tampoco se queda corta. // En general, tu Pokémon es inmejorable. Así lo juzgo yo, al menos”.

Estas frases tienen una traducción a los posibles valores de los IVs del pokémon. La frase “Este Pokémon tiene un potencial extraordinario. Así lo juzgo yo, al menos” se traduce a que la suma de todos sus IVs está entre 151 y 186 (en este enlace podéis ver todas las posibles frases del juez de genes y sus traducciones). Es decir, 151 \leq \sum IV \leq 186. Las frases que hacen referencia al potencial de sus características son complementadas con la última frase, la de “En general, tu Pokémon es inmejorable. Así lo juzgo yo, al menos”. En este caso, la información que me está dando es que en esas estadísticas, mi Greninja tiene por IV 31. En el resto de características no se sabe cuánto se tiene, pero se puede estimar. Llamemos IV_{Ataque Especial},\; IV_{Velocidad} a las IVs que desconocemos. Sabemos que 151 \leq \sum IV \leq 186 y que las IVs que conocemos valen 31. La suma de esas IVs conocidas es 4 \cdot 31 = 124, luego 151 \leq \sum IV = 124 + IV_{Ataque Especial} + IV_{Velocidad} \leq 186. Así, restando en ambos lados 124 tenemos que 27 \leq IV_{Ataque Especial} + IV_{Velocidad} \leq 62. También sabemos que ninguna de las dos vale 31, porque si no me lo habría dicho el juez, así que, como mucho, las dos valen 30. Esto se traduce en que 27 \leq IV_{Ataque Especial} + IV_{Velocidad} \leq 60.

Otro dato a destacar es que si en alguna de estas el juez me hubiera dicho “Aunque yo diría que <la estadística> le cojea un poco, ¿no?” sabría que esa estadística valdría 0. Por lo tanto, las dos son mayores que 0. En fin, hasta aquí puedo saber. Aunque si hubiera calculado exactamente los PE que Greninja ha ganado en cada una de estas dos estadísticas, podría calcular sus IVs utilizando la segunda fórmula de las dos anteriores aplicada a cada una de las estadísticas y despejando IV. Como no he llevado este recuento de PE (ya que se llevaría un currazo), vamos a ver cómo se haría dejando en la fórmula PE, pero suponiéndolo conocido. Vamos a calcular el IV de su ataque especial:

Greninja está al nivel 100 y su Naturaleza es Ingenua, lo que se traduce en que aumenta un 10% la velocidad y disminuye un 10% la defensa especial (esto quiere decir que vamos a poder ignorar la variable Naturaleza de la fórmula, ya que vamos a calcular solo el IV de su ataque especial. Para calcular su IV de velocidad sí que necesitaríamos utilizar esta variable). El ataque especial de Greninja es 225, y la EB de ataque especial es 103. La fórmula que utilizamos es Ataque Especial = 5 +  \dfrac{Nivel}{100}(2EB + IV + PE), por tanto, 225 = 5 + \dfrac{100}{100}(2 \cdot 103 + IV + PE) = 5 + 2 \cdot 103 + IV + PE = 211 + IV + PE. Como PE hemos supuesto que lo conocemos, pasamos restando al otro lado 211 y PE tenemos que 225 - 211 - PE = 14 - PE = IV. Sé que PE > 0 y que PE < 14, pues si fuera 14 entonces IV = 0 y me lo habría dicho el juez. Así que el IV del ataque especial está entre 1 y 13 (un poquito bajo). En el caso de que valiera 13, el IV de la velocidad, por la fórmula 27 \leq IV_{Ataque Especial} + IV_{Velocidad} \leq 60 sería 14 \leq IV_{Velocidad} \leq 47, pero como toda IV es menor o igual que 31 (y esta en concreto es menor estricta), la segunda desigualdad sobra, no aporta información, solo sabríamos que es mayor o igual que 14 (la forma exacta de calcularla sería como la del ataque especial).

Efectividad de los movimientos

Como ya sabéis, cada movimiento pertenece a un tipo distinto. Hay movimientos de impacto y movimientos especiales. Dentro de estos últimos, los hay que no causan daño al rival, al menos directamente. Por ejemplo, Tóxico es un movimiento especial de tipo Veneno que envenena al agresor y su efecto en el combate es restar PS del rival cada turno (salvo que se utilice una cura para ello durante el combate), y Protección es un movimiento especial de tipo Normal que protege al atacante del movimiento del rival en ese turno, evitando así que le hagan daño. Sin embargo, para nuestro análisis nos vamos a centrar en aquellos movimientos que causan daño.

La efectividad de un movimiento varía según su tipo y el tipo del pokémon rival. Es una variable que toma uno de estos valores: 0,\; \dfrac{1}{4},\; \dfrac{1}{2},\; 1,\; 2,\; 4. Entendámosla un poco mejor. Un movimiento sobre un rival puede:

  1. No afectarle, si el tipo del movimiento utilizado no afecta al tipo del pokémon rival; la efectividad es 0. Un ejemplo es Retribución, de tipo Normal, sobre Gengar, un pokémon de tipo Fantasma.
  2. Ser poco efectivo, si el tipo del movimiento es poco efectivo sobre el tipo del pokémon rival. Puede ser \dfrac{1}{4} si el pokémon rival tiene dos tipos y el movimiento es poco efectivo para ambos tipos; por ejemplo Surf, de tipo Agua, sobre Kingdra, un pokémon de tipo Agua/Dragón. También puede ser \dfrac{1}{2} si el tipo del movimiento es poco efectivo para el tipo del pokémon rival. Por ejemplo, Terremoto, ataque de tipo Tierra, sobre Dugtrio, un pokémon de tipo Tierra.
  3. Ser “neutro”, si el tipo del movimiento no es ni poco eficaz ni muy eficaz sobre el tipo del pokémon rival. Por ejemplo, Ataque Rápido, movimiento de tipo Normal, sobre Pidgeot, un pokémon de tipo Volador.
  4. Ser muy eficaz (el lector sabrá imaginar qué quiere decir, es análogo al caso poco eficaz). Puede tomar los valores 2 o 4.

En este enlace encontraréis una tabla con las efectividades de los tipos de los movimientos con respecto al tipo del pokémon rival. Yo por mi parte he hecho un grafo que representa cuándo un tipo de movimiento es muy efectivo contra el tipo de un pokémon rival. Es el siguiente:

Grafo dirigido que representa la efectividad de los tipos (lamentablemente parece que sale una flecha de Lucha a Dragón, pero en realidad sale de Hada).

En mi artículo Sobre la fórmula c+v-a=2 traté el concepto de grafo. Recordemos que un grafo es un conjunto de vértices unidos entre sí por aristas. Los grafos dijimos que podían clasificarse en dos grandes grupos, dirigidos y no dirigidos. Aunque me centré en los grafos no dirigidos, sí que comenté que un grafo dirigido es aquel en el que las aristas tienen un vértice de salida y un vértice de llegada (es decir, importa cómo se unen dos vértices, y que dos vértices estén unidos mediante una arista que sale de uno y llega a otro se representa como una flecha que apunta parte del vértice de salida y apunta al vértice de llegada). Recordemos que siempre que tenemos una serie de objetos y una relación entre ellos, esto podemos modelizarlo mediante un grafo, cuyos vértices son los objetos y las aristas determinan los objetos que están relacionados entre sí mediante esa relación. En nuestro caso, como los tipos de los movimientos y de los pokémon son los mismos y la relación que consideramos es “dos tipos están relacionados entre sí si uno de ellos es muy eficaz contra el otro”. De esta manera surge el grafo expuesto más arriba. Por ejemplo, si nos fijamos en el tipo Fuego, vemos que de él salen aristas hacia los tipos Hielo, Acero, Bicho y Planta. Eso quiere decir que un movimiento de tipo Fuego, como Lanzallamas, es muy eficaz contra cualquier pokémon de alguno de esos tipos. También podríamos hacer otro grafo en el que se mostraran los movimientos poco eficaces.

Vamos a ver un concepto asociado a los grafos dirigidos. Dado un grafo G = (V, A), donde V es el conjunto de vértices y A es el conjunto de aristas, llamamos grado de entrada de un vértice v \in V al número de aristas que inciden en él (número de flechas que le llegan). Matemáticamente se escribe como gr_{e}(v) = \# \{(v', v) \in A \; : \; v' \in V \} (donde \# X es el cardinal, o número de elementos, del conjunto X). Análogamente, llamamos grado de salida de un vértice v \in V al número de aristas que parten de él. Matemáticamente se escribe como gr_{s}(v) = \# \{(v, v') \in A \; : \; v' \in V \}.

Veamos un ejemplo. Vamos a calcular los grados del tipo Fuego. Para calcular el grado de entrada tenemos que contar las flechas que le llegan. Vemos que estas son las que parten de los tipos Agua, Tierra y Roca, luego gr_{e}(Fuego) = 3. Para calcular el grado de salida lo tenemos fácil, porque ya hemos visto que las aristas que salen del tipo Fuego llegaban a los tipos Hielo, Acero, Bicho y Planta, luego gr_{s}(Fuego) = 4.

Podríamos incluso hacer un ránking de mejores tipos en función de muchos criterios. Uno de ellos podría ser el ser muy efectivo contra más tipos diferentes. Esto sería lo mismo que ordenar según los grados de salida. En este caso, los mejores tipos serían Lucha y Tierra, ambos con grado de salida 5, y el peor tipo sería el tipo Normal, con grado de salida 0. Otra opción sería hacer el ránking de forma que el mejor tipo será el que tenga una diferencia mayor entre movimientos muy efectivos contra otros tipos y movimientos que sean muy efectivos contra ese tipo; es decir ordenar los tipos en función de la diferencia gr_{s}(Tipo) - gr_{e}(Tipo). Por ejemplo, para el tipo Fuego, esta diferencia es gr_{s}(Fuego) - gr_{e}(Fuego) = 4 - 3 = 1. En este caso, los mejores tipos siguen siendo Lucha y Tierra, ambos con una diferencia de 2. Los peores tipos en este caso son Dragón (quién lo diría) y Planta. Una tercera opción de ránking sería ver cuántos tipos son poco eficaces contra ellos, aunque como no hemos visto el grafo no lo vamos a trabajar. Hay muchas más opciones, cada uno podría hacerse el ránking que más le guste.

Aunque no sea nuestro objetivo principal, me gustaría mostrar un resultado muy bonito relacionado con los grados de los vértices de un grafo. Dado un grafo G=(V,A), definimos el grado de un vértice v como el número de aristas que salen de él más el número de aristas que llegan a él (en el caso de que el grafo sea no dirigido no existen los conceptos de grado de entrada y de salida, y se cumple que la arista (v, v') es igual que la arista (v', v). En el caso de grafo dirigido, se cumple que el grado de un vértice es igual a la suma del grado de entrada más el de salida). Se denota por gr(v). El resultado que muestro se llama Lema del apretón de manos (allá cada cual se imagine el porqué del nombre), debido a Leonard Euler, y dice que la suma de todos los grados de los vértices es dos veces el número de aristas del grado. Matemáticamente, si denotamos por a al número de aristas del grafo, el resultado dice que \sum_{v \in V} gr(v) = 2a. La demostración es muy sencilla. Como cada arista tiene dos extremos, al contar todos los grados estamos contando cada arista dos veces. Este resultado nos sirve para lo siguiente: si para cada tipo pokémon contamos su grado de entrada y su grado de salida, los sumamos (calculando así el grado de cada tipo), sumamos los grados de todos los tipos y los dividimos entre 2, el resultado será el número de aristas de nuestro grafo (mola mucho que la suma de los grados sea siempre un número par). Yo he hecho el cálculo y me sale que la suma de los grados es 84, que dividido entre 2 da 42. Efectivamente, si contáis todas las aristas, el resultado es 42. Misteriosamente, esta es la respuesta a todas las preguntas de la vida según Douglas Adams en Guía del Autoestopista Galáctico (ahí lo dejo).

Daño en combate

Para terminar, vamos a ver cómo se calcula el daño de un movimiento contra un pokémon en combate.

Cada movimiento hemos visto que tiene asociada una potencia de ataque, como Surf, que dijimos que tenía potencia 90. Cuando un movimiento tiene un tipo que coincide con el pokémon que lo usa, recibe una bonificación de 1.5 (nos va a servir para la fórmula del daño causado), y si no, no hay bonificación, aunque a efectos prácticos es como decir que la bonificación es 1. Por ejemplo, si Greninja, que es de tipo Agua/Siniestro, utiliza el movimiento Surf, que es de tipo Agua, la bonificación es de 1.5.

Otra variable es la variación. Cuando se utiliza un movimiento en combate, el juego asigna un valor entero entre 85 y 100 a ese ataque. No se puede llegar a saber ese valor, pues el juego lo asigna al azar (o eso creo).

Con estos ingredientes, si denotamos por B a la bonificación antes mencionada, E a la efectividad del ataque con respecto del tipo del pokémon rival (como hemos estudiado anteriormente), V a la variación, Nivel al nivel que tiene el pokémon atacante, A al ataque o ataque especial (en función de si el movimiento es de impacto o especial respectivamente), P a la potencia del ataque y D a la defensa o defensa especial del rival (en función de si el movimiento es de impacto o especial respectivamente), la fórmula para calcular el daño que recibirá el pokémon rival (número de PS que pierde) es la siguiente:

Da\tilde{n}o = 0.01B \cdot E \cdot V \left( \dfrac{(0.2Nivel + 1)A \cdot P}{25D} + 2 \right).

La lectura de la fórmula es parecida a la de las fórmulas que hemos estudiado anteriormente. En este caso, tanto la bonificación como la efectividad, la variación, el nivel, el ataque o ataque especial y la potencia, hacen que el movimiento tenga un mayor impacto, mientras que la defensa o defensa especial del rival “contiene” el ataque, por eso aparece en el denominador. Cuando en una fracción el numerador aumenta, la fracción se hace más grande, mientras que cuando el denominador aumenta, la fracción se hace más pequeña. Las constantes que aparecen en la fórmula, de nuevo, sirven para hacer “más real y justo” el daño causado al rival.

Cojamos de nuevo a mi Greninja como ejemplo. Imaginemos que utiliza el movimiento Surf sobre un pokémon. Surf es un movimiento de tipo Agua, y Greninja es de tipo Agua/Siniestro, así que el movimiento adquiere una bonificación de B=1.5. Además, este movimiento tiene una potencia P=90. Es un movimiento especial, luego interviene el ataque especial de Greninja, que es A=225, y la defensa especial del rival. Como ya he comentado, el nivel de Greninja es Nivel=100. Supongamos que la variación del ataque es V=85 y que atacamos a un pokémon al que no le son ni muy efectivos ni poco efectivos los movimientos de tipo Agua, es decir, la efectividad es E=1. Veamos en la siguiente gráfica cómo varía el daño causado por el movimiento Surf de Greninja con estos parámetros en función de la defensa especial del rival.

Vemos que cuando la defensa especial del pokémon rival es muy baja, el daño se dispara hasta tal punto que la escala en el eje Y es del orden de 10^{4}.

Hagamos algunos comentarios sobre la gráfica. Como la única variable que estamos considerando es la defensa especial, que está en el denominador, si todo el numerador lo representamos como una constante c, la función es del tipo f(x) = \dfrac{c}{x}. Estas funciones se disparan para valores de x cercanos a 0 (aunque x no puede valer nunca 0, porque estaríamos dividiendo entre 0, lo cual es algo prohibido en matemáticas), y se aproximan a 0 a medida que x aumenta. En matemáticas decimos que esta función tiene una asíntota vertical cuando x se aproxima a 0 y tiene una asíntota horizontal cuando x tiende a infinito. Una asíntota es una recta a la que la función se acerca infinitamente sin llegar a tocarla.

Lo único que nos interesa saber para valores muy pequeños de la defensa especial del rival es que con un solo movimiento vamos a debilitarlo. Por ejemplo, esta es la gráfica que se obtiene cuando tomamos una defensa especial de entre 1 y 14 (como hacer zoom en la gráfica anterior):

Vemos que para una defensa especial de 14, el daño es de aproximadamente 0.2 \times 10^{4} = 2000, lo cual sigue siendo grandísimo.

Veamos qué ocurre para valores de defensa especial mayores que 14:

La escala ya es más nítida.

Aun así, se sigue viendo que el daño ocasionado por Surf sigue siendo muy grande para valores de defensa especial menores que 100 (pensad que Greninja tiene 348 PS y no es el pokémon que más PS tiene). Veamos qué daño ocasiona Surf para valores de defensa especial a partir de 100:

Este sería un combate más reñido.

Como vemos, si la defensa especial del rival es 100, el ataque le restaría casi 250 PS.

Conozcamos a mi Lucario.

Lucario es un pokémon de tipo Lucha/Acero.

Si mi Greninja utilizara Surf contra mi Lucario de nivel 93 (como Greninja tiene 323 de velocidad y Lucario 253, atacaría primero Greninja), defensa especial de 168 y 251 PS, le quitaría unos 132 PS, quedándose aún con 119 (no aguantaría otro Surf en el siguiente turno).

Conclusiones

A lo largo de este artículo hemos hecho un repaso de la dinámica de juego de Pokémon, hemos aprendido a leer fórmulas y gráficas y hemos utilizado conceptos de grafos dirigidos para elaborar un ránking de los mejores tipos Pokémon. Quiero agradecer a los amigos de Wikidex el trabajo que hacen en su enorme página. De ella he sacado las fórmulas y muchos de los datos que he utilizado.

Sin duda, el mundo Pokémon es algo que nos ha cautivado a muchísimas personas desde que empezó en los años 90 con Pikachu, Bulbasaur, Squirtle, Charmander y compañía. Los creadores han sabido atraparnos dotando de personalidad e individualidad a cada pokémon. Pero todas las matemáticas que hay detrás de estas criaturas son las que han conseguido mantenernos jugando durante tantos años.

Espero que os haya gustado el artículo de hoy. En los comentarios podéis hablar sobre vuestros pokémon favoritos. Y ya sabéis, compartidlo con familiares, amigos y vecinos del barrio. ¡Hasta la próxima!

Autor: Enrique Ferres

Soy matemático por la Universidad Complutense de Madrid especializado en Ciencias de la Computación. Como divulgador soy miembro de Scenio y he impartido conferencias en la UCM para el proyecto La Conciencia Social es la Vacuna y en la UCJC. He sido mentor durante dos años en el proyecto PiMat de integración en la universidad y un año community manager del proyecto.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s