jfg a écrit :
Je faisait varier les paramètres de l'IA (quand elle doit sauter par exemple) et je la faisait jouer contre une IA de référence 1000 parties. A la fin j'ai choisi l'IA avec le meilleur rapport victoire/défaite.
Euh ... ce n'est pas pour dire, mais je ne vois pas en quoi c'est un algorithme génétique : il n'y a aucun croisement, rien qu'une unique génération.
a un moment l'IA battait presque systématiquement l'IA de référence, mais contre un humain elle était absolument nulle. L'IA s'était spécialiser contre l'autre IA...
Si la méthode de sélection a été si peu efficace, c'est parce que tu as fait combattre tes IA contre une IA
de référence, ce qu'il ne fallait surtout pas faire ...
Il faut se faire combattre les IA entre elles, afin qu'elles aient à affronter divers comportements, et surtout qu'elles soient susceptibles de se battre contre des IA performantes.
En effet, si ton IA de référence se faisait battre presque systématiquement, c'est bien que son niveau n'était plus assez élevé, et ses adversaires ne pouvaient plus évoluer.
Pour avoir quelque chose de plus ressemblant à un vrai algorithme génétique (sans en être un vrai, puisque s'appuyant sur ton protocole de sélection et sans qu'il y ait de croisement), tu aurais dû remplacer à la fin ton IA de référence par ta meilleure IA du moment, et faire une seconde passe (seconde pseudo-génération) avec donc cette fois un niveau plus élevé, donc plus à même de trouver une IA encore meilleure, puis recommencer encore quelques pseudos-générations.
Et encore, même comme ça, ça ne vaut pas un vrai algorithme génétique, puisque ta meilleure IA de la pseudo-génération N sera en fait
spécialisée (et c'est là qu'est le problème) contre la meilleure de la pseudo-génération N-1 (puisque tu ne fais pas se battre les individus entre eux, mais contre une référence qui devient celle contre laquelle il faut se spécialiser).
De plus, lors de la première pseudo-génération, tu as réussi, en prenant des IA au hasard, à en trouver une qui soit plus forte que celle de référence.
Au fur et à mesure que les pseudo-générations passent, le niveau s'élève donc, et il est alors de plus en plus difficile de trouver, au hasard, des IA encore plus fortes.
C'est pourquoi, en faisant se croiser les meilleures IA entre elles pour obtenir les individus de la génération suivante (comme il y a croisements, ce ne sont plus des pqeudo-générations), on part d'entrée de jeu avec des IA d'un bon niveau, donc plus à même de relever le niveau pour la génération suivante.
Enfin, si on se contente de croiser les meilleures IA, rien ne nous garantit que l'on ne passe pas à côté d'une valeur encore plus performante d'un paramètre.
C'est pourquoi il faut continuer à inclure de l'aléatoire, aussi bien en incluant à chaque génération des individus aléatoires, qu'en variant légèrement et aléatoirement les paramètres d'un individu obtenu par croisement (au moment du croisement ou après).
J'espère que tu comprends maintenant l'absolue nécessité des 3 (ou 2 selon le cas) points de base qui constituent un algorithme génétique :
1/ à chaque génération N, croiser les meilleurs individus pour obtenir ceux de la génération N+1
2/ à chaque génération N, inclure quelques individus aléatoires totalement nouveaux, quelques individus choisis au hasard de la génération N-1, et faire varier légèrement et aléatoirement des paramètres des individus de la génération N
3/ faire agir les individus entre eux, et non avec une référence, si le but recherché l'autorise
Le point 3 n'est bien évidemment valable que pour les IA dites
de collectivité (dont le but est d'interagir avec d'autres IA ou des opérateurs humains, comme pour les jeux entre adversaires), et non pour les IA dites
d'individualité (qui n'interagissent qu'avec un environnement ayant des réactions prédéfinies, comme pour faire marcher un robot hexapode).
Et tout comme un robot hexapode a à s'adapter à une force de gravité qui est toujours la même, ton IA de SlimeBall s'est adaptée à une IA de référence qui a toujours le même comportement.
Tu as donc finalement obtenu une
IA d'individualité à cause de l'utilisation d'une référence arbitraire, alors qu'il te fallait pour le jeu une
IA de collectivité ...
Pour BomberMan, sachant que l'on a un nombre fixe de cases, avec un nombre prédéfini d'objets pouvant s'y trouver, et surtout que je viens de parler des algorithmes génétiques, j'évoquerais bien un certain type d'IA avec une approche globale de la situation (alors que ce qui est discuté dans ce topic a toujours une approche locale, centrée sur le personnage), mais bon, ce pense que ce sera trop lourd et totalement inefficace pour ce jeu

...
@++