IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

[IA] jeu d'échec


Sujet :

Intelligence artificielle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [IA] jeu d'échec
    Bonjour à tous.

    Je suis actuellement en dernière année de licence informatique et ce semestre, nous avons un projet à faire. Mes collègues et moi avons choisi de faire un jeu d'échec.

    Aussi, le problème le plus épineux de ce projet nous semble être l'IA puisqu'elle devra être cohérente (et si possible performante). Seulement nous ne savons pas trop comment aborder la problématique qui se pose.

    Aussi, j'aurais aimé savoir s'il existe des types d'algorithme particuliers pour aborder la chose ou avoir votre point de vue sur la question (savoir comment vous aborderiez le problème).

    Je vous remercie d'avance pour votre aide et j'essaierai au possible de poster mes avancées sur la question.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 219
    Points
    219
    Par défaut
    Bonjour,

    As-tu déjà eu des cours d'IA?

    Je penses qu'il faut d'abord choisir quelle type d'IA on souhaite faire.
    Souhaite tu une plutot une IA d'apprentissage automatique qui apprends au fur et a mesure des parties, ou alors plutot une IA planificatrice qui en fonction des coups joués calculera quelle direction prendre pour augmenter ses chances de victoire.

    JE conseille de te renseigner sur l'algorithme MinMax et non pas l'algorithme A* (dit "a star") pour la planification, et sur le Q-learning et/ou réseaux de neurones pour l'apprentissage. Sachant que pour l'apprentissage stocker les données peut poser problème (gros volume).

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Hum.
    zoonel >> A* c'est pour de la recherche de chemin dans un graph
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Renseigne toi en tout premier lieu sur l'algorithme MinMax et son optimisation Alpha-beta, ça te donnera les bases, ensuite tu pourras te poser des questions sur les banques d'ouvertures, l'amélioration de la fonction d'évaluation, l'apprentissage, etc.

    --
    Jedaï

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2005
    Messages : 56
    Points : 219
    Points
    219
    Par défaut
    zoonel >> A* c'est pour de la recherche de chemin dans un graph
    ok, vu le post ci dessus j'ai confondu MinMax et A*; Donc c'est bien min max que je voulais dire

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par zoonel Voir le message
    Bonjour,
    Réseaux de neurones pour l'apprentissage.
    Efficacité plus que douteuse...

    Sinon pas de quoi avoir peur pour l'IA. Vous porurez même en présenter plusieurs, ce sont des problèmes bien documentés...

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    J'avais aussi programmé un logiciel d'echec ya un petit moment, et j'etais arrivé sans trop de difficulté à pondre un truc très largement plus fort que moi (ce qui n'est pas dur, mais c'est tout de même amusant ). Je l'avais interfacé avec winboard, pour ne pas avoir a realiser l'interface graphique.

    Tu trouveras plein de tutos sur le net, donc je ne vais pas tout te refaire, mais en gros une IA de jeux d'echecs se compose de deux parties essentielles :

    - une fonction d'évaluation. C'est elle qui va juger la qualité d'une position. En gros tu lui donne le plateau de jeux, et elle retourne un score, basé sur différent critères. Basiquement, tu peux compter les pièces (en comptant 1 pour un pion, 3 pour un fou, 9 pour une dame, etc.. si mes souvenirs sont bons). Rien que ca te donne deja un truc honnete, mais il vaut mieux raffiner en tenant compte des positions des pieces (cavaliers au centre, tour et fou devant des lignes ouvertes, ...) A priori c'est le coeur de l'intelligence, c'est ca qui determine la "personnalité" de ton programme, et toute sa capacité tactique. Perso, j'avais piqué quelques tables de score pour la position des pieces dans le code source de Crafty (moteur d'echec open source très fort).

    - Une fonction qui va rechercher le meilleur coup. Basiquement, tu listes les coups possibles, puis tu explore recursivement les possibilités jusqu'a une certaine profondeur, et la tu evalues les positions grace a la fonction precedente, puis tu "remontes" en selectionnant a chaque fois le meilleur coup. C'est ce qu'on appelle le MinMax. Il en existe beaucoup de raffinement, par exemple :

    - Alpha Beta : Permet d'obtenir le meme resultat que MinMax mais sans traiter tous les coups. En gros, il est possible dans certain cas de savoir qu'un sous arbre ne contient pas de meilleur coup que le meilleur qu'on a trouvé j.a. présent. Des variantes existent (genre negaMax/nega alpha beta)

    - On peut remarquer aussi que l'elagage alpha beta est d'autant plus efficaces qu'on traite les meilleurs coups en premier. Donc une astuce non debile consiste à : faire un alpha beta de profondeur 1 ; trier les coups de tel sorte que les coups jugés les meilleurs soient en premier. faire un alpha-beta profondeur 2. Re trier, puis profondeur 3.. etc..

    Ca n'a l'air de rien, mais cette methode accelere de maniere hallucinante la recherche des coups. Un autre de ses avantages, est que tu n'as pas a fixer a l'avance la profondeur a laquelle tu vas chercher, ce qui a 2 consequences :

    - tu peux jouer en te basant sur un chronometre (tant qu'on a du temps, on approfondit)
    - pour un temps fixé, si tes choix sont plus limité (moins de coups a traiter) alors l'algo va automatiquement aller chercher plus profond (typiquement : fin de partie, plus bcp de pieces en jeu, bcp de positions bloquées, il va aller te chercher un mat en 10 ou 15 coups...)

    Cette methode s'appelle l'iterative deepening.

    Voila, ce ne sont que quelques pistes mais elles sont "classiques". Et meme si ca ne semble pas relever de l'IA, n'oublie pas que la maniere dont tu stocke le plateau de jeu va avoir une grande imprtance, tout comme la maniere dont tu detecte un mat, un echec, etablit la liste des coups... Bref, n'oublie pas que quand elle fonction, l'IA "joue" virtuellement, un très grand nombre de fois.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Yo! Leinhart, tu serais pas à Limoges, par hasard? xD

    Pasque nous, c'est la même, on a le même projet... Ca va etre dur, mais on va tenter de faire comme jobhertz le conseille, et si possible, de s'appuyer sur du code déjà existant...

    EDIT: j'ai rien dit

Discussions similaires

  1. Projet Jeu d'échec
    Par Layla dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2010, 13h06
  2. Problème du brahmane et du jeu d'échecs
    Par biba13 dans le forum Pascal
    Réponses: 3
    Dernier message: 11/02/2008, 15h10
  3. L'empereur de Chine et le jeu d'échecs
    Par momo1367 dans le forum Pascal
    Réponses: 1
    Dernier message: 04/01/2008, 02h08
  4. Serveur de jeu d'échec en PHP
    Par S_Xavier dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2007, 15h02
  5. Jeu d'échec borland soap
    Par rpoulin dans le forum Web & réseau
    Réponses: 2
    Dernier message: 20/10/2005, 05h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo