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

Algorithmes et structures de données Discussion :

Intelligence artificielle pour le morpion


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    proogrammeur amateur
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : proogrammeur amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Par défaut Intelligence artificielle pour le morpion
    Bonjour, Bonsoir à toutes et à tous.
    Je suis actuellement en train de créer un jeu de morpion simple en console.
    J'ai programmé l'intelligence artificielle, (le jeu n'est pas fini mais ce sera secondaire), mais j'ai plusieurs soucis avec.
    Premièrement, le premier problème vient, je pense, de moi. car je ne sais pas où placer la ligner de code pour lui faire jouer son meilleur coup.
    Après de multiples essais, si je place cette ligne n'importe où où cela me semble logique, le programme cesse de fonctionner et renvoies :
    soit "process returned 255 (0xFF)" ou "Process returned -1073741819 (0xC0000005)".
    Je programme sur CodeBolcks.
    Merci d'avance a tous ceux qui m'aideront !

    Le code source de 'IA :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    int IA_joue(int i, int j, int joueur)
    {
     
        noeuds++;
        int joueur_courrrant = joueur;
        ///Donc soit ROND || CROIX
        int joueur_suivant;
        int multiplicateur;
        int maxi, maxj, e;
     
        if(joueur == ROND)
        {
            joueur_suivant = CROIX;
            multiplicateur = 1;
        }
        else
        {
            joueur_suivant = ROND;
            multiplicateur = -1;
        }
     
        int eval = INFINI * multiplicateur;
        ///multiplicateur varie en fonction
        ///du joueur actuel.
     
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                if(plateau_jeu[i][j] == VIDE)
                    ///Si la case est vide :
                {
                    maxi = i;
                    maxj = j;
     
                    jouer_coup(i, j, joueur_courrrant);
                    /// On joue le coup.
     
                    ///afficherPlateau();
                    if(gagnant_jeu(joueur_courrrant) == joueur_courrrant)
                        ///Si un des 2 joueurs a gagné :
                    {
                        eval = multiplicateur;
                         ///retourne l'evaluation (donc soit 1 || -1)
                    }
     
                    else
                    {
                        e = IA_joue(maxi, maxj, joueur_suivant);
                        /// e sera égal a l'evaluation renvoyée par minmax.
     
                        if((joueur_courrrant == ROND && e < eval) ||
                           (joueur_courrrant == CROIX && e > eval))
                           {
                               eval = e;
                           }
                    }
     
                    annuler_coup(i, j, joueur_courrrant);
                    ///Annule le(s) coup(s) joué(s).
                }
            }
        }
     
        return eval;
     ///A quel moment est censée jouer l'IA ?
     /// hypothèses :
        ///avant / après return ?
        ///hors de la fonction minMax ?
        /// dans le main ?
        /// pendant les boucles for() ?
     
    }

    Si vous avez besoin d'une quelconque autre partie du code, Je vous la mettrais sans problème.
    Merci a tous.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Je comprends mal ton code.
    L'IA joue pour les deux joueurs ?
    Pourquoi dans ta fonction d'évaluation tu te casses la tête avec ROND et CROIX ?
    Commence par simple : l'IA joue toujours ROND. Ton code sera plus simple.
    Pourquoi ta fonction jouer l'IA prend en paramètre un i et un j ? Ce sont des coordonnées ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre habitué
    Homme Profil pro
    proogrammeur amateur
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : proogrammeur amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Par défaut
    Non, l'IA joue juste rond. enfin... normalement !
    Elle joue la croix que lorsqu'elle doit simuler le coup de l'adversaire afin d'évaluer l'impact de ce coup.
    oui le i et le j sont des coordonnés.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    les paramètre i et j de ta fonction tels qu'elle est défini ne te servent a rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int IA_joue(int i, int j, int joueur)
    { ...
        for(i=0;i<3;i++)  
        {  for(j=0;j<3;j++) 
            {
    Quand au moment de jouer c'est juste après l'évaluation
    une fois que tu as calculé ta stratégie tu prend la meilleur et tu joue
    en sachant que celle-ci ne s'applique qu'a chaque tour de joueur quand celui-ci est une machine pour l'humain l’évaluation ne sert a rien a moins de décider de faire une aides a la décision pour le joueur humain

  5. #5
    Membre habitué
    Homme Profil pro
    proogrammeur amateur
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : proogrammeur amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Par défaut
    Salut,
    Merci pour ton aide.
    J'ai quelques questions malgré tout, si j'enlève les paramètres i & j, cela ne changera rien ?
    Et pour jouer, juste après l'évaluation c'est a dire a quelle ligne ?
    Si je rajoute juste la ligne "jouer", l'algorithme fonctionnera-t-il ?

    Merci de ton aide !

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    pour moi il fonctionnera pas a aucun moment tu conserve les coordonnée ayant le "maximal de chance" donc impossible de pouvoir rejouer le coup

    a un moment dans ton code il faut que tu fasse un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    MaxI = -1
    MaxJ = -1
    Si JEUX PAS FINI  FAIRE
      POUR I = 0 à 2 FAIRE 
        POUR J = 0 à 2 FAIRE 
        DEBUT
            JOUE(PLATEAU,I,J)    
            Tmp = DETEMINEVALEUR
            SI Tmp  > ValeurBase ALORS
            DEBUT
                ValeurBase = Tmp
                MaxI = I
                MaxJ = J
            FIN
           ANNULE(PLATEAU,I,J)    
        FIN
     FINSI
     JOUE(PLATEAU,MaxI,MaxJ)

  7. #7
    Membre habitué
    Homme Profil pro
    proogrammeur amateur
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : proogrammeur amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Par défaut
    Ah oui, effectivement !
    Mais dans ton code a quoi sont égaux DETEMINEVALEUR & ValeurBase ?
    Et du coup pour l'évaluation, la fonction renvoie ValeurBase non ?

    Merci pour ton aide !

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/01/2018, 08h37
  2. Réponses: 5
    Dernier message: 16/12/2014, 10h09
  3. Choix d'un type intelligence artificiel pour un jeu de carte
    Par acia78 dans le forum Intelligence artificielle
    Réponses: 0
    Dernier message: 13/12/2012, 18h36
  4. [FLASH 8] Intelligence Artificiel Pour Jeux Flash
    Par TRUNKS-SSJ7 dans le forum Flash
    Réponses: 22
    Dernier message: 03/09/2006, 09h47

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