/* * 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, int nbVictoire, int nbVisiteEnfant, double coefficientUCT) { if (nbVisiteEnfant == 0) { return Integer.MAX_VALUE; } return ((double) nbVictoire/(double) nbVisiteEnfant + coefficientUCT * Math.sqrt(Math.log(nbVisiteParent)/(double) nbVisiteEnfant)); } public static Noeud trouverNoeudPrometteur(Noeud noeud, double coefficient) { int nbVisiteParent = noeud.getEtat().getNbVisite(); Noeud noeudPrometteur = null; double uctNoeudPrometteur = Integer.MIN_VALUE; for (Noeud enfant : noeud.getListeEnfant()) { int nbVictoireEnfant = enfant.getEtat().getNbVictoire(); int nbVisiteEnfant = enfant.getEtat().getNbVisite(); double valeurUCTenfant = calculUCT(nbVisiteParent, nbVictoireEnfant, nbVisiteEnfant, coefficient); if (valeurUCTenfant > uctNoeudPrometteur) { uctNoeudPrometteur = valeurUCTenfant; noeudPrometteur = enfant; } } return noeudPrometteur; } /* // no such element exeption public static Noeud trouverMeilleurNoeud(Noeud noeud, double coefficient) { int nbVisiteParent = noeud.getEtat().getNbVisite(); return Collections.max( noeud.getListeEnfant(), Comparator.comparing(c -> calculUCT(nbVisiteParent, c.getEtat().getNbVictoire(), c.getEtat().getNbVisite(), coefficient))); } */ }