22[ ![ codecov] ( https://codecov.io/gh/CyCTW/Parallel-MCTS/branch/master/graph/badge.svg?token=LPORRSHSZT )] ( https://codecov.io/gh/CyCTW/Parallel-MCTS ) 
33
44# Parallel Monte Carlo Tree Search  
5- This repo contains the implementation of Parallel Monte Carlo Tree Search with C++.
6- Three parallel method:
7- -  ** Leaf parallelization** 
8- -  ** Root parallelization** 
9- -  ** Tree parallelization** 
5+ This repo implements three methods of Parallel Monte Carlo Tree Search with C++.
6+ 
7+ ** The Three parallel methods:** 
8+ -  Leaf parallelization
9+ -  Root parallelization
10+ -  Tree parallelization
1011
1112Also, we analyze different methods' performance against each other in [ Surakarta] ( https://en.wikipedia.org/wiki/Surakarta_(game) )  Game. 
12- If you're interested in details, here is  the links of  our search:
13+ If you're interested in details, here are  the links to  our search:
1314-  [ Experiment report] ( https://hackmd.io/2I8fuKY0TY-sRNQU4Dcuog ) .
1415-  [ Slides] ( https://docs.google.com/presentation/d/11DV9MijsDh2fgR8W5I8kdCT4u630Bibq6ZfMPpffD6U/edit#slide=id.p ) 
16+ ## Features  
17+ -  CI pipeline (Autobuild, Autotest)
18+ -  Code coverage check
19+ ## Structure  
20+ ``` 
21+ Parallel-MCTS/ 
22+ ├── build 
23+ ├── CMakeLists.txt 
24+ ├── CMakeLists.txt.in 
25+ ├── LICENSE 
26+ ├── README.md 
27+ ├── script 
28+ │   ├── cov.sh 
29+ │   └── record.sh 
30+ ├── src 
31+ │   ├── Agent.h 
32+ │   ├── board.h 
33+ │   ├── config.h 
34+ │   ├── Log.h 
35+ │   ├── main.cpp 
36+ │   ├── MCTS.h 
37+ │   ├── ParallelRoot.h 
38+ │   ├── ParallelTree.h 
39+ │   ├── Policy.h 
40+ │   └── TreeNode.h 
41+ └── unittest 
42+     └── MCTS_UnitTest.cpp 
1543
44+ 4 directories, 17 files 
45+ ``` 
1646## Development Environment  
1747-  Ubuntu 18.04
1848-  GCC 7.5.0
1949-  CMAKE 3.10
2050-  GoogleTest 1.10.0 (latest)
2151
2252## Requirement  
53+ ### Must  
2354-  C++ 17
2455-  OpenMP
2556-  CMAKE (3.10)
57+ ### optional  
58+ -  lcov 
59+ -  gcov 
2660
2761## Build  
2862### Construct build directory (optional, but recommened)  
2963``` 
3064mkdir build 
3165``` 
32- This step create  a ` build `  directory, which build  a clean environment for CMake compiling and building.
66+ This step creates  a ` build `  directory, which builds  a clean environment for CMake compiling and building.
3367### Compile file with CMake  
3468``` 
3569cd build 
3973``` 
4074cmake . 
4175``` 
42- if you don't create ` build `  directory.
76+ if you don't create the  ` build `  directory.
4377### Build file  
4478``` 
4579cmake --build . 
@@ -65,33 +99,35 @@ Usage: mcts [options]
6599
66100Note: -c (count) & -t (time) options can't be specified simultaneously. 
67101
68-    -c  --simCount   <simulationCount>           Set simulation count per step 
69-    -t  --simTime    <simulationTime (second)>   Set simulation time per step 
70-    -T  --threadNum  <threadNum>                 Set number of thread num 
102+    -c  --simCount   <simulationCount>           Set simulation count per step.       default: 1000  
103+    -t  --simTime    <simulationTime (second)>   Set simulation time per step.        default: -1  
104+    -T  --threadNum  <threadNum>                 Set number of thread num.            default: 4  
71105   -p  --policy     <blackAndWhitePolicy>       Set Player's policy  
72-                     <blackPolicy> <whitePolicy> ( choice: Serial, Leaf, Root, Tree. default: Tree Serial) 
106+                     <blackPolicy> <whitePolicy>  (options: Serial, Leaf, Root, Tree) default: Tree Serial) 
107+ 
73108   -m  --method     <blackAndWhiteMethod>       Set Player's arallel methods  
74-                     <blackMethod> <whiteMethod> ( choice: openmp, pthread.  default: openmp ) 
75-    -?  --help                                   Edit config.h to set parameter 
109+                     <blackMethod> <whiteMethod>  (options: openmp, pthread)          default: openmp) 
110+ 
111+    -?  --help                                   Help message. 
76112``` 
77113
78- ### Some Examples :  
79- -  Serial version (Black) v.s. Serial version (White) with simulation count $ 1000$ 
114+ ### Some quick examples :  
115+ -  Serial version (Black) v.s. Serial version (White) with simulation count 1000
80116    ``` 
81117    ./mcts -c 1000 -p Serial 
82118    ``` 
83- - ParallelTree version (Black) v.s. Serial version (White) with simulation time $2s$  
119+ - ParallelTree version (Black) v.s. Serial version (White) with simulation time 2s  
84120    ``` 
85121    ./mcts -t 2 -p Tree Serial 
86122    ``` 
87123*Note: we can't set Count and Time simultaneously, choose only one option.* 
88124
89- - ParallelRoot version (Black) v.s. ParallelLeaf (White) with $4$  thread, both use `openmp` implementation. 
125+ - ParallelRoot version (Black) v.s. ParallelLeaf (White) with 4  thread, both use `openmp` implementation. 
90126    ``` 
91127    ./mcts -T 4 -p Root Tree -m openmp 
92128    ``` 
93129
94- - ParallelRoot version (Black) v.s. ParallelLeaf (White) with $4$  thread. Use `openmp` (Black) and `pthread` (White) implementation. 
130+ - ParallelRoot version (Black) v.s. ParallelLeaf (White) with 4  thread. Use `openmp` (Black) and `pthread` (White) implementation. 
95131    ``` 
96132    ./mcts -T 4 -p Root Leaf -m openmp pthread 
97133    ``` 
@@ -107,9 +143,77 @@ ctest
107143Both command will run the same unittest script stored in `<ProjectRoot>/unittest/MCTS_UnitTest.cpp` 
108144
109145*Note:* 
110- *The first command run test script using Googletest's origin format.* 
111- *The second command run the same test script, but from CMake.* 
146+ *The first command runs the test script using Googletest's origin format.* 
147+ 
148+ *The second command runs the same test script, but from CMake.* 
112149### Explanation 
113- Mainly, the test script check the Monte Carlo Tree Search's simulation count and simulation time works correctly. 
150+ Mainly, the test script checks the Monte Carlo Tree Search's simulation count and simulation time works correctly. 
151+ 
152+ ## CodeCoverage Report  
153+ If you want to see the code coverage report, you should recompile the project with `-DCOVERAGE=ON`  
154+ *Note: default option is `-DCOVERAGE=OFF` because this option will slow down the whole program.* 
155+ 
156+ First return to build directory. 
157+ ``` 
158+ cd <ProjectRoot >/build
159+ ``` 
160+ Then, recompile project with flag `-DCOVERAGE=OFF` 
161+ ``` 
162+ cmake -DCOVERAGE=ON ..
163+ ``` 
164+ Rebuild the project 
165+ ``` 
166+ cmake --build .
167+ ``` 
168+ Last, move to `script` folder and execute the `cov.sh` script. 
169+ ``` 
170+ cd <ProjectRoot >/script
171+ ./cov.sh
172+ ``` 
173+ *Note: you should install `lcov` and `gcov` before execute the script.* 
174+ 
175+ If everything works fine, the script will open a html file, which contains the code coverage report. 
176+ ## Experiment record 
177+ If you want to run multiple games on different policys, and record the result for further analysis, you can check our `record.sh` 
114178
179+ You can move to `script` directory to check the `record.sh` file. 
180+ ``` 
181+ cd <ProjectRoot >/script
182+ ``` 
183+ ### usage 
184+ ``` 
185+ Usage: ./record.sh [ options] 
115186
187+ Note: -c (count) & -t (time) options can't be specified simultaneously.
188+ 
189+    -c  --simCount   <simulationCount >           Set simulation count per step.       default: 1000
190+    -t  --simTime    <simulationTime (second)>   Set simulation time per step.        default: -1
191+    -T  --threadNum  <threadNum >                 Set number of thread num.            default: 4
192+    -p  --policy     <blackAndWhitePolicy >       Set Player's policy 
193+                     <blackPolicy > <whitePolicy >  (options: Serial, Leaf, Root, Tree) default: Tree Serial)
194+ 
195+    -m  --method     <blackAndWhiteMethod >       Set Player's arallel methods 
196+                     <blackMethod > <whiteMethod >  (options: openmp, pthread)          default: openmp)
197+ 
198+ ``` 
199+ 
200+ ### Some quick examples: 
201+ - Serial version (Black) v.s. Serial version (White) with simulation count 1000 
202+     ``` 
203+     ./record.sh -c 1000 -p Serial 
204+     ``` 
205+ - ParallelTree version (Black) v.s. Serial version (White) with simulation time 2s 
206+     ``` 
207+     ./record.sh -t 2 -p Tree Serial 
208+     ``` 
209+ *Note: we can't set Count and Time simultaneously, choose only one option.* 
210+ 
211+ - ParallelRoot version (Black) v.s. ParallelLeaf (White) with 4 thread, both use `openmp` implementation. 
212+     ``` 
213+     ./record.sh -T 4 -p Root Tree -m openmp 
214+     ``` 
215+ 
216+ - ParallelRoot version (Black) v.s. ParallelLeaf (White) with 4 thread. Use `openmp` (Black) and `pthread` (White) implementation. 
217+     ``` 
218+     ./record.sh -T 4 -p Root Leaf -m openmp pthread 
219+     ``` 
0 commit comments