Permalink
Please sign in to comment.
Showing
with
871 additions
and 0 deletions.
- +3 −0 .gitignore
- +3 −0 .gitmodules
- 0 AlphaGo/__init__.py
- 0 AlphaGo/ai.py
- +83 −0 AlphaGo/go.py
- +5 −0 AlphaGo/mcts.py
- 0 AlphaGo/models/__init__.py
- 0 AlphaGo/models/policy.py
- 0 AlphaGo/models/value.py
- 0 AlphaGo/training/gen_value_positions.py
- 0 AlphaGo/training/train_rl.py
- 0 AlphaGo/training/train_supervised.py
- 0 AlphaGo/training/train_value.py
- +27 −0 CONTRIBUTING.md
- +21 −0 LICENSE
- +3 −0 README.md
- +109 −0 data/expert_play/friday_tournament.sgf
- +275 −0 data/expert_play/monday_tournament.sgf
- +84 −0 data/expert_play/thursday_tournament.sgf
- +93 −0 data/expert_play/tuesday_tournament.sgf
- +85 −0 data/expert_play/wednesday_tournament.sgf
- 0 data/self_play/s_a_z_tuples_here_format_TBD
- 0 data/trained_models/h5_files_here_by_hyperparamer_UID
- 0 interface/client/simple_client_here_possibly_Wgo
- 0 interface/opponents/pachi/pachi.py
- 0 interface/server/simple_server_here
- +7 −0 requirements.txt
- 0 tests/__init__.py
- +73 −0 tests/test_gamestate.py
3
.gitignore
@@ -0,0 +1,3 @@ | ||
+*.pyc | ||
+*.npy | ||
+*.h5 |
3
.gitmodules
@@ -0,0 +1,3 @@ | ||
+[submodule "interface/opponents/pachi/pachi"] | ||
+ path = interface/opponents/pachi/pachi | ||
+ url = https://github.com/pasky/pachi |
0
AlphaGo/__init__.py
No changes.
0
AlphaGo/ai.py
No changes.
83
AlphaGo/go.py
@@ -0,0 +1,83 @@ | ||
+import numpy as np | ||
+ | ||
+WHITE = -1 | ||
+BLACK = +1 | ||
+EMPTY = 0 | ||
+ | ||
+class GameState(object): | ||
+ """State of a game of Go and some basic functions to interact with it | ||
+ """ | ||
+ | ||
+ def __init__(self, size=19): | ||
+ self.board = np.zeros((size, size)) | ||
+ self.board.fill(EMPTY) | ||
+ self.size = size | ||
+ self.turns_played = 0 | ||
+ self.current_player = BLACK | ||
+ | ||
+ def copy(self): | ||
+ """get a copy of this Game state | ||
+ """ | ||
+ other = GameState(self.size) | ||
+ other.board = self.board.copy() | ||
+ other.turns_played = self.turns_played | ||
+ other.current_player = self.current_player | ||
+ return other | ||
+ | ||
+ def is_legal(self, action): | ||
+ """determine if the given action (x,y tuple) is a legal move | ||
+ """ | ||
+ (x,y) = action | ||
+ empty = self.board[x][y] == EMPTY | ||
+ on_board = x >= 0 and y >= 0 and x < self.size and y < self.size | ||
+ suicide = False # todo | ||
+ ko = False # todo | ||
+ return empty and on_board and (not suicide) and (not ko) | ||
+ | ||
+ def do_move(self, action): | ||
+ """Play current_player's color at (x,y) | ||
+ | ||
+ If it is a legal move, current_player switches to the other player | ||
+ If not, an IllegalMove exception is raised | ||
+ """ | ||
+ (x,y) = action | ||
+ if self.is_legal((x,y)): | ||
+ self.board[x][y] = self.current_player | ||
+ self.current_player = -self.current_player | ||
+ self.turns_played += 1 | ||
+ else: | ||
+ raise IllegalMove(str((x,y))) | ||
+ | ||
+ def symmetries(self): | ||
+ """returns a list of 8 GameState objects: | ||
+ all reflections and rotations of the current board | ||
+ | ||
+ does not check for duplicates | ||
+ """ | ||
+ copies = [self.copy() for i in range(8)] | ||
+ # copies[0] is the original. | ||
+ # rotate CCW 90 | ||
+ copies[1].board = np.rot90(self.board,1) | ||
+ # rotate 180 | ||
+ copies[2].board = np.rot90(self.board,2) | ||
+ # rotate CCW 270 | ||
+ copies[3].board = np.rot90(self.board,3) | ||
+ # mirror left-right | ||
+ copies[4].board = np.fliplr(self.board) | ||
+ # mirror up-down | ||
+ copies[5].board = np.flipud(self.board) | ||
+ # mirror \ diagonal | ||
+ copies[6].board = np.transpose(self.board) | ||
+ # mirror / diagonal (equivalently: rotate 90 CCW then flip LR) | ||
+ copies[7].board = np.fliplr(copies[1].board) | ||
+ return copies | ||
+ | ||
+ def from_sgf(self, sgf_string): | ||
+ raise NotImplementedError() | ||
+ | ||
+ def to_sgf(self, sgf_string): | ||
+ raise NotImplementedError() | ||
+ | ||
+ | ||
+class IllegalMove(Exception): | ||
+ pass |
5
AlphaGo/mcts.py
@@ -0,0 +1,5 @@ | ||
+class MCTS(object): | ||
+ pass | ||
+ | ||
+class ParallelMCTS(MCTS): | ||
+ pass |
0
AlphaGo/models/__init__.py
No changes.
0
AlphaGo/models/policy.py
No changes.
0
AlphaGo/models/value.py
No changes.
0
AlphaGo/training/gen_value_positions.py
No changes.
0
AlphaGo/training/train_rl.py
No changes.
0
AlphaGo/training/train_supervised.py
No changes.
0
AlphaGo/training/train_value.py
No changes.
@@ -0,0 +1,27 @@ | ||
+## Git guide for this project | ||
+ | ||
+Get familiar with git's collaboration model - there are | ||
+[plenty](http://rogerdudler.github.io/git-guide/) | ||
+[of](https://guides.github.com/introduction/flow/) | ||
+[resources](https://www.atlassian.com/git/tutorials/syncing) | ||
+for this! | ||
+ | ||
+Fork this repository, and push all your changes to your copy. Make sure your branch is up to date with the central repository before making a pull request. [Git-scm](https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows#Integration-Manager-Workflow) describes this model well. | ||
+ | ||
+Follow these guidelines in particular: | ||
+ | ||
+1. keep `upstream/master` functional | ||
+1. write useful commit messages | ||
+1. `commit --amend` or `rebase` to avoid publishing a series of "oops" commits (better done on your own branch, not `master`) ([read this](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History)) | ||
+1. ..but don't modify published history | ||
+1. prefer `rebase master` to `merge master`, again for the sake of keeping histories clean. Don't do this if you're not totally comfortable with how `rebase` works. | ||
+1. track issues via GitHub's tools | ||
+ | ||
+## Coding guide | ||
+ | ||
+We are using Python 2.7. I recommend using `virtualenv` to set up an environment; [requirements.txt](requirements.txt) contains the necessary python modules. Beyond that, follow these guidelines: | ||
+ | ||
+1. remember that ["code is read more often than it is written"](https://www.python.org/dev/peps/pep-0008) | ||
+1. avoid premature optimization. instead, be pedantic and clear with code and we will make targeted optimizations later using a profiler | ||
+1. write [tests](https://docs.python.org/2/library/unittest.html). These are scripts that essentially try to break your own code and make sure your classes and functions can handle what is thrown at them | ||
+1. [document](http://epydoc.sourceforge.net/docstrings.html) every class and function, comment liberally |
21
LICENSE
@@ -0,0 +1,21 @@ | ||
+The MIT License (MIT) | ||
+ | ||
+Copyright (c) 2016 University of Rochester | ||
+ | ||
+Permission is hereby granted, free of charge, to any person obtaining a copy | ||
+of this software and associated documentation files (the "Software"), to deal | ||
+in the Software without restriction, including without limitation the rights | ||
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
+copies of the Software, and to permit persons to whom the Software is | ||
+furnished to do so, subject to the following conditions: | ||
+ | ||
+The above copyright notice and this permission notice shall be included in all | ||
+copies or substantial portions of the Software. | ||
+ | ||
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
+SOFTWARE. |
@@ -0,0 +1,3 @@ | ||
+# AlphaGoReplication | ||
+ | ||
+A replication of DeepMind's 2016 Nature publication, "Mastering the game of Go with deep neural networks and tree search," details of which can be found [on their website](http://deepmind.com/alpha-go.html). |
109
data/expert_play/friday_tournament.sgf
@@ -0,0 +1,109 @@ | ||
+(;PB[Fan Hui]PW[AlphaGo]KM[7.5]HA[0]SZ[19]TM[3600]OT[1 moves / 30 sec]RU[Chinese]RE[W+R] | ||
+;B[dp] | ||
+;W[pp];B[cd] | ||
+;W[pd];B[nc] | ||
+;W[qf];B[ic] | ||
+;W[cj];B[ci] | ||
+;W[di];B[ch] | ||
+;W[dj];B[dh] | ||
+;W[cn];B[ei] | ||
+;W[fq];B[eo] | ||
+;W[cq];B[cl] | ||
+;W[dl];B[cp] | ||
+;W[dq];B[dm] | ||
+;W[cm];B[el] | ||
+;W[dk];B[bl] | ||
+;W[bk];B[dn] | ||
+;W[bm];B[gp] | ||
+;W[gq];B[hp] | ||
+;W[iq];B[pb] | ||
+;W[qc];B[ld] | ||
+;W[ec];B[dc] | ||
+;W[db];B[ed] | ||
+;W[cc];B[dd] | ||
+;W[bb];B[eb] | ||
+;W[fc];B[fb] | ||
+;W[bd];B[da] | ||
+;W[cb];B[be] | ||
+;W[ac];B[ek] | ||
+;W[bi];B[bh] | ||
+;W[fd];B[gb] | ||
+;W[id];B[jd] | ||
+;W[hc];B[hb] | ||
+;W[jc];B[ib] | ||
+;W[md];B[je] | ||
+;W[mc];B[me] | ||
+;W[nd];B[lb] | ||
+;W[lc];B[kc] | ||
+;W[le];B[ai] | ||
+;W[bo];B[lf] | ||
+;W[kd];B[jb] | ||
+;W[ej];B[fj] | ||
+;W[fi];B[bj] | ||
+;W[eh];B[ak] | ||
+;W[gj];B[fk] | ||
+;W[ef];B[fe] | ||
+;W[gk];B[ck] | ||
+;W[ei];B[fm] | ||
+;W[hh];B[ji] | ||
+;W[bp];B[ij] | ||
+;W[ff];B[ge] | ||
+;W[hl];B[jl] | ||
+;W[im];B[jo] | ||
+;W[jm];B[km] | ||
+;W[kn];B[jn] | ||
+;W[kl];B[lm] | ||
+;W[jk];B[ll] | ||
+;W[kk];B[ik] | ||
+;W[il];B[lk] | ||
+;W[kj];B[mi] | ||
+;W[kh];B[jh] | ||
+;W[lj];B[mj] | ||
+;W[lh];B[ke] | ||
+;W[mg];B[lo] | ||
+;W[qm];B[ne] | ||
+;W[oe];B[ld] | ||
+;W[fp];B[hn] | ||
+;W[fo];B[gn] | ||
+;W[og];B[mb] | ||
+;W[od];B[qq] | ||
+;W[qp];B[pq] | ||
+;W[oq];B[or] | ||
+;W[nr];B[rp] | ||
+;W[ro];B[op] | ||
+;W[nq];B[rr] | ||
+;W[sp];B[sq] | ||
+;W[rq];B[gl] | ||
+;W[hk];B[rp] | ||
+;W[pr];B[qr] | ||
+;W[rq];B[nh] | ||
+;W[ng];B[rp] | ||
+;W[mn];B[ln] | ||
+;W[rq];B[gi] | ||
+;W[hi];B[rp] | ||
+;W[ce];B[so] | ||
+;W[ee];B[oo] | ||
+;W[pj];B[lr] | ||
+;W[pn];B[rn] | ||
+;W[on];B[mo] | ||
+;W[nk];B[mk] | ||
+;W[jr];B[qk] | ||
+;W[pk];B[qj] | ||
+;W[qi];B[rl] | ||
+;W[ri];B[kr] | ||
+;W[kq];B[lq] | ||
+;W[kp];B[lp] | ||
+;W[rm];B[sm] | ||
+;W[ql];B[po] | ||
+;W[rk];B[qb] | ||
+;W[rb];B[ra] | ||
+;W[rc];B[oc] | ||
+;W[hq];B[gc] | ||
+;W[de];B[hf] | ||
+;W[gh];B[bf] | ||
+;W[ig];B[jg] | ||
+;W[if];B[ie] | ||
+;W[ep];B[do] | ||
+;W[fn];B[ip] | ||
+;W[jq];B[ko] | ||
+;W[no]) |
275
data/expert_play/monday_tournament.sgf
@@ -0,0 +1,275 @@ | ||
+(;GM[1]FF[4]CA[UTF-8]AP[CGoban:3]ST[2] | ||
+RU[Chinese]SZ[19]KM[7.50]TM[3600] | ||
+PW[AlphaGo]PB[Fan Hui]BR[2p]DT[2015-10-05]RE[W+2.50] | ||
+;B[pd] | ||
+;W[dd] | ||
+;B[pp] | ||
+;W[dq] | ||
+;B[co] | ||
+;W[dl] | ||
+;B[dn] | ||
+;W[fp] | ||
+;B[bq] | ||
+;W[jq] | ||
+;B[cf] | ||
+;W[ch] | ||
+;B[fd] | ||
+;W[df] | ||
+;B[dg] | ||
+;W[cg] | ||
+;B[dc] | ||
+;W[ce] | ||
+;B[cc] | ||
+;W[hc] | ||
+;B[fb] | ||
+;W[nc] | ||
+;B[qf] | ||
+;W[pb] | ||
+;B[bf] | ||
+;W[be] | ||
+;B[ef] | ||
+;W[de] | ||
+;B[qc] | ||
+;W[kc] | ||
+;B[qn] | ||
+;W[cm] | ||
+;B[cr] | ||
+;W[mq] | ||
+;B[oq] | ||
+;W[qm] | ||
+;B[pm] | ||
+;W[ql] | ||
+;B[rn] | ||
+;W[pl] | ||
+;B[om] | ||
+;W[qi] | ||
+;B[hq] | ||
+;W[hp] | ||
+;B[gq] | ||
+;W[gp] | ||
+;B[iq] | ||
+;W[ip] | ||
+;B[jr] | ||
+;W[kq] | ||
+;B[er] | ||
+;W[rg] | ||
+;B[qg] | ||
+;W[rf] | ||
+;B[re] | ||
+;W[qh] | ||
+;B[kr] | ||
+;W[ln] | ||
+;B[sf] | ||
+;W[rh] | ||
+;B[qb] | ||
+;W[fe] | ||
+;B[el] | ||
+;W[ek] | ||
+;B[fk] | ||
+;W[ej] | ||
+;B[fl] | ||
+;W[dm] | ||
+;B[fj] | ||
+;W[il] | ||
+;B[fi] | ||
+;W[ei] | ||
+;B[fh] | ||
+;W[gd] | ||
+;B[dh] | ||
+;W[ci] | ||
+;B[di] | ||
+;W[cj] | ||
+;B[fn] | ||
+;W[em] | ||
+;B[hn] | ||
+;W[in] | ||
+;B[en] | ||
+;W[oo] | ||
+;B[np] | ||
+;W[nn] | ||
+;B[po] | ||
+;W[hm] | ||
+;B[fm] | ||
+;W[nl] | ||
+;B[og] | ||
+;W[nr] | ||
+;B[or] | ||
+;W[nh] | ||
+;B[oj] | ||
+;W[ol] | ||
+;B[oh] | ||
+;W[ni] | ||
+;B[oi] | ||
+;W[ng] | ||
+;B[nf] | ||
+;W[mf] | ||
+;B[ne] | ||
+;W[me] | ||
+;B[gc] | ||
+;W[hb] | ||
+;B[bd] | ||
+;W[ed] | ||
+;B[fc] | ||
+;W[ff] | ||
+;B[ae] | ||
+;W[bg] | ||
+;B[af] | ||
+;W[eh] | ||
+;B[fg] | ||
+;W[eg] | ||
+;B[ge] | ||
+;W[hd] | ||
+;B[gf] | ||
+;W[ee] | ||
+;B[if] | ||
+;W[fa] | ||
+;B[ga] | ||
+;W[gb] | ||
+;B[ea] | ||
+;W[ec] | ||
+;B[eb] | ||
+;W[nd] | ||
+;B[je] | ||
+;W[pe] | ||
+;B[oe] | ||
+;W[od] | ||
+;B[of] | ||
+;W[pc] | ||
+;B[qd] | ||
+;W[jh] | ||
+;B[kd] | ||
+;W[lc] | ||
+;B[nj] | ||
+;W[hh] | ||
+;B[hg] | ||
+;W[mj] | ||
+;B[mk] | ||
+;W[lj] | ||
+;B[nk] | ||
+;W[lk] | ||
+;B[pa] | ||
+;W[rm] | ||
+;B[mp] | ||
+;W[lp] | ||
+;B[lr] | ||
+;W[lq] | ||
+;B[bn] | ||
+;W[qq] | ||
+;B[rp] | ||
+;W[rq] | ||
+;B[qp] | ||
+;W[ag] | ||
+;B[ad] | ||
+;W[cp] | ||
+;B[bp] | ||
+;W[oa] | ||
+;B[qa] | ||
+;W[dr] | ||
+;B[ds] | ||
+;W[ob] | ||
+;B[ml] | ||
+;W[nm] | ||
+;B[pn] | ||
+;W[hj] | ||
+;B[kg] | ||
+;W[jg] | ||
+;B[kf] | ||
+;W[kh] | ||
+;B[bl] | ||
+;W[bm] | ||
+;B[am] | ||
+;W[bk] | ||
+;B[jc] | ||
+;W[jb] | ||
+;B[lm] | ||
+;W[km] | ||
+;B[mn] | ||
+;W[mo] | ||
+;B[mm] | ||
+;W[no] | ||
+;B[kl] | ||
+;W[jm] | ||
+;B[ll] | ||
+;W[lg] | ||
+;B[jk] | ||
+;W[cl] | ||
+;B[qj] | ||
+;W[rj] | ||
+;B[gm] | ||
+;W[ho] | ||
+;B[al] | ||
+;W[ak] | ||
+;B[an] | ||
+;W[ic] | ||
+;B[mr] | ||
+;W[nq] | ||
+;B[ns] | ||
+;W[op] | ||
+;B[pq] | ||
+;W[jd] | ||
+;B[pj] | ||
+;W[sg] | ||
+;B[ii] | ||
+;W[se] | ||
+;B[sd] | ||
+;W[ih] | ||
+;B[ji] | ||
+;W[hi] | ||
+;B[ie] | ||
+;W[ld] | ||
+;B[ke] | ||
+;W[he] | ||
+;B[gg] | ||
+;W[eq] | ||
+;B[fq] | ||
+;W[ep] | ||
+;B[cq] | ||
+;W[gn] | ||
+;B[ki] | ||
+;W[li] | ||
+;B[ik] | ||
+;W[sn] | ||
+;B[so] | ||
+;W[sm] | ||
+;B[dp] | ||
+;W[eo] | ||
+;B[id] | ||
+;W[jc] | ||
+;B[do] | ||
+;W[fo] | ||
+;B[hk] | ||
+;W[hl] | ||
+;B[cb] | ||
+;W[ph] | ||
+;B[pg] | ||
+;W[qk] | ||
+;B[ha] | ||
+;W[ia] | ||
+;B[fa] | ||
+;W[ca] | ||
+;B[ba] | ||
+;W[dj] | ||
+;B[cd] | ||
+;W[sf] | ||
+;B[gl] | ||
+;W[gj] | ||
+;B[gk] | ||
+;W[ij] | ||
+;B[kk] | ||
+;W[lh] | ||
+;B[ig] | ||
+;W[lf] | ||
+;B[le] | ||
+;W[gh] | ||
+;B[kj] | ||
+;W[jf] | ||
+;B[hf] | ||
+;W[jl] | ||
+;B[jj] | ||
+;W[gi] | ||
+;B[pi] | ||
+;W[cn] | ||
+;B[pk] | ||
+;W[ok] | ||
+;B[on] | ||
+;W[bb]C[Since all valuable points have been played, the game was finished manually after White's atari at B18. White wins by 2.5.]) |
84
data/expert_play/thursday_tournament.sgf
@@ -0,0 +1,84 @@ | ||
+(;PB[AlphaGo]PW[Fan Hui]KM[7.5]HA[0]SZ[19]TM[3600]OT[1 moves / 30 sec]RU[Chinese]RE[B+R] | ||
+;B[dp];W[pp] | ||
+;B[dd];W[pc] | ||
+;B[pe];W[qe] | ||
+;B[qf];W[qd] | ||
+;B[pg];W[nc] | ||
+;B[qk];W[qm] | ||
+;B[ok];W[oq] | ||
+;B[dj];W[fq] | ||
+;B[dn];W[fc] | ||
+;B[df];W[ip] | ||
+;B[ec];W[fd] | ||
+;B[id];W[he] | ||
+;B[ie];W[hg] | ||
+;B[hf];W[gf] | ||
+;B[if];W[gg] | ||
+;B[jh];W[dh] | ||
+;B[eg];W[ih] | ||
+;B[ji];W[eh] | ||
+;B[fh];W[fi] | ||
+;B[fg];W[ej] | ||
+;B[gi];W[gj] | ||
+;B[hj];W[dk] | ||
+;B[gk];W[fj] | ||
+;B[hi];W[ib] | ||
+;B[cj];W[cg] | ||
+;B[ck];W[be] | ||
+;B[cc];W[bc] | ||
+;B[bb];W[cd] | ||
+;B[ac];W[bd] | ||
+;B[db];W[de] | ||
+;B[ee];W[cf] | ||
+;B[ed];W[jc] | ||
+;B[hc];W[gb] | ||
+;B[hb];W[ha] | ||
+;B[fb];W[gc] | ||
+;B[dl];W[bi] | ||
+;B[ci];W[bh] | ||
+;B[qo];W[pl] | ||
+;B[pk];W[qp] | ||
+;B[fa];W[ga] | ||
+;B[lc];W[lb] | ||
+;B[kb];W[kc] | ||
+;B[mb];W[ld] | ||
+;B[mc];W[md] | ||
+;B[nb];W[ke] | ||
+;B[oc];W[od] | ||
+;B[nd];W[ne] | ||
+;B[pb];W[nc] | ||
+;B[ob];W[pd] | ||
+;B[kq];W[jq] | ||
+;B[kp];W[dr] | ||
+;B[hq];W[ir] | ||
+;B[gq];W[fp] | ||
+;B[fr];W[er] | ||
+;B[ho];W[gr] | ||
+;B[hr];W[fs] | ||
+;B[go];W[cq] | ||
+;B[rp];W[rq] | ||
+;B[ig];W[qb] | ||
+;B[rb];W[qa] | ||
+;B[rc];W[qc] | ||
+;B[la];W[on] | ||
+;B[rf];W[sb] | ||
+;B[mg];W[of] | ||
+;B[og];W[mf] | ||
+;B[nm];W[lg] | ||
+;B[mh];W[lo] | ||
+;B[ko];W[ln] | ||
+;B[kn];W[lm] | ||
+;B[km];W[ll] | ||
+;B[om];W[pn] | ||
+;B[mp];W[mq] | ||
+;B[np];W[nn] | ||
+;B[nq];W[kr] | ||
+;B[mr];W[hs] | ||
+;B[or];W[pr] | ||
+;B[op];W[pq] | ||
+;B[po];W[oo] | ||
+;B[ro];W[sq] | ||
+;B[qr];W[ps] | ||
+;B[rr];W[sr] | ||
+;B[rm];W[rl] | ||
+;B[ql]) |
93
data/expert_play/tuesday_tournament.sgf
@@ -0,0 +1,93 @@ | ||
+(;PB[AlphaGo]PW[Fan Hui]KM[6.5]HA[0]SZ[19]TM[3600]OT[1 moves / 30 sec]RU[Chinese]RE[B+R] | ||
+;B[dp];W[pp] | ||
+;B[dd];W[pc] | ||
+;B[pe];W[qe] | ||
+;B[pd];W[qd] | ||
+;B[oc];W[qf] | ||
+;B[pf];W[pg] | ||
+;B[qc];W[pb] | ||
+;B[rc];W[qb] | ||
+;B[qg];W[qh] | ||
+;B[rb];W[ob] | ||
+;B[rg];W[rf] | ||
+;B[rh];W[rd] | ||
+;B[nc];W[ph] | ||
+;B[qi];W[pi] | ||
+;B[qj];W[nb] | ||
+;B[se];W[sd] | ||
+;B[ne];W[pj] | ||
+;B[ql];W[pk] | ||
+;B[rm];W[sg] | ||
+;B[ri];W[mf] | ||
+;B[lc];W[kd] | ||
+;B[kc];W[jd] | ||
+;B[ic];W[id] | ||
+;B[hc];W[jc] | ||
+;B[jb];W[kb] | ||
+;B[lb];W[ib] | ||
+;B[ka];W[gd] | ||
+;B[hd];W[he] | ||
+;B[ge];W[fd] | ||
+;B[hf];W[ie] | ||
+;B[hb];W[de] | ||
+;B[fe];W[ed] | ||
+;B[ee];W[dc] | ||
+;B[cd];W[cc] | ||
+;B[be];W[df] | ||
+;B[bc];W[gf] | ||
+;B[ff];W[gg] | ||
+;B[fg];W[fh] | ||
+;B[gh];W[hg] | ||
+;B[eh];W[fi] | ||
+;B[eg];W[bb] | ||
+;B[ec];W[ei] | ||
+;B[fc];W[di] | ||
+;B[nq];W[qn] | ||
+;B[pl];W[ol] | ||
+;B[om];W[nl] | ||
+;B[pn];W[rn] | ||
+;B[nm];W[ml] | ||
+;B[qo];W[po] | ||
+;B[ro];W[on] | ||
+;B[pm];W[rp] | ||
+;B[sn];W[qp] | ||
+;B[qm];W[mp] | ||
+;B[lq];W[mq] | ||
+;B[mr];W[np] | ||
+;B[or];W[oq] | ||
+;B[nr];W[pr] | ||
+;B[jq];W[io] | ||
+;B[hp];W[ho] | ||
+;B[gp];W[fn] | ||
+;B[dn];W[dq] | ||
+;B[cq];W[ep] | ||
+;B[eo];W[cp] | ||
+;B[do];W[cr] | ||
+;B[bq];W[br] | ||
+;B[eq];W[dr] | ||
+;B[bp];W[er] | ||
+;B[gr];W[ar] | ||
+;B[le];W[jg] | ||
+;B[el];W[fl] | ||
+;B[fk];W[ek] | ||
+;B[dk];W[ej] | ||
+;B[lf];W[lh] | ||
+;B[lm];W[mm] | ||
+;B[ko];W[kn] | ||
+;B[ln];W[km] | ||
+;B[ll];W[lp] | ||
+;B[kp];W[lo] | ||
+;B[jn];W[kl] | ||
+;B[mn];W[nn] | ||
+;B[lk];W[im] | ||
+;B[nj];W[ok] | ||
+;B[kk];W[il] | ||
+;B[mh];W[mi] | ||
+;B[li];W[ki] | ||
+;B[ni];W[lj] | ||
+;B[mk];W[of] | ||
+;B[nh];W[nf] | ||
+;B[oe];W[og] | ||
+;B[lg];W[mg] | ||
+;B[kh];W[li] | ||
+;B[me]) |
85
data/expert_play/wednesday_tournament.sgf
@@ -0,0 +1,85 @@ | ||
+(;PB[Fan Hui]PW[AlphaGo]KM[7.5]HA[0]SZ[19]TM[3600]OT[1 moves / 30 sec]RU[Chinese]RE[W+R] | ||
+;B[dp] | ||
+;W[pp];B[cd] | ||
+;W[pd];B[nc] | ||
+;W[qf];B[ic] | ||
+;W[cj];B[ci] | ||
+;W[di];B[ch] | ||
+;W[dj];B[dh] | ||
+;W[cn];B[ei] | ||
+;W[fq];B[eo] | ||
+;W[cq];B[cl] | ||
+;W[dl];B[ck] | ||
+;W[bj];B[dk] | ||
+;W[ej];B[dm] | ||
+;W[fi];B[eh] | ||
+;W[fl];B[el] | ||
+;W[fm];B[dn] | ||
+;W[dq];B[fk] | ||
+;W[fj];B[gk] | ||
+;W[fh];B[fg] | ||
+;W[gg];B[gf] | ||
+;W[hg];B[ff] | ||
+;W[hf];B[he] | ||
+;W[ie];B[id] | ||
+;W[je];B[kd] | ||
+;W[cc];B[bc] | ||
+;W[ke];B[ld] | ||
+;W[df];B[cf] | ||
+;W[cg];B[de] | ||
+;W[bf];B[ce] | ||
+;W[bh];B[dg] | ||
+;W[bb];B[be] | ||
+;W[ac];B[bd] | ||
+;W[ek];B[hj] | ||
+;W[hl];B[hi] | ||
+;W[jj];B[ji] | ||
+;W[ki];B[jk] | ||
+;W[kj];B[gl] | ||
+;W[gm];B[hm] | ||
+;W[go];B[il] | ||
+;W[hn];B[im] | ||
+;W[bn];B[fp] | ||
+;W[gp];B[cp] | ||
+;W[bp];B[bq] | ||
+;W[br];B[bo] | ||
+;W[aq];B[co] | ||
+;W[ao];B[em] | ||
+;W[hh];B[ll] | ||
+;W[fo];B[eq] | ||
+;W[ep];B[np] | ||
+;W[do];B[pn] | ||
+;W[qq];B[nn] | ||
+;W[qi];B[qc] | ||
+;W[pc];B[pb] | ||
+;W[qd];B[rb] | ||
+;W[rc];B[qb] | ||
+;W[ql];B[pl] | ||
+;W[pk];B[oq] | ||
+;W[qn];B[qo] | ||
+;W[rn];B[po] | ||
+;W[ro];B[jq] | ||
+;W[ii];B[qp] | ||
+;W[rp];B[qr] | ||
+;W[jp];B[kp] | ||
+;W[iq];B[jo] | ||
+;W[ip];B[kr] | ||
+;W[jr];B[kq] | ||
+;W[pq];B[pr] | ||
+;W[rr];B[op] | ||
+;W[rq];B[ok] | ||
+;W[pm];B[ol] | ||
+;W[om];B[pj] | ||
+;W[qk];B[pi] | ||
+;W[qh];B[ph] | ||
+;W[nm];B[pg] | ||
+;W[qg];B[mm] | ||
+;W[ml];B[on] | ||
+;W[nl];B[lk] | ||
+;W[oj];B[nk] | ||
+;W[mk];B[nj] | ||
+;W[mj];B[ni] | ||
+;W[mi];B[nh] | ||
+;W[nf];B[mf] | ||
+;W[mg];B[of] | ||
+;W[ne]) |
0
data/self_play/s_a_z_tuples_here_format_TBD
No changes.
0
data/trained_models/h5_files_here_by_hyperparamer_UID
No changes.
0
interface/client/simple_client_here_possibly_Wgo
No changes.
0
interface/opponents/pachi/pachi.py
No changes.
0
interface/server/simple_server_here
No changes.
7
requirements.txt
@@ -0,0 +1,7 @@ | ||
+Keras==0.3.1 | ||
+numpy==1.10.4 | ||
+PyYAML==3.11 | ||
+scipy==0.17.0 | ||
+six==1.10.0 | ||
+Theano==0.7.0 | ||
+wheel==0.29.0 |
0
tests/__init__.py
No changes.
73
tests/test_gamestate.py
@@ -0,0 +1,73 @@ | ||
+from AlphaGo.Game import GameState | ||
+import numpy as np | ||
+import unittest | ||
+ | ||
+class TestSymmetries(unittest.TestCase): | ||
+ | ||
+ def setUp(self): | ||
+ self.s = GameState() | ||
+ self.s.do_move((4,5)) | ||
+ self.s.do_move((5,5)) | ||
+ self.s.do_move((5,6)) | ||
+ | ||
+ self.syms = self.s.symmetries() | ||
+ | ||
+ def test_num_syms(self): | ||
+ # make sure we got exactly 8 back | ||
+ self.assertEqual(len(self.syms), 8) | ||
+ | ||
+ def test_copy_fields(self): | ||
+ # make sure each copy has the correct non-board fields | ||
+ for copy in self.syms: | ||
+ self.assertEqual(self.s.size, copy.size) | ||
+ self.assertEqual(self.s.turns_played, copy.turns_played) | ||
+ self.assertEqual(self.s.current_player, copy.current_player) | ||
+ | ||
+ def test_sym_boards(self): | ||
+ # construct by hand the 8 boards we expect to see | ||
+ expectations = [GameState() for i in range(8)] | ||
+ | ||
+ descriptions = ["noop", "rot90", "rot180", "rot270", "mirror LR", "mirror UD", "mirror \\", "mirror /"] | ||
+ | ||
+ # copy of self.s | ||
+ expectations[0].do_move((4,5)) | ||
+ expectations[0].do_move((5,5)) | ||
+ expectations[0].do_move((5,6)) | ||
+ | ||
+ # rotate 90 CCW | ||
+ expectations[1].do_move((13,4)) | ||
+ expectations[1].do_move((13,5)) | ||
+ expectations[1].do_move((12,5)) | ||
+ | ||
+ # rotate 180 | ||
+ expectations[2].do_move((14,13)) | ||
+ expectations[2].do_move((13,13)) | ||
+ expectations[2].do_move((13,12)) | ||
+ | ||
+ # rotate CCW 270 | ||
+ expectations[3].do_move((5,14)) | ||
+ expectations[3].do_move((5,13)) | ||
+ expectations[3].do_move((6,13)) | ||
+ | ||
+ # mirror left-right | ||
+ expectations[4].do_move((4,13)) | ||
+ expectations[4].do_move((5,13)) | ||
+ expectations[4].do_move((5,12)) | ||
+ | ||
+ # mirror up-down | ||
+ expectations[5].do_move((14,5)) | ||
+ expectations[5].do_move((13,5)) | ||
+ expectations[5].do_move((13,6)) | ||
+ | ||
+ # mirror \ diagonal | ||
+ expectations[6].do_move((5,4)) | ||
+ expectations[6].do_move((5,5)) | ||
+ expectations[6].do_move((6,5)) | ||
+ | ||
+ # mirror / diagonal (equivalently: rotate 90 CCW then flip LR) | ||
+ expectations[7].do_move((13,14)) | ||
+ expectations[7].do_move((13,13)) | ||
+ expectations[7].do_move((12,13)) | ||
+ | ||
+ for i in range(8): | ||
+ self.assertTrue(np.array_equal(expectations[i].board, self.syms[i].board), descriptions[i]) |
0 comments on commit
4c86839