Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Projet_info
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
TRAN Alain
Projet_info
Commits
09add7c7
Commit
09add7c7
authored
May 03, 2020
by
MACE Lloyd
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
a437491d
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
121 additions
and
0 deletions
+121
-0
UCT.java
src/MCTS/UCT.java
+121
-0
No files found.
src/MCTS/UCT.java
0 → 100644
View file @
09add7c7
/*
* 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
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment