Commit 145d49a1 authored by Louis Bahrman's avatar Louis Bahrman

Ajout de la selection du MCTS, modification et renommage du type Arbre en ArbreMCTS

parent da2aea7b
...@@ -11,48 +11,52 @@ import java.util.ArrayList; ...@@ -11,48 +11,52 @@ import java.util.ArrayList;
* *
* @author senda * @author senda
*/ */
public class Arbre { public class ArbreMCTS {
private Fraction value; private Fraction value;
private ArrayList<Coup> coups; private ArrayList<Coup> coups;
private ArrayList<Arbre> fils; private ArrayList<ArbreMCTS> fils;
// Les constructeurs : // Les constructeurs :
public Arbre (Fraction value, ArrayList coups, ArrayList fils){ public ArbreMCTS (Fraction value, ArrayList coups, ArrayList fils){
this.value = value; this.value = value;
this.fils = fils; this.fils = fils;
this.coups = coups; this.coups = coups;
} }
public Arbre (int den, int num, ArrayList coups, ArrayList fils){ public ArbreMCTS (int den, int num, ArrayList coups, ArrayList fils){
this.value.den = den; this.value.den = den;
this.value.num = num; this.value.num = num;
this.fils = fils; this.fils = fils;
this.coups = coups; this.coups = coups;
} }
public Arbre (Fraction value, Plateau _plateau, Joueur _joueur){ public ArbreMCTS (Fraction value, Plateau _plateau, Joueur _joueur){
this.value = value; this.value = value;
this.coups = _plateau.getListeCoups(_joueur) ; this.coups = _plateau.getListeCoups(_joueur) ;
int a = coups.size(); int a = coups.size();
fils = new ArrayList(); fils = new ArrayList();
for(int i = 0; i < a ; i++){ for(int i = 0; i < a ; i++){
Arbre Arbre_i = new Arbre(new Fraction()); // Attention ! Ce constructeur initialise donc avec des valeurs nulles en racine ! ArbreMCTS Arbre_i = new ArbreMCTS(new Fraction()); // Attention ! Ce constructeur initialise donc avec des valeurs nulles en racine !
fils.add(Arbre_i); fils.add(Arbre_i);
} }
} }
public Arbre (Fraction value){ public ArbreMCTS (Fraction value){
this.value = value; this.value = value;
} }
public Arbre (int den, int num){ public ArbreMCTS (int den, int num){
this.value.den = den; this.value.den = den;
this.value.num = num; this.value.num = num;
} }
// Les accesseurs : // Les accesseurs :
public Fraction getFraction(){
return value;
}
public double getvalue(){ public double getvalue(){
return(value.getNote()); return(value.getNote());
} }
...@@ -93,10 +97,10 @@ public class Arbre { ...@@ -93,10 +97,10 @@ public class Arbre {
} }
else{ else{
int a = this.fils.size(); int a = this.fils.size();
Arbre fils0 = this.fils.get(0); ArbreMCTS fils0 = this.fils.get(0);
int maxfils = fils0.hauteur(); int maxfils = fils0.hauteur();
for (int i = 1; i < a; i++){ for (int i = 1; i < a; i++){
Arbre next = this.fils.get(i); ArbreMCTS next = this.fils.get(i);
maxfils = Math.max(next.hauteur(),maxfils); maxfils = Math.max(next.hauteur(),maxfils);
} }
return(1 + maxfils); return(1 + maxfils);
......
...@@ -5,15 +5,45 @@ ...@@ -5,15 +5,45 @@
*/ */
package tictactoecodingame; package tictactoecodingame;
import java.util.ArrayList;
/** /**
* *
* @author louis * @author louis
*/ */
public class Selection { public class Selection {
ArrayList<indice> indices; ArrayList<Integer> chemin;
public Selection(){
chemin=new ArrayList<>();
}
public Selection(double c){ public Selection(double c, ArbreMCTS a){
Selection s=new Selection();
chemin=SelectionAux(c, a, s, 0).chemin;
}
private Selection SelectionAux(double c, ArbreMCTS a, Selection s, int nbSimulPere){
if (a.estFeuille()){
return s;
}
else {
double coefMax=0;
int indiceSelection=0;
ArrayList<ArbreMCTS> f=a.getfils();
for(int i=0;i<f.size();i++){
ArbreMCTS arbreTeste = f.get(i);
double coef =arbreTeste.getvalue()+c*Math.sqrt(Math.log(nbSimulPere)/arbreTeste.getFraction().getDenominateur());
if (coef>coefMax){
indiceSelection=i;
coefMax=coef;
}
}
ArbreMCTS arbreSelectionne=f.get(indiceSelection);
int nbSimulPereNew=arbreSelectionne.getFraction().getDenominateur();
s.chemin.add(indiceSelection);
return SelectionAux(c,arbreSelectionne,s,nbSimulPereNew);
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment