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

avec Java Discussion :

Structure d'arbre pour IA


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut Structure d'arbre pour IA
    Bonsoir à vous tous,

    je me suis dit que j'allais faire une structure d'arbre pour représenter les différentes possibilité de l'IA


    Déjà, ma première question; pensez vous qu'un arbre soit le plus adapté pour l'études des coups, c'est à dire, jouer un coup, imaginer le coup suivant etc etc; finir la partie sous la forme d'hypothèses, faire ça plusieurs fois avec plusieurs coups et remonter le coup qui apporte le plus de probabilité de victoire.

    Je sais pas si je suis très clair lol



    Pour représenter tout ça, j'ai ébauché les trois classes suivantes, et je voulais votre avis; est ce que ces classes représenteront bien une structure d'arbre ? Bien sûr je n'ai pas vraiment implémenter les fonctions pour le moment j'essais de me concentrer sur la structure afin d'avoir la base du code.


    J'ai donc la classe principale


    A noter que partie c'est la classe qui me permet de jouer et qui stocke toutes les informations relatives à une partie donné.

    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
     
    /*
     * La racine de l'arbre est représenté par le premier node
     * Noeud représente l'ensemble des coups possible de niveau k+1 depuis la racine de niveau k
     * Feuille représente l'état terminal de l'arbre ou d'une sous partie de l'arbre
     * */
     
    public class ArbreGo {
    	public Noeud node;
    	public Feuille leaf; //pas sur de l'utilité ici, après tout la feuille devrait théoriquement se trouver dans la succession de node
     
     
    	public ArbreGo(Partie pOld,Partie pNew){
    		//pour le premier coup pOld et pNew seront les mêmes
    		Noeud nd=new Noeud(pOld,pNew);
    		this.node=nd;
    	}
    }
    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
    20
    21
    22
    /*Un noeud est caractérisé par l'état de la partie actuel
     * l'état de la partie du noeud précédent
     * et une liste des noeuds suivant ou une Feuille s'il s'agit d'un 
     * noeud terminal de l'arbre ou du sous arbre ainsi qu'un entier 
     * pour remonter la valeur de la feuille*/
     
    public class Noeud {
    	public Partie father;
    	public Partie current;
    	public ArrayList<Noeud> nodeList;
    	public Feuille nodeTerminal;
    	public int valFeuille;
     
    	public Noeud(Partie ancestor,Partie actual){
    		this.father=ancestor;
    		this.current=actual;
    	}
     
    	public Noeud(Feuille leaf){
    		this.nodeTerminal=leaf;
    	}
    }

    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
    20
    21
    22
    23
     
    /*Une feuille est caractérisé par l'état actuel de la partie et la valeur 
     * estimé du score
     * */
     
    public class Feuille {
    	public Partie finalGame;
    	public int value;
     
     
    	public Feuille(Partie p){
    		this.finalGame=p;
    	}
     
    	public int getValue(){
    		return this.value;
    	}
     
    	public void evaluateValue(){
    		//fonction d'évaluation du score potentiel
    	}
     
    }

    L'idée principale c'est donc qu'un arbre est constitué de Noeud.

    Un Noeud peut donner naissance à d'autres Noeuds OU à une feuille

    Et j'insiste bien sur le OU car c'est comme cela que je l'imagine.


    Sa me gêne un peu parce que au final rien n'empêche de mélanger des attributs d'un Noeud feuille avec un Noeud qui donne naissance à d'autres Noeuds.


    Du coup je me dis si ce genre de soucis survient c'est surement parce que j'ai mal pensé ma structure.
    Qu'en pensez vous ?

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Alors, quand tu créées un arbre, techniquement, tu as :
    - un noeud de base (root)
    - des liens vers des noeuds fils

    ET C'EST TOUT !
    Une feuille est un noeud qui n'a pas de fils. C'est une propriété du noeud, pas un objet en tant que tel (sauf si cette particularité lui donne des fonctions supplémentaires)
    Eventuellement, pour faciliter le parcours, un fils peut avoir un lien vers son père (ce qui permet de remonter l'arbre jusqu'à la racine), mais ça augmente la complexité si on doit ajouter des éléments une fois l'arbre construit.

    Donc pas de classe arbre qui contient les noeuds (ou alors juste pour référencer le noeud racine, mais pourquoi ne pas référencer uniquement le noeud racine?), pas de classe feuille qui se branche sur un noeud (dans ton schéma actuel, rien n'empêche un noeud qui a une feuille d'avoir une liste de noeuds fils en plus...).


    Si tu veux absolument garder cette structure et implémenter ce OU, il faudra passer toutes tes variables de classe en private, mettre deux constructeur (un pour créer une "feuille" et un pour créer un "noeud avec des fils"), mais tu ne pourras pas implémenter correctement le fait qu'on puisse avoir envie d'ajouter des fils à une feuille... Ce qui sous-entend effectivement un problème dans ton modèle objet.
    Problème qui n'existe pas si tout élément est un noeud.
    Je ne suis pas mort, j'ai du travail !

Discussions similaires

  1. Structure de données pour gros volume de données
    Par white_angel_22 dans le forum Langage
    Réponses: 9
    Dernier message: 01/02/2007, 11h58
  2. probleme avec une "structure en arbre"
    Par kamouminator dans le forum C
    Réponses: 1
    Dernier message: 07/11/2006, 22h21
  3. structure de table pour un organigramme
    Par thyphoon dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/10/2006, 12h05
  4. Structure de données pour recherche rapide
    Par socrate dans le forum C
    Réponses: 1
    Dernier message: 18/06/2006, 14h49
  5. Réponses: 11
    Dernier message: 18/11/2005, 11h47

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