Added spectator GUI when HUMAN_GUI is not one of the two players.
Logging to System.out is now significantly less verbose.
This commit is contained in:
1
data/games/random_vs_random/gogame-1.sgf
Normal file
1
data/games/random_vs_random/gogame-1.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+3.5];B[db];W[bi];B[ih];W[bg];B[ha];W[id];B[af];W[eg];B[fa];W[dc];B[fh];W[fc];B[ci];W[ce];B[cf];W[];B[bc];W[ed];B[ee];W[fb];B[bf];W[ei];B[ab];W[hi];B[fg];W[fd];B[cd];W[ea];B[ad];W[bb];B[ia];W[eh];B[ef];W[ga];B[da];W[gc];B[hc];W[bh];B[fi];W[dg];B[gi];W[ba];B[cg];W[gd];B[hf];W[di];B[ec];W[ah];B[ib];W[be];B[aa];W[cb];B[fe];W[de];B[ag];W[gf];B[if];W[hb];B[ch];W[hd];B[ae];W[ff];B[dh];W[gg];B[ig];W[eb];B[ie];W[ca];B[he];W[df];B[hh];W[db];B[cc];W[hg];B[bd];W[ac];B[gb];W[ic];B[fa];W[hb];B[dd];W[ab];B[ge];W[di];B[dg];W[ga];B[ai];W[ei];B[eh];W[di];B[gh];W[ia];B[gg];W[bi];B[df];W[be];B[bg];W[bh];B[ff];W[ce];B[ei];W[ah];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-10.sgf
Normal file
1
data/games/random_vs_random/gogame-10.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+18.5];B[cb];W[ba];B[ch];W[fc];B[dd];W[bf];B[fe];W[bc];B[ib];W[bd];B[ae];W[dc];B[cf];W[id];B[aa];W[ec];B[gc];W[ca];B[di];W[fg];B[ih];W[gd];B[he];W[db];B[be];W[ac];B[ie];W[gi];B[hc];W[de];B[ci];W[fh];B[fi];W[ah];B[hh];W[hb];B[ed];W[hf];B[cc];W[cd];B[ge];W[ig];B[df];W[da];B[af];W[fa];B[ic];W[hi];B[hg];W[gh];B[ei];W[bg];B[ab];W[fb];B[ga];W[gg];B[ee];W[eh];B[ce];W[gb];B[bh];W[ai];B[cg];W[hd];B[dh];W[bi];B[ag];W[ea];B[ef];W[gf];B[fd];W[dg];B[gd];W[ii];B[hh];W[ah];B[ha];W[eg];B[ih];W[bi];B[hd];W[hg];B[ih];W[];B[ff];W[bf];B[if];W[ad];B[bb];W[ia];B[];W[ga];B[ai];W[ac];B[];W[bd];B[bc];W[cd];B[hh];W[hi];B[hg];W[bc];B[ha];W[ab];B[gf];W[gi];B[ad];W[ii];B[bg];W[fh];B[gh];W[eh];B[ii];W[ia];B[dg];W[gg];B[cc];W[bb];B[];W[hi];B[ha];W[eg];B[fg];W[cb];B[eg];W[ia];B[eh];W[];B[ha];W[];B[gi];W[ia];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-11.sgf
Normal file
1
data/games/random_vs_random/gogame-11.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+10.5];B[ie];W[bg];B[ha];W[fa];B[hi];W[hd];B[bf];W[ib];B[ed];W[bh];B[ch];W[hh];B[be];W[gg];B[ba];W[da];B[fc];W[db];B[hb];W[ai];B[cb];W[hg];B[eh];W[de];B[ae];W[eg];B[gi];W[gb];B[ad];W[dc];B[ci];W[dd];B[bc];W[dh];B[gd];W[gf];B[ig];W[fd];B[hc];W[gh];B[ee];W[fe];B[bd];W[af];B[gc];W[ge];B[ec];W[ia];B[aa];W[eb];B[hf];W[ff];B[ca];W[ic];B[fh];W[ab];B[bb];W[ag];B[ga];W[ih];B[fb];W[cf];B[ac];W[ii];B[dg];W[];B[cg];W[ei];B[fi];W[cc];B[ce];W[cd];B[df];W[bi];B[di];W[he];B[fg];W[id];B[ah];W[af];B[ai];W[ag];B[bi];W[if];B[bh];W[ef];B[];W[gb];B[ha];W[fc];B[hb];W[gc];B[ee];W[];B[ed];W[];B[ga];W[hc];B[bg];W[ec];B[ag];W[ed];B[hb];W[ga];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-12.sgf
Normal file
1
data/games/random_vs_random/gogame-12.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+7.5];B[cc];W[eb];B[aa];W[if];B[ii];W[gd];B[ah];W[ed];B[hh];W[dd];B[ei];W[ai];B[ic];W[ff];B[ce];W[ag];B[af];W[bh];B[ge];W[hi];B[be];W[ha];B[cf];W[gf];B[gc];W[fa];B[ee];W[];B[gi];W[df];B[ba];W[ie];B[ih];W[eh];B[fg];W[di];B[fe];W[ga];B[ch];W[bc];B[fb];W[dg];B[bi];W[gb];B[fi];W[];B[ae];W[ca];B[id];W[ac];B[ad];W[dh];B[ib];W[eg];B[cg];W[bf];B[da];W[hb];B[dc];W[cb];B[gg];W[bd];B[bg];W[ig];B[hg];W[ab];B[ia];W[bb];B[ci];W[fc];B[ef];W[fd];B[ah];W[hf];B[ba];W[fh];B[de];W[db];B[he];W[cd];B[];W[ec];B[ie];W[ea];B[cc];W[if];B[gf];W[hc];B[ig];W[dc];B[hd];W[aa];B[gh];W[fh];B[hf];W[dg];B[eh];W[di];B[dh];W[df];B[eg];W[df];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-13.sgf
Normal file
1
data/games/random_vs_random/gogame-13.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+16.5];B[ad];W[dg];B[ga];W[bf];B[de];W[ch];B[gi];W[ei];B[gh];W[gd];B[fi];W[ee];B[eg];W[bh];B[fa];W[cd];B[ia];W[ec];B[da];W[hd];B[ci];W[ef];B[hc];W[eb];B[fg];W[ca];B[ae];W[ab];B[bg];W[gg];B[af];W[ai];B[eh];W[fe];B[bc];W[ii];B[id];W[cg];B[aa];W[gc];B[ig];W[fd];B[ie];W[be];B[bi];W[ac];B[ib];W[dh];B[he];W[ag];B[fc];W[cb];B[hi];W[ih];B[df];W[cc];B[if];W[ha];B[fb];W[ff];B[hh];W[cf];B[bb];W[gf];B[ed];W[];B[ba];W[hf];B[gb];W[db];B[ah];W[bd];B[ab];W[ii];B[dd];W[];B[ea];W[ac];B[ih];W[ad];B[di];W[];B[bc];W[ai];B[af];W[ce];B[bb];W[ae];B[ba];W[ei];B[aa];W[ab];B[hb];W[];B[ba];W[bc];B[hg];W[bb];B[di];W[aa];B[ci];W[dc];B[df];W[de];B[ed];W[];B[ge];W[bi];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-14.sgf
Normal file
1
data/games/random_vs_random/gogame-14.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+8.5];B[ie];W[af];B[cd];W[ci];B[di];W[gd];B[ca];W[ei];B[id];W[ab];B[db];W[gg];B[cg];W[ed];B[bg];W[cc];B[fb];W[ib];B[bh];W[ai];B[ig];W[ch];B[hh];W[fi];B[ic];W[ff];B[aa];W[eb];B[fg];W[gi];B[fe];W[if];B[dg];W[dc];B[fh];W[];B[be];W[ii];B[ae];W[ad];B[he];W[eh];B[hi];W[hc];B[gb];W[hb];B[hg];W[dd];B[da];W[ga];B[bc];W[fd];B[ec];W[fa];B[ia];W[hd];B[ee];W[gh];B[ba];W[cb];B[ag];W[bf];B[gf];W[bb];B[ge];W[ea];B[ce];W[aa];B[hf];W[da];B[dh];W[ha];B[ef];W[fc];B[bi];W[];B[ah];W[ca];B[df];W[ch];B[ci];W[];B[ac];W[];B[bd];W[gc];B[de];W[fb];B[eg];W[gh];B[cf];W[fi];B[];W[eh];B[ih];W[ei];B[af];W[gg];B[gi];W[eh];B[gh];W[ei];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-15.sgf
Normal file
1
data/games/random_vs_random/gogame-15.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+12.5];B[af];W[ch];B[cb];W[dd];B[hh];W[bb];B[eg];W[aa];B[gi];W[cf];B[ce];W[dg];B[cg];W[ah];B[ba];W[hc];B[ea];W[ed];B[fa];W[gh];B[ib];W[gg];B[hd];W[ab];B[bi];W[ec];B[hf];W[bg];B[dh];W[ac];B[fc];W[ic];B[da];W[fd];B[fb];W[ig];B[ae];W[ha];B[ee];W[ge];B[de];W[dc];B[fi];W[gc];B[hg];W[ag];B[ia];W[cc];B[ff];W[ca];B[ga];W[eb];B[hi];W[ad];B[ih];W[fg];B[df];W[bh];B[di];W[ci];B[gd];W[he];B[ie];W[gf];B[gb];W[bf];B[bd];W[fh];B[if];W[bc];B[hb];W[ei];B[cg];W[eh];B[be];W[cd];B[ba];W[id];B[hd];W[];B[fe];W[ai];B[db];W[];B[bi];W[gd];B[ci];W[bg];B[ag];W[ca];B[cf];W[bf];B[ah];W[ha];B[hb];W[ga];B[ib];W[fc];B[fa];W[gb];B[bh];W[fb];B[bg];W[];B[da];W[db];B[];W[ia];B[ib];W[ea];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-16.sgf
Normal file
1
data/games/random_vs_random/gogame-16.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+11.5];B[cb];W[ic];B[fb];W[ec];B[bd];W[he];B[ig];W[db];B[hg];W[ha];B[fg];W[ef];B[fi];W[cd];B[cf];W[gi];B[aa];W[ee];B[hh];W[ga];B[hf];W[di];B[cc];W[bc];B[gd];W[ad];B[fd];W[df];B[ba];W[fe];B[da];W[hb];B[ce];W[gb];B[cg];W[ag];B[hc];W[bi];B[dc];W[ei];B[be];W[ii];B[eh];W[eg];B[ab];W[fc];B[gh];W[af];B[ai];W[ea];B[bh];W[fa];B[bf];W[ch];B[eb];W[ge];B[de];W[gg];B[hi];W[dd];B[ih];W[id];B[gc];W[dh];B[ie];W[ed];B[ac];W[ae];B[dg];W[bg];B[be];W[ah];B[ia];W[if];B[gf];W[de];B[ie];W[bf];B[cg];W[ce];B[bb];W[ib];B[bd];W[cf];B[ff];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-17.sgf
Normal file
1
data/games/random_vs_random/gogame-17.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+18.5];B[cd];W[df];B[dc];W[be];B[gg];W[ci];B[eb];W[aa];B[cg];W[ef];B[eg];W[ge];B[ih];W[ei];B[af];W[ed];B[fa];W[ae];B[cf];W[fe];B[ac];W[bc];B[hi];W[gc];B[fb];W[hh];B[ca];W[ha];B[ai];W[ec];B[bg];W[ab];B[eh];W[ee];B[dd];W[da];B[gb];W[hb];B[he];W[ff];B[cb];W[ag];B[ba];W[dh];B[de];W[ah];B[if];W[ce];B[hf];W[fh];B[hc];W[fi];B[fc];W[hd];B[ic];W[ch];B[id];W[gd];B[ib];W[dg];B[bf];W[fg];B[ea];W[ga];B[ad];W[gh];B[cc];W[fd];B[bb];W[db];B[eg];W[eh];B[gf];W[ea];B[ia];W[ie];B[ic];W[gb];B[hg];W[ib];B[gi];W[aa];B[bd];W[id];B[bi];W[];B[bh];W[fc];B[ah];W[ce];B[ab];W[hc];B[be];W[eb];B[fb];W[ig];B[hg];W[he];B[gf];W[if];B[hf];W[ii];B[gi];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-18.sgf
Normal file
1
data/games/random_vs_random/gogame-18.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+20.5];B[eh];W[hh];B[ff];W[gf];B[hb];W[if];B[gb];W[dd];B[fg];W[ba];B[ca];W[he];B[eg];W[hd];B[ed];W[cb];B[fh];W[bc];B[gi];W[ii];B[ig];W[ah];B[hg];W[];B[df];W[af];B[gd];W[dh];B[ce];W[ei];B[bf];W[ch];B[hf];W[id];B[de];W[ge];B[ag];W[gg];B[eb];W[da];B[hc];W[cd];B[ci];W[ih];B[fd];W[ea];B[aa];W[ai];B[bg];W[fb];B[ga];W[fc];B[bh];W[fe];B[hf];W[ee];B[bb];W[fi];B[ha];W[hg];B[cg];W[cc];B[ab];W[bd];B[ic];W[ec];B[dg];W[ib];B[dc];W[fa];B[ca];W[db];B[be];W[hi];B[ad];W[ef];B[gh];W[ba];B[di];W[ei];B[ia];W[gc];B[dh];W[ib];B[ca];W[gd];B[gb];W[ac];B[ia];W[ha];B[ae];W[];B[bi];W[ed];B[ga];W[ba];B[fi];W[hc];B[aa];W[ab];B[ah];W[hb];B[gb];W[ga];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-19.sgf
Normal file
1
data/games/random_vs_random/gogame-19.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+8.5];B[if];W[ch];B[bg];W[hb];B[ee];W[eb];B[hg];W[ab];B[aa];W[hh];B[dc];W[hf];B[ce];W[ic];B[fh];W[ah];B[fa];W[di];B[gf];W[dh];B[gd];W[fg];B[be];W[ef];B[eh];W[de];B[eg];W[ai];B[af];W[bb];B[ga];W[ea];B[bd];W[ib];B[bh];W[ha];B[ig];W[id];B[ih];W[ii];B[fe];W[cc];B[cd];W[ag];B[cb];W[ff];B[ca];W[he];B[fb];W[cf];B[gc];W[ad];B[ba];W[hd];B[fd];W[bc];B[cg];W[dd];B[ec];W[bf];B[df];W[db];B[ei];W[gh];B[gg];W[ge];B[fi];W[ef];B[ie];W[ci];B[fg];W[da];B[cf];W[dg];B[gi];W[ba];B[bi];W[ag];B[cb];W[ae];B[ci];W[hc];B[dh];W[ah];B[ac];W[ae];B[ad];W[ca];B[ed];W[de];B[hi];W[gb];B[];W[gh];B[];W[fc];B[dd];W[ga];B[ff];W[fa];B[hh];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-2.sgf
Normal file
1
data/games/random_vs_random/gogame-2.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+38.5];B[ae];W[eh];B[ce];W[da];B[gc];W[ah];B[id];W[ge];B[hi];W[ec];B[ab];W[hc];B[gg];W[ea];B[gb];W[bc];B[bf];W[ii];B[ia];W[ib];B[ed];W[fi];B[ch];W[db];B[de];W[dc];B[ef];W[hd];B[af];W[];B[hg];W[gh];B[df];W[gd];B[cf];W[ca];B[cc];W[ee];B[eg];W[eb];B[ie];W[ai];B[fe];W[ei];B[ga];W[if];B[hf];W[ag];B[he];W[fc];B[cb];W[dh];B[ci];W[fg];B[gf];W[hh];B[fd];W[];B[bh];W[cd];B[fa];W[ih];B[ic];W[dg];B[dd];W[];B[cg];W[ba];B[hb];W[bg];B[hc];W[ad];B[];W[ig];B[ge];W[ac];B[bd];W[gd];B[fb];W[aa];B[];W[ff];B[bb];W[db];B[ad];W[ac];B[];W[aa];B[ea];W[gi];B[fh];W[di];B[da];W[ec];B[bi];W[ff];B[bc];W[ag];B[eb];W[fg];B[ah];W[fc];B[ca];W[];B[fh];W[ff];B[hi];W[ih];B[gh];W[dg];B[ba];W[ei];B[fi];W[eh];B[di];W[ig];B[ii];W[if];B[dc];W[fc];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-20.sgf
Normal file
1
data/games/random_vs_random/gogame-20.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+24.5];B[bd];W[ha];B[cg];W[aa];B[gb];W[ef];B[fi];W[ia];B[ch];W[dc];B[ee];W[bi];B[hb];W[he];B[fg];W[bf];B[ga];W[dh];B[df];W[ig];B[ab];W[ei];B[fd];W[ec];B[gf];W[dg];B[eh];W[bb];B[ae];W[da];B[fa];W[bh];B[fh];W[bg];B[ah];W[ai];B[if];W[ff];B[be];W[hi];B[hd];W[];B[gd];W[db];B[de];W[gg];B[ba];W[fe];B[ib];W[ha];B[ge];W[ag];B[ih];W[cc];B[id];W[gc];B[hg];W[fb];B[cf];W[gh];B[fc];W[ic];B[ea];W[bc];B[ac];W[dd];B[cb];W[ed];B[di];W[ie];B[ce];W[ca];B[af];W[hh];B[hc];W[ci];B[cd];W[ad];B[gi];W[bd];B[ia];W[cd];B[eg];W[ee];B[ch];W[eb];B[df];W[cg];B[cf];W[ce];B[be];W[];B[af];W[ei];B[hf];W[aa];B[he];W[ae];B[ab];W[fi];B[ii];W[fh];B[eg];W[];B[ba];W[];B[ac];W[ig];B[ih];W[];B[eh];W[ii];B[];W[ig];B[];W[fg];B[eg];W[de];B[cf];W[eh];B[ih];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-21.sgf
Normal file
1
data/games/random_vs_random/gogame-21.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+4.5];B[de];W[fg];B[be];W[ia];B[bf];W[cc];B[fb];W[ha];B[df];W[ai];B[bb];W[ah];B[ea];W[hb];B[da];W[dh];B[bd];W[bi];B[hi];W[ie];B[bh];W[fe];B[ii];W[hf];B[cb];W[ag];B[hc];W[ec];B[ch];W[ff];B[gi];W[di];B[if];W[eb];B[cg];W[ga];B[hd];W[ab];B[gb];W[gf];B[cf];W[ae];B[ci];W[ed];B[cd];W[he];B[db];W[ca];B[hg];W[ib];B[fa];W[ge];B[dc];W[id];B[ei];W[eg];B[hh];W[bc];B[af];W[ee];B[dg];W[aa];B[fd];W[];B[dd];W[gd];B[fh];W[gg];B[ba];W[gc];B[ih];W[ig];B[ef];W[ad];B[if];W[fc];B[ac];W[ig];B[bg];W[bc];B[gh];W[aa];B[ae];W[eh];B[];W[bi];B[if];W[ai];B[ah];W[fi];B[bi];W[ic];B[cc];W[hd];B[ei];W[ig];B[ab];W[fi];B[hh];W[gi];B[ii];W[gh];B[hg];W[hi];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-22.sgf
Normal file
1
data/games/random_vs_random/gogame-22.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+29.5];B[ba];W[ce];B[ig];W[fe];B[ab];W[ee];B[dh];W[fd];B[af];W[be];B[dc];W[fb];B[fi];W[cg];B[cf];W[ch];B[ai];W[cb];B[ae];W[da];B[gd];W[fc];B[ge];W[bb];B[ii];W[fh];B[df];W[de];B[ha];W[he];B[hh];W[id];B[gg];W[ib];B[ga];W[ad];B[hb];W[bh];B[di];W[];B[gf];W[fg];B[bd];W[bg];B[eg];W[hf];B[ah];W[ag];B[bi];W[ic];B[ca];W[ac];B[db];W[ie];B[ef];W[bc];B[hi];W[ec];B[eh];W[hc];B[gh];W[ci];B[ff];W[gb];B[ea];W[ai];B[fa];W[if];B[gc];W[fh];B[eb];W[cc];B[fg];W[aa];B[dg];W[];B[ab];W[];B[bf];W[hg];B[hd];W[ih];B[cd];W[ad];B[bb];W[ed];B[ig];W[cb];B[cc];W[ih];B[bc];W[ia];B[dd];W[be];B[fb];W[de];B[fe];W[ec];B[fd];W[fc];B[ac];W[ce];B[ig];W[hg];B[ed];W[ia];B[fc];W[ie];B[hf];W[if];B[ic];W[id];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-23.sgf
Normal file
1
data/games/random_vs_random/gogame-23.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+10.5];B[fi];W[ig];B[da];W[ae];B[gh];W[bd];B[ci];W[gb];B[eb];W[ee];B[df];W[ag];B[ib];W[bf];B[cf];W[ff];B[eg];W[hi];B[di];W[fg];B[id];W[aa];B[cb];W[dd];B[ge];W[hh];B[eh];W[ai];B[be];W[ia];B[ca];W[dg];B[ec];W[hg];B[hb];W[if];B[ha];W[bi];B[dh];W[ic];B[bc];W[gi];B[de];W[ce];B[gg];W[ah];B[ed];W[ab];B[ea];W[ii];B[gc];W[cc];B[hc];W[ad];B[he];W[fd];B[db];W[dc];B[ga];W[];B[gd];W[ch];B[fa];W[ba];B[bb];W[fc];B[bg];W[ie];B[fh];W[ac];B[fb];W[hf];B[cd];W[bh];B[dc];W[cg];B[fe];W[gf];B[fd];W[ef];B[];W[ei];B[eg];W[dd];B[fh];W[cf];B[gg];W[di];B[de];W[dh];B[fi];W[df];B[gh];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-24.sgf
Normal file
1
data/games/random_vs_random/gogame-24.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+6.5];B[gh];W[he];B[ce];W[ha];B[fa];W[dc];B[gf];W[gc];B[aa];W[be];B[cd];W[ei];B[fb];W[ic];B[dd];W[hh];B[ag];W[ci];B[ba];W[ai];B[bg];W[bc];B[ia];W[dg];B[ab];W[if];B[cg];W[ie];B[hi];W[gg];B[ib];W[ee];B[ed];W[];B[gd];W[bf];B[ec];W[ge];B[dh];W[ch];B[hd];W[bd];B[ea];W[hg];B[di];W[cb];B[id];W[hf];B[ae];W[gi];B[ca];W[af];B[bi];W[fd];B[eg];W[fi];B[ih];W[df];B[bb];W[ga];B[hb];W[ah];B[ef];W[ad];B[ff];W[fg];B[hc];W[cc];B[eh];W[ii];B[de];W[gb];B[bh];W[ai];B[eb];W[ac];B[hi];W[];B[fe];W[ii];B[ci];W[ic];B[da];W[fh];B[hi];W[hd];B[cf];W[df];B[ib];W[ii];B[dg];W[];B[fc];W[];B[db];W[];B[gd];W[];B[ah];W[fd];B[hc];W[ig];B[ae];W[bf];B[dc];W[ad];B[af];W[bc];B[ac];W[hb];B[];W[cb];B[bd];W[ia];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-25.sgf
Normal file
1
data/games/random_vs_random/gogame-25.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+1.5];B[db];W[cg];B[gh];W[ie];B[hh];W[fd];B[gi];W[gd];B[ei];W[gb];B[dh];W[fc];B[eg];W[ga];B[cb];W[ch];B[ib];W[aa];B[ea];W[gf];B[fb];W[ec];B[bb];W[if];B[gc];W[ff];B[df];W[ge];B[ih];W[af];B[ia];W[id];B[ic];W[gg];B[ha];W[be];B[bf];W[fe];B[dc];W[fh];B[ab];W[hc];B[ba];W[cc];B[ai];W[eh];B[ae];W[ee];B[hg];W[ag];B[di];W[hi];B[bc];W[ig];B[ca];W[bd];B[fi];W[ah];B[bg];W[eb];B[ii];W[hb];B[ci];W[ia];B[ef];W[ib];B[he];W[fg];B[cd];W[bi];B[fa];W[];B[hf];W[da];B[dg];W[cf];B[de];W[ea];B[fa];W[ad];B[ce];W[];B[dd];W[fb];B[bh];W[ch];B[ac];W[ed];B[cg];W[];B[ai];W[hd];B[ae];W[ad];B[ag];W[bd];B[be];W[ad];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-26.sgf
Normal file
1
data/games/random_vs_random/gogame-26.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+5.5];B[ih];W[ii];B[af];W[fi];B[ge];W[];B[ch];W[gf];B[df];W[eb];B[dc];W[fe];B[id];W[eg];B[be];W[ig];B[dg];W[fc];B[bf];W[ga];B[bh];W[ag];B[ae];W[dd];B[di];W[hi];B[bi];W[gh];B[hb];W[cc];B[bg];W[hd];B[he];W[hc];B[ic];W[hh];B[ea];W[de];B[ed];W[cb];B[cf];W[ad];B[hf];W[if];B[ha];W[ah];B[fa];W[gc];B[ec];W[ee];B[fd];W[ca];B[aa];W[cd];B[bd];W[ef];B[ib];W[bc];B[ie];W[];B[ba];W[gd];B[eh];W[ac];B[bb];W[fb];B[ei];W[];B[fh];W[];B[gb];W[ce];B[ff];W[ab];B[db];W[fc];B[hc];W[ba];B[hd];W[gc];B[];W[fb];B[hg];W[eb];B[gg];W[da];B[gi];W[gd];B[ec];W[ga];B[dc];W[fi];B[fg];W[db];B[ed];W[];B[ea];W[fa];B[ih];W[fd];B[ai];W[ah];B[ig];W[ec];B[gi];W[ii];B[ag];W[gh];B[hh];W[];B[hi];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-27.sgf
Normal file
1
data/games/random_vs_random/gogame-27.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+0.5];B[gi];W[cd];B[hf];W[ei];B[ee];W[ah];B[ci];W[fa];B[db];W[ig];B[ef];W[fb];B[dd];W[ac];B[cc];W[ib];B[if];W[ha];B[aa];W[ec];B[cb];W[hb];B[df];W[de];B[fd];W[dc];B[eg];W[gd];B[bh];W[ch];B[ba];W[he];B[bb];W[ab];B[ge];W[hg];B[gg];W[bd];B[ea];W[di];B[dg];W[fc];B[ih];W[be];B[af];W[bg];B[bc];W[ag];B[hi];W[];B[gh];W[gb];B[dh];W[fi];B[gf];W[ce];B[ie];W[eb];B[eh];W[ff];B[hd];W[ae];B[bi];W[ai];B[fe];W[ic];B[hc];W[da];B[bf];W[bh];B[fg];W[fh];B[ad];W[ac];B[ed];W[ci];B[id];W[ca];B[ea];W[ca];B[da];W[ab];B[cg];W[cf];B[hh];W[gc];B[ig];W[];B[bf];W[];B[ad];W[ac];B[ab];W[af];B[ad];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-28.sgf
Normal file
1
data/games/random_vs_random/gogame-28.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+2.5];B[hb];W[be];B[cb];W[ib];B[id];W[ch];B[cd];W[ce];B[ag];W[af];B[fb];W[gg];B[ab];W[hc];B[fe];W[gi];B[fc];W[hd];B[ah];W[dc];B[bi];W[eb];B[fd];W[ae];B[dd];W[df];B[ga];W[hf];B[ig];W[ei];B[ed];W[gf];B[bb];W[db];B[fi];W[ih];B[eg];W[bf];B[dh];W[fh];B[ie];W[];B[he];W[ff];B[fg];W[dg];B[gb];W[ef];B[ge];W[di];B[if];W[cf];B[fa];W[ca];B[cg];W[bh];B[ic];W[hi];B[da];W[de];B[gc];W[ad];B[gh];W[ba];B[ea];W[ia];B[ha];W[hh];B[bc];W[eh];B[gd];W[ib];B[bg];W[hd];B[ci];W[hg];B[ee];W[ec];B[eg];W[fg];B[hc];W[];B[ia];W[bd];B[ac];W[ai];B[ag];W[];B[ci];W[ah];B[aa];W[cg];B[cc];W[bg];B[ca];W[eb];B[ec];W[db];B[dc];W[bi];B[eb];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-29.sgf
Normal file
1
data/games/random_vs_random/gogame-29.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+10.5];B[gg];W[he];B[cc];W[hg];B[fe];W[da];B[fd];W[ca];B[ha];W[ff];B[ad];W[cb];B[dc];W[bc];B[ge];W[aa];B[ai];W[gh];B[cf];W[hd];B[hf];W[gd];B[ei];W[ah];B[ag];W[de];B[eb];W[di];B[cg];W[dg];B[hh];W[bg];B[gi];W[ie];B[ci];W[cd];B[ih];W[gc];B[ba];W[fc];B[hc];W[df];B[fh];W[dh];B[ch];W[gf];B[ce];W[ac];B[ia];W[bh];B[if];W[ea];B[ib];W[ic];B[ee];W[];B[db];W[fg];B[af];W[dd];B[bf];W[be];B[ef];W[gb];B[ga];W[bd];B[ii];W[eh];B[fb];W[hb];B[ae];W[];B[eg];W[ec];B[bb];W[ab];B[gf];W[fi];B[ed];W[fa];B[ha];W[cc];B[ig];W[bb];B[ff];W[dc];B[fb];W[eb];B[ia];W[ga];B[bi];W[];B[bh];W[ib];B[ei];W[];B[ha];W[fi];B[];W[ia];B[ei];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-3.sgf
Normal file
1
data/games/random_vs_random/gogame-3.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+23.5];B[ac];W[bh];B[ih];W[ed];B[de];W[];B[ba];W[cg];B[bb];W[ae];B[ia];W[gi];B[af];W[fc];B[fa];W[da];B[ab];W[di];B[bf];W[eh];B[ee];W[gf];B[be];W[ib];B[ei];W[he];B[bg];W[gc];B[ai];W[ad];B[cb];W[ch];B[hi];W[eg];B[if];W[ie];B[hb];W[dg];B[gh];W[ca];B[ci];W[fb];B[ig];W[cc];B[fh];W[hf];B[hd];W[eb];B[bi];W[gd];B[dc];W[bd];B[ec];W[gb];B[fe];W[hg];B[hc];W[dd];B[cf];W[ff];B[id];W[ga];B[ha];W[ef];B[gg];W[df];B[ah];W[ea];B[ic];W[ge];B[fd];W[hh];B[fg];W[];B[fi];W[];B[db];W[ii];B[dh];W[ih];B[if];W[di];B[ce];W[ag];B[bc];W[ig];B[ah];W[];B[bi];W[ib];B[ci];W[ai];B[ia];W[gi];B[hb];W[fg];B[gh];W[fi];B[id];W[ic];B[hd];W[hc];B[hd];W[ci];B[gg];W[ha];B[cd];W[ag];B[dd];W[];B[ad];W[fh];B[gh];W[id];B[ah];W[gg];B[bi];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-30.sgf
Normal file
1
data/games/random_vs_random/gogame-30.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+10.5];B[fh];W[df];B[dg];W[ec];B[ai];W[ie];B[ih];W[if];B[dh];W[ge];B[fc];W[ch];B[cb];W[gg];B[eg];W[de];B[bh];W[gh];B[ba];W[ii];B[ag];W[cg];B[hb];W[bg];B[gb];W[ed];B[ia];W[db];B[fb];W[da];B[hc];W[hi];B[ic];W[dd];B[ad];W[ae];B[eb];W[fg];B[hd];W[ei];B[fd];W[ci];B[ff];W[ha];B[bc];W[gf];B[aa];W[hf];B[fi];W[bf];B[bd];W[ig];B[di];W[bb];B[hh];W[af];B[ca];W[ee];B[cc];W[ab];B[gd];W[ga];B[he];W[gi];B[eh];W[bi];B[id];W[ce];B[be];W[fe];B[ef];W[ib];B[fa];W[cd];B[ea];W[hg];B[cf];W[gc];B[id];W[af];B[cg];W[gb];B[ih];W[hd];B[ic];W[hb];B[bg];W[fa];B[gd];W[ci];B[ch];W[ea];B[bf];W[fc];B[ac];W[fd];B[bb];W[eb];B[dc];W[];B[ae];W[];B[bi];W[hc];B[ic];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-31.sgf
Normal file
1
data/games/random_vs_random/gogame-31.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+19.5];B[hf];W[hd];B[af];W[hh];B[gg];W[bg];B[ad];W[gi];B[ie];W[fe];B[ae];W[cb];B[if];W[dg];B[ec];W[fi];B[ba];W[bc];B[ai];W[bb];B[dc];W[ga];B[gf];W[eg];B[ei];W[he];B[ig];W[bi];B[fh];W[hb];B[gh];W[ih];B[ah];W[ic];B[cd];W[ee];B[gb];W[ii];B[gc];W[de];B[db];W[ag];B[ci];W[eb];B[ha];W[hg];B[dh];W[ce];B[id];W[df];B[fa];W[ef];B[bd];W[ed];B[fd];W[bh];B[dd];W[fg];B[fb];W[ib];B[ge];W[ch];B[aa];W[gd];B[da];W[di];B[ah];W[cg];B[eh];W[cf];B[ea];W[fc];B[ca];W[ff];B[hf];W[if];B[ei];W[cc];B[be];W[fh];B[ia];W[ge];B[gh];W[ai];B[ac];W[gf];B[bf];W[eh];B[hc];W[id];B[fd];W[gg];B[ab];W[bc];B[bb];W[cb];B[cc];W[ga];B[ia];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-32.sgf
Normal file
1
data/games/random_vs_random/gogame-32.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+25.5];B[gb];W[eb];B[hf];W[bb];B[cf];W[gg];B[ih];W[da];B[gf];W[fg];B[bd];W[eh];B[ib];W[hc];B[bc];W[fc];B[ca];W[ab];B[af];W[ea];B[dg];W[ed];B[ff];W[eg];B[ef];W[ce];B[ae];W[hg];B[hd];W[fi];B[bi];W[cc];B[ai];W[ie];B[ic];W[fb];B[bf];W[ah];B[hb];W[be];B[id];W[ad];B[ch];W[gc];B[hi];W[hh];B[de];W[fa];B[cd];W[ig];B[dh];W[ee];B[ha];W[aa];B[gi];W[cb];B[ga];W[bg];B[fd];W[ag];B[cg];W[ei];B[dd];W[di];B[ec];W[fe];B[ge];W[be];B[dc];W[if];B[ce];W[ci];B[ee];W[gh];B[gd];W[ii];B[gi];W[hi];B[ac];W[db];B[bh];W[ba];B[bg];W[];B[ca];W[ab];B[fb];W[fc];B[aa];W[he];B[cc];W[cb];B[ba];W[db];B[gc];W[ea];B[da];W[fa];B[eb];W[fa];B[ag];W[];B[ea];W[];B[bb];W[cb];B[db];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-33.sgf
Normal file
1
data/games/random_vs_random/gogame-33.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+39.5];B[hg];W[ac];B[ag];W[ii];B[gh];W[hf];B[db];W[cc];B[ei];W[ga];B[ha];W[ec];B[dc];W[fe];B[gb];W[fa];B[ca];W[he];B[id];W[cf];B[bc];W[fc];B[ab];W[ih];B[ge];W[fh];B[cb];W[ff];B[cg];W[hh];B[ig];W[ed];B[fb];W[hi];B[bi];W[fg];B[ci];W[ah];B[if];W[ad];B[fi];W[bh];B[ea];W[gd];B[aa];W[ee];B[cd];W[fa];B[be];W[af];B[eh];W[gf];B[df];W[dh];B[ae];W[bf];B[ic];W[ce];B[gg];W[dd];B[ga];W[de];B[ef];W[ch];B[ia];W[gc];B[bb];W[hc];B[bg];W[bd];B[di];W[ib];B[ai];W[eg];B[ie];W[gi];B[ai];W[ae];B[ei];W[ci];B[hb];W[];B[di];W[];B[eb];W[dg];B[ag];W[fi];B[hd];W[cc];B[bg];W[cg];B[df];W[bi];B[bg];W[];B[cd];W[ag];B[];W[eh];B[ei];W[ib];B[ic];W[];B[id];W[gg];B[if];W[ig];B[hd];W[];B[ie];W[cc];B[];W[ib];B[ic];W[ef];B[cd];W[id];B[if];W[di];B[];W[ib];B[];W[ie];B[ic];W[cc];B[];W[ib];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-34.sgf
Normal file
1
data/games/random_vs_random/gogame-34.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+6.5];B[ih];W[ag];B[ga];W[if];B[ei];W[bg];B[dh];W[dg];B[ce];W[ed];B[fi];W[ae];B[ci];W[ah];B[gc];W[fg];B[hi];W[ee];B[db];W[ba];B[ea];W[fc];B[eb];W[aa];B[ff];W[hh];B[gb];W[bb];B[cc];W[ac];B[cg];W[gf];B[gg];W[hd];B[ig];W[ge];B[gd];W[fd];B[fb];W[dd];B[bd];W[gi];B[bc];W[ie];B[ch];W[hg];B[fh];W[ca];B[id];W[ic];B[ad];W[be];B[da];W[ii];B[bi];W[ai];B[cd];W[ec];B[ha];W[hf];B[ig];W[eg];B[df];W[];B[gh];W[ia];B[hc];W[hb];B[hi];W[de];B[eh];W[];B[bf];W[ef];B[af];W[fe];B[cb];W[ae];B[bh];W[cf];B[ab];W[ai];B[ih];W[ah];B[df];W[bb];B[ib];W[ca];B[dc];W[bg];B[];W[ba];B[id];W[ii];B[ag];W[cf];B[aa];W[gi];B[be];W[ah];B[ig];W[ic];B[ba];W[ih];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-35.sgf
Normal file
1
data/games/random_vs_random/gogame-35.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+12.5];B[ie];W[bd];B[hf];W[ia];B[bc];W[aa];B[da];W[df];B[cb];W[ha];B[he];W[ad];B[dc];W[dh];B[ag];W[af];B[hg];W[ih];B[fc];W[cd];B[ga];W[ae];B[dg];W[hc];B[eh];W[cf];B[fi];W[bg];B[fg];W[hb];B[fb];W[ig];B[de];W[ei];B[id];W[hd];B[ib];W[bf];B[if];W[ca];B[ec];W[hh];B[ee];W[ii];B[dd];W[ba];B[ch];W[gh];B[bi];W[hi];B[gc];W[ah];B[fh];W[eb];B[ge];W[gg];B[ab];W[fa];B[di];W[gd];B[gb];W[ac];B[gi];W[bb];B[fe];W[fd];B[ef];W[];B[bh];W[ce];B[ai];W[ff];B[gf];W[ig];B[ab];W[db];B[ba];W[ii];B[ag];W[ih];B[gg];W[cc];B[ic];W[ah];B[ed];W[hb];B[cg];W[gd];B[gh];W[ia];B[hi];W[fd];B[hd];W[bb];B[fd];W[hc];B[ag];W[ca];B[hh];W[ea];B[ih];W[aa];B[];W[ah];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-36.sgf
Normal file
1
data/games/random_vs_random/gogame-36.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+3.5];B[bh];W[hc];B[gb];W[dh];B[dc];W[ag];B[ic];W[ig];B[ge];W[bc];B[eg];W[bg];B[ei];W[cb];B[cf];W[ff];B[ie];W[bd];B[if];W[fa];B[gf];W[bi];B[da];W[hd];B[dg];W[eb];B[gd];W[ch];B[aa];W[cg];B[cd];W[ad];B[fg];W[ea];B[he];W[ba];B[cc];W[af];B[ib];W[db];B[hb];W[bb];B[ah];W[ai];B[df];W[gh];B[ef];W[ca];B[ii];W[gc];B[ci];W[bh];B[ce];W[bf];B[ae];W[be];B[ac];W[hh];B[ee];W[gi];B[di];W[ed];B[ih];W[];B[id];W[ab];B[hf];W[gg];B[fi];W[ga];B[fc];W[fh];B[ec];W[dd];B[de];W[gc];B[ha];W[fe];B[fb];W[eh];B[ci];W[ei];B[hc];W[];B[hg];W[di];B[fd];W[];B[hi];W[ig];B[ii];W[];B[ed];W[ff];B[ih];W[];B[hi];W[ig];B[fe];W[ii];B[ih];W[];B[hi];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-37.sgf
Normal file
1
data/games/random_vs_random/gogame-37.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+5.5];B[gc];W[ii];B[gg];W[ei];B[fb];W[dc];B[de];W[cf];B[cg];W[if];B[di];W[df];B[gh];W[bh];B[hd];W[fa];B[fh];W[bb];B[hh];W[ig];B[hb];W[fc];B[ef];W[ai];B[id];W[bi];B[bd];W[ab];B[cb];W[gi];B[fd];W[db];B[ge];W[ed];B[ib];W[dd];B[hi];W[bf];B[gf];W[ci];B[ah];W[cc];B[ag];W[eg];B[ih];W[aa];B[bc];W[ia];B[hf];W[];B[dh];W[fe];B[ff];W[he];B[ch];W[ga];B[ec];W[eb];B[ad];W[ea];B[ac];W[ha];B[gb];W[cd];B[ie];W[ba];B[hg];W[be];B[dg];W[ig];B[fg];W[af];B[hc];W[eh];B[da];W[ca];B[bg];W[ae];B[bc];W[fc];B[ad];W[bd];B[ci];W[ai];B[bi];W[];B[ee];W[ce];B[if];W[ac];B[ec];W[];B[fi];W[eg];B[];W[fc];B[ei];W[];B[eh];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-38.sgf
Normal file
1
data/games/random_vs_random/gogame-38.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+0.5];B[hf];W[id];B[ci];W[fi];B[ie];W[ig];B[ef];W[eh];B[fd];W[ih];B[ib];W[df];B[ea];W[af];B[ai];W[bi];B[hg];W[eg];B[gg];W[hd];B[ec];W[ah];B[bb];W[bg];B[gb];W[cg];B[ac];W[aa];B[cc];W[hh];B[db];W[ii];B[ad];W[ed];B[dd];W[ee];B[gc];W[hb];B[hi];W[ei];B[fc];W[ce];B[da];W[gf];B[be];W[bd];B[ch];W[bh];B[ae];W[fg];B[ff];W[fb];B[gd];W[];B[gi];W[cf];B[ia];W[cd];B[de];W[fh];B[fa];W[bf];B[if];W[di];B[ha];W[ba];B[ge];W[ca];B[fe];W[ee];B[ic];W[bc];B[cb];W[gh];B[hc];W[gi];B[he];W[id];B[dg];W[];B[hd];W[dh];B[eb];W[ab];B[ad];W[be];B[ch];W[];B[ac];W[aa];B[ba];W[ci];B[ed];W[];B[ae];W[ab];B[ad];W[];B[ac];W[ab];B[aa];W[ae];B[];W[ab];B[ac];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-39.sgf
Normal file
1
data/games/random_vs_random/gogame-39.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+3.5];B[di];W[gh];B[df];W[fb];B[be];W[hi];B[dg];W[bb];B[ig];W[hh];B[fi];W[hc];B[de];W[ib];B[he];W[da];B[af];W[hd];B[ca];W[bd];B[fc];W[ih];B[dh];W[ie];B[ag];W[ac];B[hf];W[cg];B[cf];W[bc];B[gf];W[ad];B[eh];W[cb];B[ee];W[ai];B[bg];W[hg];B[fe];W[gd];B[fh];W[ch];B[cc];W[bh];B[ga];W[];B[gi];W[cd];B[ff];W[ci];B[ah];W[ec];B[ef];W[eb];B[db];W[aa];B[if];W[ha];B[ed];W[eg];B[ge];W[hb];B[fg];W[gc];B[dd];W[fa];B[id];W[dc];B[gg];W[ae];B[ce];W[ic];B[ii];W[ba];B[fd];W[ie];B[hi];W[];B[gh];W[gb];B[id];W[ih];B[hh];W[ie];B[bi];W[ci];B[bh];W[ch];B[];W[])
|
||||
1
data/games/random_vs_random/gogame-4.sgf
Normal file
1
data/games/random_vs_random/gogame-4.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+15.5];B[dg];W[gc];B[ig];W[fi];B[ag];W[id];B[ae];W[ic];B[fe];W[cc];B[fg];W[df];B[ab];W[hb];B[dc];W[ia];B[db];W[de];B[cf];W[ba];B[ie];W[af];B[bb];W[gd];B[gg];W[ci];B[ih];W[gi];B[if];W[he];B[hf];W[bf];B[fh];W[eg];B[eb];W[ge];B[bd];W[hc];B[ha];W[dd];B[ac];W[di];B[gf];W[fd];B[ga];W[hg];B[ib];W[ff];B[gb];W[fb];B[fc];W[ed];B[cd];W[ef];B[cg];W[gh];B[bg];W[bi];B[hh];W[ch];B[ce];W[da];B[hi];W[ei];B[ea];W[dh];B[bh];W[ah];B[fa];W[];B[eh];W[bc];B[aa];W[ca];B[cb];W[ba];B[cc];W[ca];B[ec];W[ia];B[ai];W[ei];B[];W[gi];B[fi];W[ee];B[bi];W[ci];B[gh];W[ch];B[];W[dh];B[ib];W[];B[da];W[ia];B[ca];W[];B[ib];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-40.sgf
Normal file
1
data/games/random_vs_random/gogame-40.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+10.5];B[gd];W[ic];B[bc];W[ah];B[fe];W[aa];B[ie];W[hd];B[hb];W[ab];B[id];W[ad];B[ac];W[bg];B[dc];W[ce];B[dh];W[hi];B[ei];W[af];B[ed];W[ih];B[ha];W[hg];B[de];W[cc];B[fi];W[bi];B[ge];W[ff];B[ib];W[cd];B[he];W[di];B[cb];W[hc];B[bd];W[eb];B[dg];W[ec];B[gi];W[ch];B[if];W[ba];B[cg];W[gg];B[fa];W[db];B[gc];W[hd];B[hf];W[ea];B[fh];W[gf];B[da];W[be];B[ci];W[eg];B[gh];W[gb];B[hc];W[fg];B[hh];W[dd];B[ef];W[ca];B[fd];W[fb];B[bh];W[bb];B[bd];W[ga];B[df];W[];B[bc];W[ac];B[cf];W[ch];B[bf];W[di];B[bc];W[fc];B[eh];W[];B[ci];W[ig];B[bh];W[];B[ai];W[];B[ag];W[];B[ae];W[bd];B[ii];W[gg];B[fg];W[hg];B[ih];W[af];B[ig];W[gf];B[ff];W[gg];B[hg];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-5.sgf
Normal file
1
data/games/random_vs_random/gogame-5.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+8.5];B[ea];W[fc];B[da];W[ac];B[eh];W[bh];B[gf];W[ih];B[bg];W[ae];B[ch];W[gh];B[ce];W[ha];B[ba];W[ai];B[if];W[ed];B[af];W[];B[eb];W[bi];B[be];W[ge];B[dh];W[fe];B[cc];W[ig];B[ei];W[ic];B[cd];W[hd];B[di];W[gc];B[ag];W[fi];B[gb];W[ie];B[ci];W[bd];B[hc];W[];B[ib];W[gg];B[he];W[hi];B[gd];W[ff];B[cf];W[hf];B[hb];W[hg];B[ab];W[de];B[dg];W[bb];B[fg];W[ec];B[dd];W[aa];B[db];W[ca];B[ah];W[df];B[eg];W[dc];B[bi];W[];B[fa];W[ef];B[bc];W[fd];B[ga];W[fb];B[fh];W[];B[ia];W[];B[gi];W[];B[id];W[fi];B[cb];W[];B[gi];W[ic];B[ad];W[fi];B[ab];W[];B[ba];W[];B[id];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-6.sgf
Normal file
1
data/games/random_vs_random/gogame-6.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+8.5];B[dh];W[ah];B[cf];W[bb];B[hh];W[bh];B[bc];W[ce];B[ai];W[if];B[db];W[eg];B[ae];W[fe];B[df];W[ia];B[ig];W[ab];B[ei];W[bd];B[hc];W[be];B[hf];W[fd];B[gg];W[fc];B[ff];W[ii];B[ie];W[bg];B[ib];W[ac];B[ad];W[dg];B[fb];W[ih];B[ic];W[ee];B[ef];W[cc];B[gh];W[fi];B[aa];W[cg];B[ag];W[dc];B[fh];W[ba];B[hi];W[cb];B[da];W[de];B[fg];W[gc];B[eb];W[af];B[id];W[fa];B[ea];W[ih];B[di];W[bf];B[ca];W[ae];B[ha];W[cd];B[ch];W[gf];B[hd];W[hb];B[ed];W[bi];B[dd];W[];B[he];W[ci];B[gi];W[];B[eh];W[gd];B[ge];W[gb];B[ii];W[];B[ga];W[];B[ec];W[fa];B[dd];W[db];B[ea];W[fb];B[ed];W[da];B[eb];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-7.sgf
Normal file
1
data/games/random_vs_random/gogame-7.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+37.5];B[ie];W[gc];B[hc];W[eb];B[bb];W[ei];B[ef];W[hd];B[da];W[he];B[be];W[ec];B[ae];W[fa];B[if];W[cb];B[bi];W[ic];B[eh];W[gg];B[ac];W[cd];B[gd];W[hi];B[ch];W[ih];B[gh];W[dh];B[ga];W[bd];B[id];W[fc];B[dc];W[cg];B[ai];W[bc];B[gf];W[dg];B[dd];W[fh];B[bg];W[bf];B[fg];W[de];B[hf];W[ba];B[ib];W[ea];B[ia];W[db];B[ed];W[fe];B[fi];W[di];B[fd];W[ig];B[df];W[af];B[cc];W[hb];B[gi];W[ee];B[ad];W[aa];B[ce];W[];B[bc];W[ag];B[ha];W[hg];B[ah];W[cf];B[ab];W[ff];B[ge];W[eg];B[ff];W[fe];B[bd];W[fb];B[ca];W[de];B[hh];W[fh];B[fi];W[ba];B[];W[da];B[hh];W[ci];B[gh];W[he];B[hd];W[gb];B[ca];W[gb];B[ea];W[fa];B[];W[db];B[gc];W[ec];B[];W[fc];B[eh];W[eb];B[bf];W[cb];B[hb];W[gi];B[ag];W[da];B[dh];W[cf];B[ii];W[hg];B[aa];W[ci];B[ee];W[ig];B[gi];W[di];B[eg];W[gg];B[fb];W[cg];B[];W[gb];B[ih];W[hg];B[ei];W[gg];B[fb];W[ci];B[];W[gb];B[dg];W[cg];B[ca];W[];B[di];W[ba];B[cf];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-8.sgf
Normal file
1
data/games/random_vs_random/gogame-8.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[B+7.5];B[eb];W[ia];B[ef];W[dd];B[dh];W[hc];B[af];W[bf];B[da];W[gc];B[ig];W[hh];B[bh];W[gh];B[fb];W[gf];B[he];W[fa];B[ei];W[hf];B[ah];W[ci];B[ec];W[hi];B[di];W[fg];B[gg];W[fe];B[cf];W[cc];B[ab];W[aa];B[de];W[db];B[dg];W[if];B[ca];W[be];B[hg];W[gb];B[fi];W[cg];B[bb];W[gi];B[ea];W[ha];B[fc];W[cd];B[eh];W[ie];B[ii];W[dc];B[ag];W[fh];B[id];W[ic];B[ch];W[ih];B[fd];W[eg];B[hb];W[gg];B[ga];W[ad];B[ff];W[hg];B[ed];W[fa];B[ai];W[bd];B[bi];W[bg];B[ee];W[];B[ae];W[gd];B[ba];W[];B[bc];W[];B[cb];W[ib];B[ga];W[hd];B[ac];W[ge];B[ce];W[bg];B[dc];W[cd];B[bf];W[cc];B[be];W[fa];B[bd];W[];B[cg];W[];B[ga];W[];B[])
|
||||
1
data/games/random_vs_random/gogame-9.sgf
Normal file
1
data/games/random_vs_random/gogame-9.sgf
Normal file
@@ -0,0 +1 @@
|
||||
(;FF[4]GM[1]SZ[9]KM[6.5]RE[W+5.5];B[dg];W[eg];B[af];W[bh];B[hd];W[df];B[cb];W[fi];B[ga];W[fb];B[hf];W[ci];B[ca];W[fa];B[cc];W[hg];B[ih];W[ea];B[ef];W[hc];B[ba];W[bg];B[ge];W[ii];B[fg];W[ch];B[id];W[di];B[ib];W[he];B[dc];W[ic];B[dh];W[ah];B[ae];W[da];B[fe];W[eh];B[ha];W[ag];B[dd];W[gd];B[if];W[ec];B[be];W[gc];B[ac];W[gi];B[hi];W[cf];B[gg];W[bi];B[bc];W[eb];B[hb];W[bd];B[de];W[gh];B[fh];W[ie];B[ed];W[bf];B[ab];W[ig];B[gf];W[ad];B[db];W[cg];B[fc];W[dg];B[hh];W[ig];B[hg];W[ce];B[be];W[];B[ae];W[gb];B[hd];W[];B[ei];W[fd];B[id];W[];B[gh];W[fi];B[cd];W[ie];B[he];W[bd];B[gi];W[af];B[ad];W[ia];B[ga];W[];B[hb];W[];B[ib];W[];B[ei];W[ha];B[ib];W[hb];B[];W[fi];B[];W[])
|
||||
43
data/games/random_vs_random/gotournament-121118195302.txt
Normal file
43
data/games/random_vs_random/gotournament-121118195302.txt
Normal file
@@ -0,0 +1,43 @@
|
||||
Cumulative results for 20 games (BLACK=RANDOM, WHITE=RANDOM)
|
||||
1. B+3.5
|
||||
2. B+38.5
|
||||
3. W+23.5
|
||||
4. B+15.5
|
||||
5. B+8.5
|
||||
6. W+8.5
|
||||
7. B+37.5
|
||||
8. B+7.5
|
||||
9. W+5.5
|
||||
10. B+18.5
|
||||
11. W+10.5
|
||||
12. B+7.5
|
||||
13. W+16.5
|
||||
14. B+8.5
|
||||
15. W+12.5
|
||||
16. W+11.5
|
||||
17. W+18.5
|
||||
18. W+20.5
|
||||
19. B+8.5
|
||||
20. W+24.5
|
||||
Cumulative results for 20 games (BLACK=RANDOM, WHITE=RANDOM)
|
||||
1. W+4.5
|
||||
2. B+29.5
|
||||
3. W+10.5
|
||||
4. B+6.5
|
||||
5. B+1.5
|
||||
6. B+5.5
|
||||
7. B+0.5
|
||||
8. W+2.5
|
||||
9. W+10.5
|
||||
10. W+10.5
|
||||
11. W+19.5
|
||||
12. B+25.5
|
||||
13. W+39.5
|
||||
14. B+6.5
|
||||
15. B+12.5
|
||||
16. W+3.5
|
||||
17. B+5.5
|
||||
18. W+0.5
|
||||
19. B+3.5
|
||||
20. B+10.5
|
||||
Elapsed Time: 0.999 seconds.
|
||||
7
data/gogame.cfg
Normal file
7
data/gogame.cfg
Normal file
@@ -0,0 +1,7 @@
|
||||
PlayerOne=ROOT_PAR
|
||||
PlayerTwo=RANDOM
|
||||
GUIDelay=2000 //1 second
|
||||
BoardSize=9
|
||||
Komi=6.5
|
||||
NumGames=10 //Games for each player
|
||||
TurnTime=2000 //seconds per player per turn
|
||||
BIN
data/networks/Pass2.nn
Normal file
BIN
data/networks/Pass2.nn
Normal file
Binary file not shown.
7
data/test/gogame-test1.cfg
Normal file
7
data/test/gogame-test1.cfg
Normal file
@@ -0,0 +1,7 @@
|
||||
PlayerOne=RAVE
|
||||
PlayerTwo=RANDOM
|
||||
GUIDelay=123 //1 second
|
||||
BoardSize=8
|
||||
Komi=5.5
|
||||
NumGames=7 //Games for each player
|
||||
TurnTime=3000 //second per player per turn
|
||||
130
src/net/woodyfolsom/msproj/GameSettings.java
Normal file
130
src/net/woodyfolsom/msproj/GameSettings.java
Normal file
@@ -0,0 +1,130 @@
|
||||
package net.woodyfolsom.msproj;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
public class GameSettings {
|
||||
private String playerOne = "UCT";
|
||||
private String playerTwo = "UCT";
|
||||
private long guiDelay = 1000L;
|
||||
private long turnTime = 4000L;
|
||||
private int boardSize = 9;
|
||||
private double komi = 6.5;
|
||||
private int numGames = 10;
|
||||
|
||||
private GameSettings() {
|
||||
}
|
||||
|
||||
public static GameSettings createGameSetings(String fileName) throws IOException {
|
||||
File file = new File(fileName);
|
||||
FileReader fileReader = new FileReader(file);
|
||||
BufferedReader bufferedReader = new BufferedReader(fileReader);
|
||||
|
||||
GameSettings gameSettings = new GameSettings();
|
||||
|
||||
String line;
|
||||
System.out.println("Parsing game settings file: " + file.getPath());
|
||||
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
String[] linePlusComment = line.split("//");
|
||||
String[] nameAndValue = linePlusComment[0].split("=");
|
||||
String name = nameAndValue[0].trim();
|
||||
String value = nameAndValue[1].trim();
|
||||
|
||||
if ("PlayerOne".equals(name)) {
|
||||
gameSettings.setPlayerOne(value);
|
||||
} else if ("PlayerTwo".equals(name)) {
|
||||
gameSettings.setPlayerTwo(value);
|
||||
} else if ("PlayerOne".equals(name)) {
|
||||
gameSettings.setPlayerOne(value);
|
||||
} else if ("GUIDelay".equals(name)) {
|
||||
gameSettings.setGuiDelay(Long.parseLong(value));
|
||||
} else if ("TurnTime".equals(name)) {
|
||||
gameSettings.setTurnTime(Long.parseLong(value));
|
||||
} else if ("BoardSize".equals(name)) {
|
||||
gameSettings.setBoardSize(Integer.parseInt(value));
|
||||
} else if ("NumGames".equals(name)) {
|
||||
gameSettings.setNumGames(Integer.parseInt(value));
|
||||
} else if ("Komi".equals(name)) {
|
||||
gameSettings.setKomi(Double.parseDouble(value));
|
||||
} else {
|
||||
System.out.println("Ignoring game settings property with unrecognized name: " + name);
|
||||
}
|
||||
}
|
||||
|
||||
bufferedReader.close();
|
||||
|
||||
return gameSettings;
|
||||
}
|
||||
|
||||
public String getPlayerOne() {
|
||||
return playerOne;
|
||||
}
|
||||
|
||||
public String getPlayerTwo() {
|
||||
return playerTwo;
|
||||
}
|
||||
|
||||
public long getGuiDelay() {
|
||||
return guiDelay;
|
||||
}
|
||||
|
||||
public long getTurnTime() {
|
||||
return turnTime;
|
||||
}
|
||||
|
||||
public int getBoardSize() {
|
||||
return boardSize;
|
||||
}
|
||||
|
||||
public double getKomi() {
|
||||
return komi;
|
||||
}
|
||||
|
||||
public int getNumGames() {
|
||||
return numGames;
|
||||
}
|
||||
|
||||
private void setPlayerOne(String playerOne) {
|
||||
this.playerOne = playerOne;
|
||||
}
|
||||
|
||||
private void setPlayerTwo(String playerTwo) {
|
||||
this.playerTwo = playerTwo;
|
||||
}
|
||||
|
||||
private void setGuiDelay(long guiDelay) {
|
||||
this.guiDelay = guiDelay;
|
||||
}
|
||||
|
||||
private void setTurnTime(long turnTime) {
|
||||
this.turnTime = turnTime;
|
||||
}
|
||||
|
||||
private void setBoardSize(int boardSize) {
|
||||
this.boardSize = boardSize;
|
||||
}
|
||||
|
||||
private void setKomi(double komi) {
|
||||
this.komi = komi;
|
||||
}
|
||||
|
||||
private void setNumGames(int numGames) {
|
||||
this.numGames = numGames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("PlayerOne=" + playerOne);
|
||||
sb.append(", PlayerTwo=" + playerTwo);
|
||||
sb.append(", BoardSize=" + boardSize);
|
||||
sb.append(", Komi=" + komi);
|
||||
sb.append(", NumGames=" + numGames);
|
||||
sb.append(", TurnTime=" + turnTime);
|
||||
sb.append(", GUIDelay=" + guiDelay);
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@@ -6,18 +6,19 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import net.woodyfolsom.msproj.gui.Goban;
|
||||
import net.woodyfolsom.msproj.policy.HumanGuiInput;
|
||||
import net.woodyfolsom.msproj.policy.Policy;
|
||||
import net.woodyfolsom.msproj.sgf.SGFLexer;
|
||||
import net.woodyfolsom.msproj.sgf.SGFNodeCollection;
|
||||
import net.woodyfolsom.msproj.sgf.SGFParser;
|
||||
|
||||
import org.antlr.runtime.ANTLRInputStream;
|
||||
import org.antlr.runtime.ANTLRStringStream;
|
||||
import org.antlr.runtime.CommonTokenStream;
|
||||
import org.antlr.runtime.RecognitionException;
|
||||
|
||||
import net.woodyfolsom.msproj.policy.Policy;
|
||||
import net.woodyfolsom.msproj.sgf.SGFLexer;
|
||||
import net.woodyfolsom.msproj.sgf.SGFNodeCollection;
|
||||
import net.woodyfolsom.msproj.sgf.SGFParser;
|
||||
|
||||
public class Referee {
|
||||
private Policy blackPolicy;
|
||||
private Policy whitePolicy;
|
||||
@@ -44,48 +45,66 @@ public class Referee {
|
||||
}
|
||||
}
|
||||
|
||||
public static GameRecord replay(InputStream sgfInputStream) throws IOException, RecognitionException {
|
||||
public static GameRecord replay(InputStream sgfInputStream)
|
||||
throws IOException, RecognitionException {
|
||||
ANTLRStringStream in = new ANTLRInputStream(sgfInputStream);
|
||||
SGFLexer lexer = new SGFLexer(in);
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
SGFParser parser = new SGFParser(tokens);
|
||||
SGFNodeCollection nodeCollection = parser.collection();
|
||||
|
||||
//parse sgf header
|
||||
|
||||
// parse sgf header
|
||||
GameConfig gameConfig = nodeCollection.getGameConfig();
|
||||
GameRecord gameRecord = new GameRecord(gameConfig);
|
||||
|
||||
//replay sgf moves, throw exception if moves are illegal
|
||||
|
||||
// replay sgf moves, throw exception if moves are illegal
|
||||
for (Action action : nodeCollection.getMoves(gameConfig.getSize())) {
|
||||
gameRecord.play(gameRecord.getPlayerToMove(), action);
|
||||
}
|
||||
|
||||
|
||||
return gameRecord;
|
||||
}
|
||||
|
||||
public GameResult play(GameConfig gameConfig) {
|
||||
|
||||
public GameResult play(GameConfig gameConfig, int gameNo) {
|
||||
GameRecord gameRecord = new GameRecord(gameConfig);
|
||||
|
||||
|
||||
System.out.println("Game started.");
|
||||
|
||||
GameState initialGameState = gameRecord.getGameState(gameRecord.getNumTurns());
|
||||
|
||||
//Allow policy / GUI to do setup.
|
||||
|
||||
GameState initialGameState = gameRecord.getGameState(gameRecord
|
||||
.getNumTurns());
|
||||
|
||||
// Allow policy / GUI to do setup.
|
||||
blackPolicy.setState(initialGameState);
|
||||
whitePolicy.setState(initialGameState);
|
||||
|
||||
|
||||
Goban spectatorBoard;
|
||||
if (blackPolicy instanceof HumanGuiInput
|
||||
|| whitePolicy instanceof HumanGuiInput) {
|
||||
System.out.println("Human is controlling the game board GUI.");
|
||||
spectatorBoard = null;
|
||||
} else {
|
||||
System.out.println("Starting game board GUI in spectator mode.");
|
||||
spectatorBoard = new Goban(gameConfig, null);
|
||||
}
|
||||
|
||||
try {
|
||||
while (!gameRecord.isFinished()) {
|
||||
GameState gameState = gameRecord.getGameState(gameRecord.getNumTurns());
|
||||
System.out.println(gameState);
|
||||
GameState gameState = gameRecord.getGameState(gameRecord
|
||||
.getNumTurns());
|
||||
//System.out.println(gameState);
|
||||
|
||||
Player playerToMove = gameRecord.getPlayerToMove();
|
||||
Policy policy = getPolicy(playerToMove);
|
||||
Action action = policy.getAction(gameConfig,
|
||||
gameState, playerToMove);
|
||||
|
||||
Action action = policy.getAction(gameConfig, gameState,
|
||||
playerToMove);
|
||||
|
||||
if (gameRecord.play(playerToMove, action)) {
|
||||
policy.setState(gameRecord.getGameState(gameRecord.getNumTurns()));
|
||||
GameState nextState = gameRecord.getGameState(gameRecord
|
||||
.getNumTurns());
|
||||
policy.setState(nextState);
|
||||
if (spectatorBoard != null) {
|
||||
spectatorBoard.setGameState(nextState);
|
||||
}
|
||||
} else {
|
||||
System.out.println("Move rejected - try again.");
|
||||
}
|
||||
@@ -101,12 +120,13 @@ public class Referee {
|
||||
|
||||
System.out.println("Game over. Result: " + result);
|
||||
|
||||
DateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmssZ");
|
||||
//DateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmssZ");
|
||||
|
||||
try {
|
||||
|
||||
File sgfFile = new File("gogame-" + dateFormat.format(new Date())
|
||||
+ ".sgf");
|
||||
// File sgfFile = new File("gogame-" + dateFormat.format(new Date())
|
||||
// + ".sgf");
|
||||
File sgfFile = new File("gogame-" + gameNo + ".sgf");
|
||||
FileOutputStream fos = new FileOutputStream(sgfFile);
|
||||
try {
|
||||
SGFWriter.write(fos, gameRecord);
|
||||
|
||||
@@ -19,50 +19,31 @@ import net.woodyfolsom.msproj.policy.RandomMovePolicy;
|
||||
import net.woodyfolsom.msproj.policy.RootParallelization;
|
||||
|
||||
public class StandAloneGame {
|
||||
private static final int DEFAULT_TURN_LENGTH = 1; // default turn is 2
|
||||
// seconds;
|
||||
private static final double DEFAULT_KOMI = 5.5;
|
||||
private static final int DEFAULT_NUM_GAMES = 1;
|
||||
private static final int DEFAULT_SIZE = 9;
|
||||
|
||||
private static final int EXIT_NOMINAL = 0;
|
||||
private static final int EXIT_IO_EXCEPTION = 1;
|
||||
|
||||
private int gameNo = 0;
|
||||
|
||||
enum PLAYER_TYPE {
|
||||
HUMAN, HUMAN_GUI, ROOT_PAR, UCT, RANDOM, RAVE
|
||||
};
|
||||
|
||||
public static void main(String[] args) {
|
||||
if (args.length != 3) {
|
||||
System.out
|
||||
.println("Incorrect # of arguments: use StandAloneGame <Player1Type> <Player2Type> <# rounds>");
|
||||
System.out
|
||||
.println("For example to play 10 games against MC UCT w/ slow moves: StandAloneGame UCT_SLOW HUMAN 10");
|
||||
try {
|
||||
GameSettings gameSettings = GameSettings
|
||||
.createGameSetings("data/gogame.cfg");
|
||||
System.out.println("Game Settings: " + gameSettings);
|
||||
System.out.println("Successfully parsed game settings.");
|
||||
new StandAloneGame().playGame(
|
||||
parsePlayerType(gameSettings.getPlayerOne()),
|
||||
parsePlayerType(gameSettings.getPlayerTwo()),
|
||||
gameSettings.getBoardSize(), gameSettings.getKomi(),
|
||||
gameSettings.getNumGames(), gameSettings.getTurnTime());
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
System.exit(EXIT_IO_EXCEPTION);
|
||||
}
|
||||
int nGames = DEFAULT_NUM_GAMES;
|
||||
int size = DEFAULT_SIZE;
|
||||
double komi = DEFAULT_KOMI;
|
||||
int turnLength = DEFAULT_TURN_LENGTH;
|
||||
|
||||
switch (args.length) {
|
||||
case 6:
|
||||
turnLength = Integer.valueOf(args[5]);
|
||||
case 5:
|
||||
nGames = Integer.valueOf(args[4]);
|
||||
case 4:
|
||||
komi = Double.valueOf(args[3]);
|
||||
case 3:
|
||||
size = Integer.valueOf(args[2]);
|
||||
break;
|
||||
default:
|
||||
System.out
|
||||
.println("Arguments #3-5 not specified. Using default size="
|
||||
+ size
|
||||
+ ", komi = "
|
||||
+ komi
|
||||
+ ", nGames="
|
||||
+ nGames
|
||||
+ ".");
|
||||
}
|
||||
new StandAloneGame().playGame(parsePlayerType(args[0]),
|
||||
parsePlayerType(args[1]), size, komi, nGames, turnLength);
|
||||
System.exit(EXIT_NOMINAL);
|
||||
}
|
||||
|
||||
private static PLAYER_TYPE parsePlayerType(String playerTypeStr) {
|
||||
@@ -84,10 +65,10 @@ public class StandAloneGame {
|
||||
}
|
||||
|
||||
public void playGame(PLAYER_TYPE playerType1, PLAYER_TYPE playerType2,
|
||||
int size, double komi, int rounds, int turnLength) {
|
||||
int size, double komi, int rounds, long turnLength) {
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
|
||||
GameConfig gameConfig = new GameConfig(size);
|
||||
gameConfig.setKomi(komi);
|
||||
|
||||
@@ -98,9 +79,10 @@ public class StandAloneGame {
|
||||
getPolicy(playerType2, gameConfig, Player.WHITE, turnLength));
|
||||
|
||||
List<GameResult> round1results = new ArrayList<GameResult>();
|
||||
|
||||
|
||||
for (int round = 0; round < rounds; round++) {
|
||||
round1results.add(referee.play(gameConfig));
|
||||
gameNo++;
|
||||
round1results.add(referee.play(gameConfig, gameNo));
|
||||
}
|
||||
|
||||
List<GameResult> round2results = new ArrayList<GameResult>();
|
||||
@@ -110,11 +92,12 @@ public class StandAloneGame {
|
||||
referee.setPolicy(Player.WHITE,
|
||||
getPolicy(playerType1, gameConfig, Player.WHITE, turnLength));
|
||||
for (int round = 0; round < rounds; round++) {
|
||||
round2results.add(referee.play(gameConfig));
|
||||
gameNo++;
|
||||
round2results.add(referee.play(gameConfig, gameNo));
|
||||
}
|
||||
|
||||
long endTime = System.currentTimeMillis();
|
||||
|
||||
|
||||
DateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmss");
|
||||
|
||||
try {
|
||||
@@ -129,8 +112,9 @@ public class StandAloneGame {
|
||||
logResults(writer, round2results, playerType2.toString(),
|
||||
playerType1.toString());
|
||||
|
||||
writer.write("Elapsed Time: " + (endTime - startTime) / 1000.0 + " seconds.");
|
||||
|
||||
writer.write("Elapsed Time: " + (endTime - startTime) / 1000.0
|
||||
+ " seconds.");
|
||||
|
||||
System.out.println("Game tournament saved as "
|
||||
+ txtFile.getAbsolutePath());
|
||||
} finally {
|
||||
@@ -165,24 +149,26 @@ public class StandAloneGame {
|
||||
}
|
||||
|
||||
private Policy getPolicy(PLAYER_TYPE playerType, GameConfig gameConfig,
|
||||
Player player, int turnLength) {
|
||||
Player player, long turnLength) {
|
||||
switch (playerType) {
|
||||
case HUMAN:
|
||||
return new HumanKeyboardInput();
|
||||
case HUMAN_GUI:
|
||||
return new HumanGuiInput(new Goban(gameConfig, player));
|
||||
case ROOT_PAR:
|
||||
return new RootParallelization(4, turnLength * 1000L);
|
||||
return new RootParallelization(4, turnLength);
|
||||
case UCT:
|
||||
return new MonteCarloUCT(new RandomMovePolicy(),
|
||||
turnLength * 1000L);
|
||||
return new MonteCarloUCT(new RandomMovePolicy(), turnLength);
|
||||
case RANDOM:
|
||||
return new RandomMovePolicy();
|
||||
RandomMovePolicy randomMovePolicy = new RandomMovePolicy();
|
||||
randomMovePolicy.setLogging(true);
|
||||
return randomMovePolicy;
|
||||
case RAVE:
|
||||
return new MonteCarloAMAF(new RandomMovePolicy(), turnLength * 1000L);
|
||||
return new MonteCarloAMAF(new RandomMovePolicy(), turnLength);
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid PLAYER_TYPE: "
|
||||
+ playerType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -44,7 +44,7 @@ public class PassLearner implements NeuralNetLearner {
|
||||
private void learnANN() {
|
||||
List<GameRecord> parsedRecords = new ArrayList<GameRecord>();
|
||||
|
||||
for (File sgfFile : getDataFiles("data/tourney1")) {
|
||||
for (File sgfFile : getDataFiles("data/games/random_vs_random")) {
|
||||
System.out.println("Parsing " + sgfFile.getPath() + "...");
|
||||
try {
|
||||
GameRecord gameRecord = parseSGF(sgfFile);
|
||||
@@ -78,7 +78,7 @@ public class PassLearner implements NeuralNetLearner {
|
||||
getNeuralNetwork().setInput(0.25,0.50);
|
||||
System.out.println("Output of ann(0.50,0.99): " + passData.getOutput(getNeuralNetwork().getOutput()));
|
||||
|
||||
getNeuralNetwork().save("data/networks/Pass.nn");
|
||||
getNeuralNetwork().save("data/networks/Pass2.nn");
|
||||
|
||||
testNetwork(getNeuralNetwork(), passData.getTrainingSet());
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import net.woodyfolsom.msproj.GameState;
|
||||
import net.woodyfolsom.msproj.Player;
|
||||
|
||||
public class RandomMovePolicy implements Policy, ActionGenerator {
|
||||
//private final boolean passWhenLosing = false;
|
||||
private boolean logging = false;
|
||||
|
||||
/**
|
||||
* Does NOT modify the gameState.
|
||||
@@ -35,11 +35,6 @@ public class RandomMovePolicy implements Policy, ActionGenerator {
|
||||
public List<Action> getActions(GameConfig gameConfig, GameState gameState,
|
||||
Collection<Action> prohibitedMoves, Player player, int nMoves) {
|
||||
List<Action> randomActions = new ArrayList<Action>();
|
||||
|
||||
/*if (gameState.isTerminal()) {
|
||||
randomActions.add(Action.NONE);
|
||||
return randomActions;
|
||||
}*/
|
||||
|
||||
if (player != gameState.getPlayerToMove()) {
|
||||
throw new IllegalArgumentException("It is not " + player
|
||||
@@ -53,9 +48,7 @@ public class RandomMovePolicy implements Policy, ActionGenerator {
|
||||
gameStateCopy, prohibitedMoves, player,
|
||||
ActionGenerator.ALL_ACTIONS);
|
||||
|
||||
//
|
||||
boolean playerIsWinning = gameState.getResult().isWinner(player);
|
||||
//
|
||||
|
||||
while (possibleActions.size() > 0 && randomActions.size() < nMoves) {
|
||||
Action randomAction = possibleActions
|
||||
@@ -65,11 +58,6 @@ public class RandomMovePolicy implements Policy, ActionGenerator {
|
||||
randomActions.add(randomAction);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//if (randomActions.size() == 0) {
|
||||
// randomActions.add(Action.NONE);
|
||||
//}
|
||||
|
||||
//PASS is always the move of last resort if no valid moves exist
|
||||
//Action.NONE exists for a reason - if the fail-safe was to ALWAYS return PASS, then MCTS would
|
||||
@@ -115,12 +103,23 @@ public class RandomMovePolicy implements Policy, ActionGenerator {
|
||||
@Override
|
||||
public Action getAction(GameConfig gameConfig, GameState gameState,
|
||||
Player player) {
|
||||
return getActions(gameConfig, gameState, player, 1).get(0);
|
||||
Action randomAction = getActions(gameConfig, gameState, player, 1).get(0);
|
||||
if (logging) {
|
||||
System.out.println("Random action " + randomAction + " selected for " + player + ".");
|
||||
}
|
||||
return randomAction;
|
||||
}
|
||||
|
||||
public boolean isLogging() {
|
||||
return logging;
|
||||
}
|
||||
|
||||
public void setLogging(boolean isLogging) {
|
||||
this.logging = isLogging;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setState(GameState gameState) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
}
|
||||
25
test/net/woodyfolsom/msproj/TestGameSettings.java
Normal file
25
test/net/woodyfolsom/msproj/TestGameSettings.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package net.woodyfolsom.msproj;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestGameSettings {
|
||||
|
||||
@Test
|
||||
public void TestCreateGameSettings() throws IOException {
|
||||
GameSettings gameSettings = GameSettings.createGameSetings("data/test/gogame-test1.cfg");
|
||||
assertNotNull(gameSettings);
|
||||
|
||||
assertEquals(8,gameSettings.getBoardSize());
|
||||
assertEquals(123L,gameSettings.getGuiDelay());
|
||||
assertEquals(3000L,gameSettings.getTurnTime());
|
||||
assertEquals(5.5,gameSettings.getKomi(),0.01);
|
||||
assertEquals("RAVE", gameSettings.getPlayerOne());
|
||||
assertEquals("RANDOM", gameSettings.getPlayerTwo());
|
||||
assertEquals(7, gameSettings.getNumGames());
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import org.neuroph.core.NeuralNetwork;
|
||||
public class PassNetworkTest {
|
||||
|
||||
@Test
|
||||
public void testSavedNetwork() {
|
||||
public void testSavedNetwork1() {
|
||||
NeuralNetwork passFilter = NeuralNetwork.load("data/networks/Pass1.nn");
|
||||
passFilter.setInput(0.75,0.25);
|
||||
passFilter.calculate();
|
||||
@@ -27,4 +27,25 @@ public class PassNetworkTest {
|
||||
assertTrue(output[0] < 0.50);
|
||||
assertTrue(output[1] > 0.50);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSavedNetwork2() {
|
||||
NeuralNetwork passFilter = NeuralNetwork.load("data/networks/Pass2.nn");
|
||||
passFilter.setInput(0.75,0.25);
|
||||
passFilter.calculate();
|
||||
|
||||
PassData passData = new PassData();
|
||||
double[] output = passFilter.getOutput();
|
||||
System.out.println("Output: " + passData.getOutput(output));
|
||||
|
||||
assertTrue(output[0] > 0.50);
|
||||
assertTrue(output[1] < 0.50);
|
||||
|
||||
passFilter.setInput(0.45,0.55);
|
||||
passFilter.calculate();
|
||||
output = passFilter.getOutput();
|
||||
System.out.println("Output: " + passData.getOutput(output));
|
||||
assertTrue(output[0] < 0.50);
|
||||
assertTrue(output[1] > 0.50);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user