Le fonctionnement de Goptimiz, quelques liens utiles et autres infos.

Afin que les chiffres et calculs présents sur ce site puissent être vérifiés, améliorés et réutilisés en cas de besoin, cette page liste les formules sur lesquelles se basent les calculs utilisés par Goptimiz et la méthodologie suivie.

C'est aussi l'occasion d'expliquer comment et pourquoi ces formules sont utilisées.

Les données

Les données utilisées par Goptimiz proviennent de 2 sources :

  • Le GAME_MASTER. Ce fichier contient la plupart des informations nécessaires au fonctionnement du site. Un script parcourt le GAME_MASTER et charge automatiquement les informations qu'il contient. Ce script est lancé à chaque fois qu'une nouvelle version du GAME_MASTER est disponible pour que Goptimiz reste à jour.
  • La saisie manuelle. Les traductions, le kilométrage des oeufs, la disponibilité des Pokémons et les ancienns movesets sont ajoutés à la main. Aucune donnée critique (qui pourrait influencer les simulations) n'est saisie à la main.

Les simulations de combat

Afin de calculer la puissance offensive et défensive de chacun des Pokémons (et de chacun de leurs movesets), Goptimiz simule tous les combats possibles dans Pokémon Go.

Le fait d'utiliser des simulations de combat permet d'obtenir des résultats très précis (contrairement aux classements utilisant des feuilles de calculs et aux site qui ne prennent pas en compte certaines variables). En effet, les simulations permettent de prendre tous les paramètres possibles en compte (esquive, timing du combat, intéractions entre les combattants …) et elles permettent d'effectuer des millions de combats différents (4 372 281 simulations au total), ce qui rend les résultats plus fiables.

Toutes les combinaisons de combat possibles sont testées : chaque espèce de Pokémon avec chaque movesets possibles sont simulées, aussi bien en tant qu'attaquant, qu'en tant que défenseur. Pour les attaquants, des simulations sont aussi faites sans utiliser leur attaque chargée, ce qui permet de savoir à quel point un Pokémon est bon en attaque s'il n'utilise pas son attaque chargée.

Les simulations de combat de Goptimiz se basent sur tous les paramètres connus des combats d'arènes :

  • Les 2 adversaires sont tous les deux niveau 40, avec des IV parfaits.
  • Le combat dure 99 secondes au maximum ou s'arrête lorsqu'un des deux adversaires tombe KO.
  • Les Pokémons défenseurs ont leurs PV doublés.
  • Un Pokémon peut stocker jusqu'à 100 d'énergie.
  • Le Pokémon défenseur attend après chaque attaque (entre 1 et 2 secondes en jeu, fixé à 1.5 secondes lors des simulations).
  • Le défenseur commence le combat avec une double attaque rapide. La deuxième attaque rapide commence à 1 seconde (même si la première attaque rapide n'est pas terminée), et elle ne compte pas dans les délais de récupération du Pokémon défenseur.
  • L'attaquant esquive toutes les attaques chargées de la manière la plus optimisée possible. Les dégâts de l'attaque chargée sont réduits de 75%, et l'esquive dure 500ms.
  • Un Pokémon gagne 0.5 énergie à chaque fois qu'il subit 1 point de dégât (arrondi au supérieur).
  • Certaines attaques, comme Morphing, possèdent des effets spécifiques.
  • Le Pokémon défenseur utilise son attaque chargée environ 1 fois sur 2 lorsqu'elle est disponible.

  Comme en jeu, les simulations Goptimiz utilisent un système de file d'attente à une place pour les différentes actions des Pokémons.
Bien qu'il n'y ait pas de preuves solides que les Pokémons défenseurs utilisent aussi un système de file d'attente, les simulations utilisent aussi ce système pour les défenseurs. Lorsqu'un défenseur possède assez d'énergie pour utiliser son attaque chargée, le script l'ajoute à la file d'attente et l'utilise après avoir attendu 1.5 secondes. Ce système permet d'obtenir des résultats similaires à ce que l'on voit en jeu : le Pokémon défenseur utilise son attaque chargée environ 1 fois sur 2.
N'hésite pas à me faire part de tes recherches à ce sujet.

Analyse des résultats

Afin de pouvoir analyser les résultats des simulations et déterminer à quel point un Pokémon est fort en attaque et en défense, il convient de savoir ce qui fait un bon attaquant et un bon défenseur :

Qu'est-ce qui fait un bon attaquant ?

  • Le rôle d'un attaquant est de vaincre les Pokémons défenseurs. C'est pour cela que l'on attaque des arènes. La chose la plus importante à prendre en compte est donc si le Pokémon a gagné le combat ou non.
  • La durée du combat. Plus l'attaquant est puissant, plus le combat est court. Cela permet de prendre indirectement en compte le DPS de l'attaquant. Se fier uniquement au DPS rendrait les résultats moins précis (car on oublierait tout ce qui tourne autour du DPS).
  • Les dégâts subis par l'attaquant. Gagner un combat, c'est bien ; gagner un combat sans avoir perdu trop de PV, c'est mieux. Bien que moins important, il faut donc prendre en compte l'état de la barre de vie de l'attaquant à la fin du combat.

Qu'est-ce qui fait un bon défenseur ?

Le meilleur scénario imaginable est que le défenseur gagne le combat. Cela empêche l'attaquant de prendre l'arène.

If the defender loses the fight, it must at least prevent the attacker from easily taking the gym. For this, two variables must be taken into account:

  • La durée du combat. Au plus le combat dure longtemps, au plus le Pokémon défenseur a résisté efficacement. Prendre l'arène prendra beaucoup de temps à l'attaquant, ce qui pourrait aussi le décourager de continuer.
  • Les dégâts infligés par le Pokémon défenseur. Quitte à perdre le combat, autant mettre le Pokémon adverse en situation de faiblesse. Il aura plus de mal à gagner les combats suivants (et encore une fois, cela pourrait le décourager de continuer).

Calcul du score

Maintenant que l'on sait ce qui fait un bon Pokémon en attaque comme en défense, on peut juger l'issue d'un combat mathématiquement. Pour cela, Goptimiz utilise 3 variables, qui englobent tout ce que l'on veut savoir :

  • La durée du combat (Durée). Cette durée est exprimée en pourcentages entre 0% et 100% : 0% si le combat a duré 0 secondes (ce qui n'arrive jamais), 100% si le combat a duré 99 secondes.
  • Les dégâts infligés par l'attaquant (Dgtsatt). Les dégâts sont exprimés en pourcentage des PV maximum du défenseur. 0% si le défenseur n'a pas subi de dégâts, 100% si le défenseur a perdu tous ses PV.
  • Les dégâts infligés par le défenseur (Dgtsdef). Les dégâts sont exprimés en pourcentage des PV maximum de l'attaquant. 0% si l'attaquant n'a pas subi de dégâts, 100% si l'attaquant a perdu tous ses PV.

A partir de ces variables, nous pouvons calculer le score obtenu par chacun des adversaires :

  • Pour le Pokémon attaquant : Dgts att + (1 - Durée) - (0.5 × Dgts def)2.5
  • Pour le Pokémon défenseur : (1 - Dgts att) + Durée + (0.5 × Dgts def)2.5

Ces résultats (les scores) sont exprimés en pourcentages (entre 0% et 100%). Au plus le pourcentage est élevé, au plus le Pokémon a eu l'avantage pendant le combat.

Pour certains calculs effectués, on retire 100% du score du Pokémon ayant perdu le combat afin d'attribuer une valeur négative à son score. Pour ces scores "non normalisés", la valeur est donc comprise entre -100% et 100%.

Ces formules permettent aux Pokémons faibles d'avoir un petit impact sur les classements, alors que les Pokémons puissants auront un impact beaucoup plus grand sur l'ensemble des résultats. Goptimiz prend donc indirectement en compte le fait que les meilleurs Pokémons sont plus utilisés que les autres.

Génération des classements

Une fois que toutes les simulations ont été faites, il faut analyser les résultats afin de pouvoir classer les Pokémons. Voici comment sont calculés les classements dans Goptimiz :

Movesets offensifs

Afin de calculer le score offensif de chacun des movesets d'un Pokémon (ce qui est affiché sur les pages individuelles des Pokémons et sur la page Pokédex), le script fait la moyenne de tous les pires scores obtenus contre chaque Pokémon avec ce moveset. Cela permet aux classements présents sur le site de prendre en compte le pire scénario possible (quand le défenseur possède le moveset qui nous avantage le moins).

Movesets défensifs

Afin de calculer le score défensif de chacun des movesets d'un Pokémon (ce qui est affiché sur les pages individuelles des Pokémons, sur la page Pokédex), le script prend le pire score obtenu par ce moveset dans les simulations ou ce Pokémon était le défenseur.

Meilleurs défenseurs

La page des meilleurs défenseurs affiche les 100 movesets qui possèdent les plus hauts scores défensifs.

Les counters contre chaque Pokémon

Afin de calculer les meilleurs counters contre un Pokémon (ce qui est affiché sur les pages individuelles des Pokémons et sur la page des meilleurs counters), le script fait la moyenne des scores obtenus par tous les attaquants qui peuvent battre ce Pokémon.

Meilleurs attaquants

La page des meilleurs attaquants affiche les 100 movesets qui possèdent les plus hauts scores offensifs.

Toujours là ?

Si tu as des questions ou si tu veux plus de précisions au sujet du fonctionnement de Goptimiz, n'hésite pas à me contacter sur Twitter. Je mettrais à jour cette page au fur et à mesure, afin que tout soit expliqué du mieux possible.

Quelques informations bonus :

  • Les images utilisées par Goptimiz ont été récupérées sur le site de TheSilphRoad pour les images des Pokémons et ici pour les logos des 3 équipes affichées dans le calculateur d'IV. Merci !
  • Les informations au sujet des mécaniques du jeu et des autres aspects de Pokémon Go proviennent en grande partie de Reddit, principalement /r/TheSilphRoad/.
  • Outre l'énorme participation de la communauté Pokémon Go, sans qui rien n'aurait été possible, Goptimiz est le travail d'une seule personne (coucou !).
  • Contrairement à beaucoup de développeurs, je ne carbure pas au café + pizza, mais au thé + frites (pas en même temps, cela dit). Je suis fan de Trainer Tips et je suis passionné par la vie artificielle (réseaux neuronaux, machine learning, émergence ...). En jeu, j'ai choisi d'intégrer la team Sagesse (mais je ne suis pas sectaire, Pokémon Go est avant tout une histoire d'amitié et de partage).
  • Coté technique, Goptimiz utilise Twitter Bootstrap, jQuery et un framework fait maison (ainsi que la base de données).
  • Les publicités affichées sur Goptimiz servent à payer les frais d'hébergement du site et le thé nécessaire au bon fonctionnement de son administrateur. N'hésite pas à utiliser un bloqueur de pub (personellement, j'utilise uBlock Origin).
  • r