cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 24 oct. 2009 à 13:06
Bonjour,
Cette remarque est tout à fait correcte. Je ne me rappelle plus exactement du code que j'ai fait (il est pas récent), mais la fonction d'heuristique choisie n'est effectivement pas adaptée (ou suffisante) pour ce jeu.
En jetant un coup d'oeil rapide dans la source, je dirais qu'il faut probablement, dans la property IsLeaf de la classe Game, mettre une valeur plus adaptée pour la variable _gameValue afin de donner +/- d'importance à certaines situations/positions.
Avec .NET 4 il y a aussi certainement pas mal d'améliorations qui pourraient être faites en utilisant Parallel Framework...
LuisL
Messages postés6Date d'inscriptionsamedi 23 février 2008StatutMembreDernière intervention24 octobre 2009 24 oct. 2009 à 12:36
Bonjour,
Bravo. Le code est très clair et bien construit.
Vous émettez une remarque sur les performances de l'IA, voici mon humble avis.
Votre code est basé sur la recherche d'un coup gagnant au tic-tac-toe où l'on peut se permettre de chercher toutes les combinaisons.
Donc, on ne note que les feuilles de l'arbre de recherche (Partie nulle : 0 ou coup gagnant : 1 ou -1).
Pour le puissance 4, quand la profondeur de recherche est atteinte sans coup gagnant, il faut noter autre chose que Game.Value=0. L'IA ne cherchera jamais à gagner car tout autre grille non gagnante vaut zero.
Il faut donc savoir évaluer la grille à tout moment et lui donner un score.
Un exemple trivial : une grille contenant 3 pions alignés avec un trou adjacent est bien notée, alors que 3 pions alignés et encerclés par par les pions adverses vaut un score nul.
Il faut savoir aussi que les pions ne sont pas toujours alignés. Il faut vérifier d'autres combinaisons. (pion=1 et trou=0) 1110 , 1011, 1101, 0111.
Il faut aussi vérifier pour 2 pions (0011, 0101, 1001, 1010, 1100, 0110)
Il faut aussi noter 1 pion (0001, 0010, 0100, 1000)
Bref, il faut fortement noter 3 pions potentiellement gagnants, moyennement noter 2 pions potentiellement gagnants et faiblement noter 1 pion.
La note finale est la note donnée aux pions de l'ordinateur ôtée de la note des pions du joueur.
A partir de là, il faut changer le score pour une grille gagnante en 1000000 et -1000000 pour faire la différence avec l'évaluation courante d'une grille.
Conclusion : L'algorithme de recherche aide à la performance alors que la fonction d'évaluation est primordiale pour que l'ordinateur soit un adversaire correct.
Cordialement.
Luis.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 2 févr. 2007 à 21:06
Bah c'est léger ;-)
Ce qui est pas mal, c'est de découvrir les algorithmes qui tournent la derrière!
romagny13
Messages postés687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 2 févr. 2007 à 18:51
Génial !!
non seulement cela donne envie de jouer à puissance 4
mais vu le code qu'il y a derriere en plus ...
je vais finir par me mettre moi aussi a developper des jeux avec toutes les excellentes sources de Bidou :p
24 oct. 2009 à 13:06
Cette remarque est tout à fait correcte. Je ne me rappelle plus exactement du code que j'ai fait (il est pas récent), mais la fonction d'heuristique choisie n'est effectivement pas adaptée (ou suffisante) pour ce jeu.
En jetant un coup d'oeil rapide dans la source, je dirais qu'il faut probablement, dans la property IsLeaf de la classe Game, mettre une valeur plus adaptée pour la variable _gameValue afin de donner +/- d'importance à certaines situations/positions.
Avec .NET 4 il y a aussi certainement pas mal d'améliorations qui pourraient être faites en utilisant Parallel Framework...
24 oct. 2009 à 12:36
Bravo. Le code est très clair et bien construit.
Vous émettez une remarque sur les performances de l'IA, voici mon humble avis.
Votre code est basé sur la recherche d'un coup gagnant au tic-tac-toe où l'on peut se permettre de chercher toutes les combinaisons.
Donc, on ne note que les feuilles de l'arbre de recherche (Partie nulle : 0 ou coup gagnant : 1 ou -1).
Pour le puissance 4, quand la profondeur de recherche est atteinte sans coup gagnant, il faut noter autre chose que Game.Value=0. L'IA ne cherchera jamais à gagner car tout autre grille non gagnante vaut zero.
Il faut donc savoir évaluer la grille à tout moment et lui donner un score.
Un exemple trivial : une grille contenant 3 pions alignés avec un trou adjacent est bien notée, alors que 3 pions alignés et encerclés par par les pions adverses vaut un score nul.
Il faut savoir aussi que les pions ne sont pas toujours alignés. Il faut vérifier d'autres combinaisons. (pion=1 et trou=0) 1110 , 1011, 1101, 0111.
Il faut aussi vérifier pour 2 pions (0011, 0101, 1001, 1010, 1100, 0110)
Il faut aussi noter 1 pion (0001, 0010, 0100, 1000)
Bref, il faut fortement noter 3 pions potentiellement gagnants, moyennement noter 2 pions potentiellement gagnants et faiblement noter 1 pion.
La note finale est la note donnée aux pions de l'ordinateur ôtée de la note des pions du joueur.
A partir de là, il faut changer le score pour une grille gagnante en 1000000 et -1000000 pour faire la différence avec l'évaluation courante d'une grille.
Conclusion : L'algorithme de recherche aide à la performance alors que la fonction d'évaluation est primordiale pour que l'ordinateur soit un adversaire correct.
Cordialement.
Luis.
2 févr. 2007 à 21:06
Ce qui est pas mal, c'est de découvrir les algorithmes qui tournent la derrière!
2 févr. 2007 à 18:51
non seulement cela donne envie de jouer à puissance 4
mais vu le code qu'il y a derriere en plus ...
je vais finir par me mettre moi aussi a developper des jeux avec toutes les excellentes sources de Bidou :p