Commit e262c9d6 authored by CRESCENCE Cassandre's avatar CRESCENCE Cassandre

Upload New File

parent 4445a809
/*
* 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 tictactoecodingame;
import java.lang.Math;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
*
* @author franck.tempet
*/
public class AlgoRechercheAleatoire extends AlgoRecherche{
Random rnd;
public AlgoRechercheAleatoire() {
rnd = new Random();
}
// PHASE DE SELECTION
public static double uctValue(int totalVisit, double nodeWinScore, int nodeVisit) { // méthode pour calculer UCT du noeud enfant d'un noeud parent donné
if (nodeVisit == 0){
return Integer.MAX_VALUE;
}
return nodeWinScore/((double) nodeVisit) + 1,41*Math.sqrt((double) Math.log( (double) (totalVisit/nodeVisit)));
}
public Node selectNodeWithBestUCT(Node parent){ // méthode pour sélectionner le noeud enfant qui a le plus grand UCT
double max = Integer.MIN_VALUE;
int totalVisit = parent.getState().getVisitCount();
for(Coup child : parent.getChildArray()){
double uctValue = uctValue(totalVisit, child.getState().getWinScore(), child.getState().getVisitCount() );
if (uctValue> max){
max = uctValue;
Node selectedNode= child;
}
}
return selectedNode;
}
// PHASE D'EXPANSION
public static void expandNode(Node node){
ArrayList<Coup> coupsPossible = node.getState().getAllPossibleStates();
for( Coup coup : coupsPossible){
State newState = new State(Plateau node.getState().getPlateau() , Joueur node.getParent().getState().getJoueur() , 0, 0););
Node newNode = new Node();
newNode.setState(newState);
newNode.setParent(Node node);
newNode.setChildArray(ArrayList<Coup> newNode.setChildArray() );
}
}
// PHASE DE SIMULATION
public static boolean simulationFromNode(Node node){
State state= node.getState();
Joueur joueur = state.getJoueur();
if (partieTerminee() != true){
randomPlay(Plateau state.getPlateau(), Joueur state.getJoueur(), boolean _ponder);
}
if (vainqueur() == joueur ){
return true;
}
if (vainqueur() != joueur){
return false;
}
}
@Override
public Coup meilleurCoup(Plateau _plateau, Joueur _joueur, boolean _ponder) {
ArrayList<Coup> coups = _plateau.getListeCoups(_joueur);
return coups.get(rnd.nextInt( coups.size()));
}
}
}
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