1

J'ai fait un bomberman pour 89 ou on ne peut jouer que en 1v1 avec 2 89. Mais je veux implementer une IA pour pouvoir jouer en solo.
L'organisation du jeu fait que pour programmer l'IA, on a acces a plusieurs arrays a 2 dimensions representant toute la carte. Chaque array contient une info particuliere: bombes/block.
A partir de la, comment est ce que vous conseillez de faire l'IA. Tout ce que j'ai fait jusqu'a maintenant a abouti a rien (sucide rapide de l'IA).
Ca m'ettonerait que j'arrive a faire une IA potable mais on ne sais jamais, peut etre que quelqu'un ici aura une bonne idee.

2

-

3

Tu parle de ton bomberman sur GP32 je suppose (j'ai eplucher pleins forums pour trouver des infos, et je suis tomber sur ton bomberman wink ).
Je vais reflechir quelque temps a ce que tu as ecris, puis je poserais eventuellement d'autres questions.
Merci.

4

Et comment fais-tu bouger ton bomberman quand il n'est pas en danger? En ce moment je le fait bouger au hasard d'une case (haut/bas/droite/gauche) ce qui fait qu'il ne semble pas savoir ou il veut aller.

5

-

6

le hazard peut etre plus ou moins aléatoire
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

7

Tu peux dévelloper ?

8

et bien, si tu fais un random(10), tu auras une réponse entre 0 et 9
si tu fais un random(1000), tu auras une réponse entre 0 et 999
=> dans le second cas, le hasard est plus aléatoire que dans le premier

(enfin, je suppose que c'est un peu ce qu'il voulaitdire)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

9

Je pense plutôt qu'il voulait dire un hasard dans lequel tu élimines certaines possibilités. Par exemple, il y a une bombe dans la colonne d'a côté, on élimine ce déplacement.
Sinon, jfg, pour les déplacements tu pourrais essayer de tirer au sort une direction (parmi celles envisageables), puis une distance maximum à parcourir qui pointera toujours vers une case "croisement", et ensuite, avancer dans cette direction au maximum (si une bombe va exploser dans la colonne suivante tu t'arrêtes), puis agir si nécéssaire.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

10

squale92 n'a pas tt à fait tort, puisqu'au lieu d'avoir 4 possibilités (voire moins) à chaque déplacement, il y en aura moins, ou en tt cas elles ne seront pas équiprobables et donc l'entropie fournie par le générateur aléatoire sera plus faible ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

mon aléatoire pas si aléatoire c'est déterminer de maniere aleatoire le déplacement, mais tout en cassant un peu l'aléatoire

ok c'est compliqué cheeky

En gros

Ton personage va vers le haut, on pars dans le meilleur cas cad que les 4 direction sont possibles.

Donc le personnage monte, logiquement au prochain tour il devrait avoir tandance a monter, disont 50% de chance de continuer vers le haut, mais poru une raison X pitet qu'il va aller a droite ou a gauche, disont qu'on lui accorde 24% pour aller a gauche et 24% pour aller a droite, reste 2% de chance d'aller en bas.

Ensuite tu tire un nombre entre 0 et 100, tu compare ce nombre (0->50 on change pas de direction, 50 -> 74 on troune a gauche, 75 -> 98 on tourne a droite et 99 & 100 on fait demitour)

voila

apres tu peux jouer sur ces valeurs pour donner une "personnalité" a tes bots, et surtout ne pas oublier de pouvoir interdire (ou plutot largement défavoriser) certaines direction si c'est bouché (obstacle ou bombe) afin de permettre d'éviter l'obstacle et/ou faire une "défaillance" de temps a autre ou il se jete sous une flamme ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

12

oué bah voilà, donc moins aléatoire, ça veut dire que les 4 directions ne sont pas équiprobables, ctou happy

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

13

Pour parfaire l'IA, la loi de probabilité du choix de la direction (dans l'exemple de Godzil : 50% tout droit, 24% de chaque côté, 2% demi-tour) devrait voir ces 4 'probabilités de direction' modulées en fonctions de 'paramètres comportementaux', comme la position dans le tableau (ou plus exactement, la direction et la distance du centre du tableau), la position de l'adversaire (ou des adversaires), éventuellement leur direction, la position des bombes posées (ou plus exactement, les cases qui vont incessamment être mortelles, ce qui fait passer à 0 la probabilité de certaines directions), et la position des blocs (destructibles ou non, avec séparation des deux cas) les plus proches.
Et encore, je suis sûr que l'on peut encore trouver d'autres paramètres ...
Ceci commence donc à faire une bonne quantité de paramètres qui autorisent, pour une même situation donnée, un nombre gigantesque de comportements totalement différents et plus ou moins efficaces.

Ensuite, si tous ces paramètres comportementaux ne sont pas codés en dur dans le programme, mais tous rassemblés dans une seule variable externe (une liste), rien n'empêche de créer un metaprogramme qui se charge de faire s'affronter deux IA (lesquelles ont chacune leur propre liste des paramètres comportementaux donnée aléatoirement par le metaprogramme), de leur donner à chacune une note (c'est en fait la liste des paramètres qui est notée) en fonction du résultat (victoire de son propre fait > défaite par stratégie gagnante de l'adversaire (on s'est retrouvé sans échappatoire) =~ victoire par suicide de l'adversaire > suicide sur une bombe de l'adversaire > suicide par une de ses bombes), puis de faire la même chose avec d'autres paires d'IA, avant de croiser les meilleures, puis de faire s'affronter les membres de la nouvelle génération, et ainsi de suite de génération en géneration pour obtenir des comportements de plus en plus performants.
Et oui, c'est ça que l'on appelle les algorithmes génétiques love !

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

14

Merci Godzil. L'idée que tu explique est toute conne mais j'y avais pas penser. Ca va m'inspirer.

" oué bah voilà, donc moins aléatoire, ça veut dire que les 4 directions ne sont pas équiprobables, ctou"
Oui, je comprend maintenant! (mais c'est surtout grace au poste de godzil...).

Ethaniel>> Ben figure toi que j'ai utiliser ta méthode (algorithmes génétiques) pour rendre l'IA de SlimeBall optimale en fonctions des paramètres choisi. 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. Mais en ce qui concerne Bomberman, je ne vais pas appliquer cette méthode.
En plus d'ètre dur à mettre en place, j'ai peur que l'IA obtenu soit efficace seulement contre une autre IA. J'ai eu ce problème avec slimeball; 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...
Mais je parle je parle... Pour l'instant mon IA est pathétique, alors je doit envisager des algorithmes plus terres à terres (plus simple quoi smile ).

15

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 roll ...

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

16

Ok.
J'ai effectivement abusé du terme "génétique" (mais ça faisait classe...).
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'etait précisement pour cette raison que je faisait varier de manière aléatoire les paramètres (~= 5 constantes je crois), tout en sachant que je n'aurais pas explorer toutes les possibilitées.

En ce qui concerne bomberman, l'IA:
-se déplace aléatoirement dans n'importe quelle direction (pour l'instant il y a équiprobabilités entre les 4 directions, mais je vais changer cela)
-ne passe pas par les cases ou une bombe va exploser (avec la grille des valeurs mentionnée par Orion_)
-si elle se retrouve au millieu d'une zone dangereuse (càd je pose une bombe près de l'IA), elle fuit en se dirigeant vers la case non-dangereuse la plus près.

Pour l'instant, l'IA n'a aucun plan à long/cour terme.

17

Au cas où vous voulez des nouvelles du projets: http://oragestudio.free.fr/
L'IA est potable. Je me suis surtout basé sur le post 1/, mais j'ai aussi profiter des post 7/ 9/ 10/. Mais merci quand même Ethaniel et ton bo pavé.

18

AHAH!!! Trop bon : j'ai un Bomberman like a mon nom ^^ top
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#

19

gni
bisoo
love Dude

20

jfg :
gni
bisoo
love Dude

confus smile
Cyril Mottier [Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
Tuto sur l'utilisation de Vertel3 : Cliquez ici

21

fou2

22

magic
"De l'Art de faire des Posts qui ne servent a Rien." (c) Ximoon

15:13 @Ximoon - 29-11-2005
"C'est débile ce sondage, une fois de plus Dude, tu ne sers à rien #hehe#" #love# Il est collector celui là ^^

18:56 @Ximoon - 09-10-2010
"Mince Dude sert à quelque chose %) (pas taper :D )" Owii xD #trilove#