Commit 09add7c7 authored by MACE Lloyd's avatar MACE Lloyd

Upload New File

parent a437491d
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mcts;
//import java.util.Collections;
//import java.util.Comparator;
/**
*
* @author Lloyd
*/
public class UCT {
public static double calculUCT(int nbVisiteParent, double scoreVictoire, int nbVisiteEnfant, double coefficientUCT) {
if (nbVisiteEnfant == 0) {
return Integer.MAX_VALUE;
}
return (scoreVictoire / (double) nbVisiteEnfant + coefficientUCT * Math.sqrt(Math.log(nbVisiteParent) / (double) nbVisiteEnfant));
}
public static Noeud trouverNoeudPrometteurUCT(Noeud noeud, double coefficient) {
int nbVisiteParent = noeud.getEtat().getNbVisite();
Noeud noeudPrometteur = null;
double uctNoeudPrometteur = Integer.MIN_VALUE;
for (Noeud enfant : noeud.getListeEnfant()) {
double scoreVictoireEnfant = enfant.getEtat().getScoreVictoire();
int nbVisiteEnfant = enfant.getEtat().getNbVisite();
double valeurUCTenfant = calculUCT(nbVisiteParent, scoreVictoireEnfant, nbVisiteEnfant, coefficient);
if (valeurUCTenfant > uctNoeudPrometteur) {
uctNoeudPrometteur = valeurUCTenfant;
noeudPrometteur = enfant;
}
}
return noeudPrometteur;
}
// !! TESTS PAS FINIS !!
//RAVE SANS UCT
public static double calculTEST(int nbVisiteParent, int nbVisiteEnfant, double scoreDernierCoup, int nbDernierCoup, double coefficientUCT) {
if (nbVisiteEnfant == 0) {
return Integer.MAX_VALUE;
}
return scoreDernierCoup / (double) nbDernierCoup + coefficientUCT * Math.sqrt(Math.log(nbVisiteParent) / (double) nbVisiteEnfant);
}
public static Noeud trouverNoeudPrometteurTEST(Noeud noeud, double coefficientUCT) {
int nbVisiteParent = noeud.getEtat().getNbVisite();
Noeud noeudPrometteur = null;
double testNoeudPrometteur = Integer.MIN_VALUE;
for (Noeud enfant : noeud.getListeEnfant()) {
int nbVisite = enfant.getEtat().getNbVisite();
double scoreDernierCoup = enfant.getEtat().getScoreDernierCoup();
int nbDernierCoup = enfant.getEtat().getNbDernierCoup();
double valeurTEST = calculTEST(nbVisiteParent, nbVisite, scoreDernierCoup, nbDernierCoup, coefficientUCT);
if (valeurTEST > testNoeudPrometteur) {
testNoeudPrometteur = valeurTEST;
noeudPrometteur = enfant;
}
}
return noeudPrometteur;
}
public static double calculRAVE(int nbVisiteParent,
double scoreVictoire, int nbVisiteEnfant, double scoreDernierCoup, int nbDernierCoup, double coefficientUCT, double coefficientRAVE) {
if (nbVisiteEnfant == 0) {
return Integer.MAX_VALUE;
}
double ratioUCT = scoreVictoire / (double) nbVisiteEnfant;
double ratioRAVE = scoreDernierCoup / (double) nbDernierCoup;
double beta = (double) nbDernierCoup / (2 * (double) nbVisiteEnfant + (double) nbDernierCoup
+ coefficientRAVE * (double) nbDernierCoup * (double) nbVisiteEnfant);
//double exploitation = (1-beta) * ratioUCT + beta * ratioRAVE;
//double exploration = coefficientUCT * Math.sqrt(Math.log(nbVisiteParent) / (double) nbVisiteEnfant);
return (1-beta) * ratioUCT + beta * ratioRAVE + ( coefficientUCT * Math.sqrt(Math.log(nbVisiteParent) / (double) nbVisiteEnfant) );
//return (1-beta) * ratioUCT + beta * ratioRAVE;
}
public static Noeud trouverNoeudPrometteurRAVE(Noeud noeud, double coefficientUCT, double coefficientRAVE) {
int nbVisiteParent = noeud.getEtat().getNbVisite();
Noeud noeudPrometteur = null;
double raveNoeudPrometteur = Integer.MIN_VALUE;
for (Noeud enfant : noeud.getListeEnfant()) {
double scoreVictoire = enfant.getEtat().getScoreVictoire();
int nbVisite = enfant.getEtat().getNbVisite();
double scoreDernierCoup = enfant.getEtat().getScoreDernierCoup();
int nbDernierCoup = enfant.getEtat().getNbDernierCoup();
double valeurRAVE = calculRAVE(nbVisiteParent, scoreVictoire, nbVisite, scoreDernierCoup, nbDernierCoup, coefficientUCT, coefficientRAVE);
if (valeurRAVE > raveNoeudPrometteur) {
raveNoeudPrometteur = valeurRAVE;
noeudPrometteur = enfant;
}
}
return noeudPrometteur;
}
}
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