Commit b12b3e5f authored by Timothy LAIRD's avatar Timothy LAIRD

Base commit

parent 16f9b55e
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="1">
<file>
<url>src/tictactoecodingame/AlgoRechercheMCTS.java</url>
<bookmark id="1">
<name/>
<line>97</line>
<key/>
</bookmark>
</file>
</editor-bookmarks>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/tmp/src/tictactoecodingame/Fraction.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/tmp/src/tictactoecodingame/Node.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/tmp/src/tictactoecodingame/Arbre.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/tmp/src/tictactoecodingame/AlgoRechercheMCTS.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/TicTacToe/src/tictactoecodingame/ArbreMCTS.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/TicTacToe/src/tictactoecodingame/Node.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/TicTacToe/src/tictactoecodingame/Fraction.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/TicTacToe/src/tictactoecodingame/AlgoRechercheMCTS.java</file>
<file>file:/C:/Users/timot/OneDrive/Desktop/2019-2020/Projet-Informatique/TicTacToe/src/tictactoecodingame/Player.java</file>
</group>
</open-files>
</project-private>
......@@ -38,8 +38,8 @@ public class AlgoRechercheMCTS extends AlgoRecherche {
}
Joueur winner = simulate(nextNode);
update(winner, nextNode);
}
Node nextPlay = root.nextPlay();
search.root(nextPlay);
return nextPlay.board().getDernierCoup();
......@@ -56,7 +56,7 @@ public class AlgoRechercheMCTS extends AlgoRecherche {
private void expansion(Node leaf){
ArrayList<Coup> coups = leaf.getCoups();
Iterator<Coup> coup = coups.iterator();
Plateau leafPlateau = (new Node(leaf.board(), null, null, null)).board();
Plateau leafPlateau = leaf.board();
Coup currentCoup;
while(coup.hasNext()){
currentCoup = coup.next();
......@@ -68,8 +68,7 @@ public class AlgoRechercheMCTS extends AlgoRecherche {
}
private Joueur simulate(Node node){
Node tmp = new Node(node.board(), node.player(), node.opponent(), node.parent());
Plateau board = tmp.board();
Plateau board = node.board();
Joueur p1 = node.player();Joueur p2 = node.opponent();
Joueur currentPlayer = node.player();
Random seed = new Random();
......@@ -90,7 +89,7 @@ public class AlgoRechercheMCTS extends AlgoRecherche {
Node currentNode = node;
while(currentNode != null){
currentNode.addVisit();
if(currentNode.player() == winner){
if(currentNode.player().equals(winner)){
currentNode.addWin();
}
currentNode = currentNode.parent();
......
......@@ -13,7 +13,7 @@ public class ArbreMCTS {
Node root;
public ArbreMCTS(Joueur pl, Joueur o){
root = new Node(null, pl, o, null);
root = new Node(null, pl, o);
}
public Node root(){
......
......@@ -17,7 +17,7 @@ public class Fraction {
if(visits == 0){
return Integer.MAX_VALUE;
}
return (wins/visits) * 1.41 * Math.sqrt(Math.log(parentVisit) / visits);
return (wins/visits) + 1.41 * Math.sqrt(Math.log(parentVisit) / visits);
}
public static Node bestChild(Node root){
......
......@@ -12,34 +12,20 @@ import java.util.Iterator;
* @author timot
*/
public class Node {
Plateau board;
Coup coup;
Joueur player;
Joueur opponent;
int visits = 0;
int wins = 0;
Node parent;
ArrayList<Node> children;
public Node(Plateau b, Joueur pl, Joueur o, Node pr){
board = b;
public Node(Coup c, Joueur pl, Joueur o){
coup = c;
player = pl;
opponent = o;
parent = pr;
children = new ArrayList<>();
}
public Node(Plateau b){
board = b;
}
public ArrayList<Coup> getCoups(){
return board.getListeCoups(player);
}
public Node parent(){
return parent;
}
public int visits(){
return visits;
}
......@@ -48,10 +34,6 @@ public class Node {
return wins;
}
public Plateau board(){
return board;
}
public Joueur player(){
return player;
}
......@@ -72,10 +54,6 @@ public class Node {
wins++;
}
public void board(Plateau p){
board = p;
}
public Node nextPlay(){
Node bestNode = null;
double winrate = 0;
......
......@@ -18,13 +18,13 @@ public class Player {
// Remplacer ici l'algorithme aléatoire par votre algorithme.
// Créer une nouvelle classe qui hérite de la class AlgoRecherche
AlgoRechercheAleatoire alea = new AlgoRechercheAleatoire( ); // L'ordinateur joue au hasard
AlgoRechercheMCTS alea = new AlgoRechercheMCTS(joueurOrdi, humain); // L'ordinateur joue au hasard
joueurOrdi.setAlgoRecherche(alea);
GrilleTicTacToe3x3 grille = new GrilleTicTacToe3x3();
Arbitre a = new Arbitre(grille, joueurOrdi , joueurOrdi );
Arbitre a = new Arbitre(grille, humain , joueurOrdi );
// Arbitre a = new Arbitre(grille, joueurOrdi , humain );
......@@ -32,6 +32,7 @@ public class Player {
// Pour lancer un tournooi de 100 parties en affichant la grille du jeu
//a.startTournament(1000 , false);
}
}
......
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