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
608fe6aa
Commit
608fe6aa
authored
May 03, 2020
by
MACE Lloyd
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replace UCT.java
parent
13d6dcba
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
82 additions
and
14 deletions
+82
-14
UCT.java
src/mcts/UCT.java
+82
-14
No files found.
src/mcts/UCT.java
View file @
608fe6aa
...
...
@@ -5,8 +5,8 @@
*/
package
mcts
;
import
java.util.Collections
;
import
java.util.Comparator
;
//
import java.util.Collections;
//
import java.util.Comparator;
/**
*
...
...
@@ -14,23 +14,22 @@ import java.util.Comparator;
*/
public
class
UCT
{
public
static
double
calculUCT
(
int
nbVisiteParent
,
int
nb
Victoire
,
int
nbVisiteEnfant
,
double
coefficientUCT
)
{
public
static
double
calculUCT
(
int
nbVisiteParent
,
double
score
Victoire
,
int
nbVisiteEnfant
,
double
coefficientUCT
)
{
if
(
nbVisiteEnfant
==
0
)
{
return
Integer
.
MAX_VALUE
;
}
return
((
double
)
nbVictoire
/(
double
)
nbVisiteEnfant
+
coefficientUCT
*
Math
.
sqrt
(
Math
.
log
(
nbVisiteParent
)/(
double
)
nbVisiteEnfant
));
return
(
scoreVictoire
/
(
double
)
nbVisiteEnfant
+
coefficientUCT
*
Math
.
sqrt
(
Math
.
log
(
nbVisiteParent
)
/
(
double
)
nbVisiteEnfant
));
}
public
static
Noeud
trouverNoeudPrometteur
(
Noeud
noeud
,
double
coefficient
)
{
public
static
Noeud
trouverNoeudPrometteur
UCT
(
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
().
getNb
Victoire
();
double
scoreVictoireEnfant
=
enfant
.
getEtat
().
getScore
Victoire
();
int
nbVisiteEnfant
=
enfant
.
getEtat
().
getNbVisite
();
double
valeurUCTenfant
=
calculUCT
(
nbVisiteParent
,
nb
VictoireEnfant
,
nbVisiteEnfant
,
coefficient
);
double
valeurUCTenfant
=
calculUCT
(
nbVisiteParent
,
score
VictoireEnfant
,
nbVisiteEnfant
,
coefficient
);
if
(
valeurUCTenfant
>
uctNoeudPrometteur
)
{
uctNoeudPrometteur
=
valeurUCTenfant
;
...
...
@@ -42,12 +41,81 @@ public class UCT {
}
/* // no such element exeption
public static Noeud trouverMeilleurNoeud(Noeud noeud, double coefficient) {
// !! 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
();
return Collections.max(
noeud.getListeEnfant(),
Comparator.comparing(c -> calculUCT(nbVisiteParent, c.getEtat().getNbVictoire(), c.getEtat().getNbVisite(), coefficient)));
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