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 ?
Partager