From 49d3b2c242b2b3fb522f289c2b33bfa587976d59 Mon Sep 17 00:00:00 2001 From: Woody Folsom Date: Mon, 19 Nov 2012 10:56:46 -0500 Subject: [PATCH] Added spectator GUI when HUMAN_GUI is not one of the two players. Logging to System.out is now significantly less verbose. --- data/games/random_vs_random/gogame-1.sgf | 1 + data/games/random_vs_random/gogame-10.sgf | 1 + data/games/random_vs_random/gogame-11.sgf | 1 + data/games/random_vs_random/gogame-12.sgf | 1 + data/games/random_vs_random/gogame-13.sgf | 1 + data/games/random_vs_random/gogame-14.sgf | 1 + data/games/random_vs_random/gogame-15.sgf | 1 + data/games/random_vs_random/gogame-16.sgf | 1 + data/games/random_vs_random/gogame-17.sgf | 1 + data/games/random_vs_random/gogame-18.sgf | 1 + data/games/random_vs_random/gogame-19.sgf | 1 + data/games/random_vs_random/gogame-2.sgf | 1 + data/games/random_vs_random/gogame-20.sgf | 1 + data/games/random_vs_random/gogame-21.sgf | 1 + data/games/random_vs_random/gogame-22.sgf | 1 + data/games/random_vs_random/gogame-23.sgf | 1 + data/games/random_vs_random/gogame-24.sgf | 1 + data/games/random_vs_random/gogame-25.sgf | 1 + data/games/random_vs_random/gogame-26.sgf | 1 + data/games/random_vs_random/gogame-27.sgf | 1 + data/games/random_vs_random/gogame-28.sgf | 1 + data/games/random_vs_random/gogame-29.sgf | 1 + data/games/random_vs_random/gogame-3.sgf | 1 + data/games/random_vs_random/gogame-30.sgf | 1 + data/games/random_vs_random/gogame-31.sgf | 1 + data/games/random_vs_random/gogame-32.sgf | 1 + data/games/random_vs_random/gogame-33.sgf | 1 + data/games/random_vs_random/gogame-34.sgf | 1 + data/games/random_vs_random/gogame-35.sgf | 1 + data/games/random_vs_random/gogame-36.sgf | 1 + data/games/random_vs_random/gogame-37.sgf | 1 + data/games/random_vs_random/gogame-38.sgf | 1 + data/games/random_vs_random/gogame-39.sgf | 1 + data/games/random_vs_random/gogame-4.sgf | 1 + data/games/random_vs_random/gogame-40.sgf | 1 + data/games/random_vs_random/gogame-5.sgf | 1 + data/games/random_vs_random/gogame-6.sgf | 1 + data/games/random_vs_random/gogame-7.sgf | 1 + data/games/random_vs_random/gogame-8.sgf | 1 + data/games/random_vs_random/gogame-9.sgf | 1 + .../gotournament-121118195302.txt | 43 ++++++ data/gogame.cfg | 7 + data/networks/Pass2.nn | Bin 0 -> 3954 bytes data/test/gogame-test1.cfg | 7 + src/net/woodyfolsom/msproj/GameSettings.java | 130 ++++++++++++++++++ src/net/woodyfolsom/msproj/Referee.java | 78 +++++++---- .../woodyfolsom/msproj/StandAloneGame.java | 92 ++++++------- .../woodyfolsom/msproj/ann/PassLearner.java | 4 +- .../msproj/policy/RandomMovePolicy.java | 31 ++--- .../woodyfolsom/msproj/TestGameSettings.java | 25 ++++ .../msproj/ann/PassNetworkTest.java | 23 +++- 51 files changed, 379 insertions(+), 101 deletions(-) create mode 100644 data/games/random_vs_random/gogame-1.sgf create mode 100644 data/games/random_vs_random/gogame-10.sgf create mode 100644 data/games/random_vs_random/gogame-11.sgf create mode 100644 data/games/random_vs_random/gogame-12.sgf create mode 100644 data/games/random_vs_random/gogame-13.sgf create mode 100644 data/games/random_vs_random/gogame-14.sgf create mode 100644 data/games/random_vs_random/gogame-15.sgf create mode 100644 data/games/random_vs_random/gogame-16.sgf create mode 100644 data/games/random_vs_random/gogame-17.sgf create mode 100644 data/games/random_vs_random/gogame-18.sgf create mode 100644 data/games/random_vs_random/gogame-19.sgf create mode 100644 data/games/random_vs_random/gogame-2.sgf create mode 100644 data/games/random_vs_random/gogame-20.sgf create mode 100644 data/games/random_vs_random/gogame-21.sgf create mode 100644 data/games/random_vs_random/gogame-22.sgf create mode 100644 data/games/random_vs_random/gogame-23.sgf create mode 100644 data/games/random_vs_random/gogame-24.sgf create mode 100644 data/games/random_vs_random/gogame-25.sgf create mode 100644 data/games/random_vs_random/gogame-26.sgf create mode 100644 data/games/random_vs_random/gogame-27.sgf create mode 100644 data/games/random_vs_random/gogame-28.sgf create mode 100644 data/games/random_vs_random/gogame-29.sgf create mode 100644 data/games/random_vs_random/gogame-3.sgf create mode 100644 data/games/random_vs_random/gogame-30.sgf create mode 100644 data/games/random_vs_random/gogame-31.sgf create mode 100644 data/games/random_vs_random/gogame-32.sgf create mode 100644 data/games/random_vs_random/gogame-33.sgf create mode 100644 data/games/random_vs_random/gogame-34.sgf create mode 100644 data/games/random_vs_random/gogame-35.sgf create mode 100644 data/games/random_vs_random/gogame-36.sgf create mode 100644 data/games/random_vs_random/gogame-37.sgf create mode 100644 data/games/random_vs_random/gogame-38.sgf create mode 100644 data/games/random_vs_random/gogame-39.sgf create mode 100644 data/games/random_vs_random/gogame-4.sgf create mode 100644 data/games/random_vs_random/gogame-40.sgf create mode 100644 data/games/random_vs_random/gogame-5.sgf create mode 100644 data/games/random_vs_random/gogame-6.sgf create mode 100644 data/games/random_vs_random/gogame-7.sgf create mode 100644 data/games/random_vs_random/gogame-8.sgf create mode 100644 data/games/random_vs_random/gogame-9.sgf create mode 100644 data/games/random_vs_random/gotournament-121118195302.txt create mode 100644 data/gogame.cfg create mode 100644 data/networks/Pass2.nn create mode 100644 data/test/gogame-test1.cfg create mode 100644 src/net/woodyfolsom/msproj/GameSettings.java create mode 100644 test/net/woodyfolsom/msproj/TestGameSettings.java diff --git a/data/games/random_vs_random/gogame-1.sgf b/data/games/random_vs_random/gogame-1.sgf new file mode 100644 index 0000000..6449690 --- /dev/null +++ b/data/games/random_vs_random/gogame-1.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-10.sgf b/data/games/random_vs_random/gogame-10.sgf new file mode 100644 index 0000000..432a720 --- /dev/null +++ b/data/games/random_vs_random/gogame-10.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-11.sgf b/data/games/random_vs_random/gogame-11.sgf new file mode 100644 index 0000000..cd4befe --- /dev/null +++ b/data/games/random_vs_random/gogame-11.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-12.sgf b/data/games/random_vs_random/gogame-12.sgf new file mode 100644 index 0000000..322b9ec --- /dev/null +++ b/data/games/random_vs_random/gogame-12.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-13.sgf b/data/games/random_vs_random/gogame-13.sgf new file mode 100644 index 0000000..5c073ab --- /dev/null +++ b/data/games/random_vs_random/gogame-13.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-14.sgf b/data/games/random_vs_random/gogame-14.sgf new file mode 100644 index 0000000..e993a85 --- /dev/null +++ b/data/games/random_vs_random/gogame-14.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-15.sgf b/data/games/random_vs_random/gogame-15.sgf new file mode 100644 index 0000000..4764402 --- /dev/null +++ b/data/games/random_vs_random/gogame-15.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-16.sgf b/data/games/random_vs_random/gogame-16.sgf new file mode 100644 index 0000000..37fed35 --- /dev/null +++ b/data/games/random_vs_random/gogame-16.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-17.sgf b/data/games/random_vs_random/gogame-17.sgf new file mode 100644 index 0000000..2789021 --- /dev/null +++ b/data/games/random_vs_random/gogame-17.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-18.sgf b/data/games/random_vs_random/gogame-18.sgf new file mode 100644 index 0000000..0ef3140 --- /dev/null +++ b/data/games/random_vs_random/gogame-18.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-19.sgf b/data/games/random_vs_random/gogame-19.sgf new file mode 100644 index 0000000..8a65d1a --- /dev/null +++ b/data/games/random_vs_random/gogame-19.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-2.sgf b/data/games/random_vs_random/gogame-2.sgf new file mode 100644 index 0000000..a7e44d7 --- /dev/null +++ b/data/games/random_vs_random/gogame-2.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-20.sgf b/data/games/random_vs_random/gogame-20.sgf new file mode 100644 index 0000000..d8d8360 --- /dev/null +++ b/data/games/random_vs_random/gogame-20.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-21.sgf b/data/games/random_vs_random/gogame-21.sgf new file mode 100644 index 0000000..9e18c6b --- /dev/null +++ b/data/games/random_vs_random/gogame-21.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-22.sgf b/data/games/random_vs_random/gogame-22.sgf new file mode 100644 index 0000000..108e9cd --- /dev/null +++ b/data/games/random_vs_random/gogame-22.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-23.sgf b/data/games/random_vs_random/gogame-23.sgf new file mode 100644 index 0000000..632b251 --- /dev/null +++ b/data/games/random_vs_random/gogame-23.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-24.sgf b/data/games/random_vs_random/gogame-24.sgf new file mode 100644 index 0000000..5d39670 --- /dev/null +++ b/data/games/random_vs_random/gogame-24.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-25.sgf b/data/games/random_vs_random/gogame-25.sgf new file mode 100644 index 0000000..edf9013 --- /dev/null +++ b/data/games/random_vs_random/gogame-25.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-26.sgf b/data/games/random_vs_random/gogame-26.sgf new file mode 100644 index 0000000..3490244 --- /dev/null +++ b/data/games/random_vs_random/gogame-26.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-27.sgf b/data/games/random_vs_random/gogame-27.sgf new file mode 100644 index 0000000..aa3c7c4 --- /dev/null +++ b/data/games/random_vs_random/gogame-27.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-28.sgf b/data/games/random_vs_random/gogame-28.sgf new file mode 100644 index 0000000..0b142da --- /dev/null +++ b/data/games/random_vs_random/gogame-28.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-29.sgf b/data/games/random_vs_random/gogame-29.sgf new file mode 100644 index 0000000..9d2b219 --- /dev/null +++ b/data/games/random_vs_random/gogame-29.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-3.sgf b/data/games/random_vs_random/gogame-3.sgf new file mode 100644 index 0000000..ed38aea --- /dev/null +++ b/data/games/random_vs_random/gogame-3.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-30.sgf b/data/games/random_vs_random/gogame-30.sgf new file mode 100644 index 0000000..37bf101 --- /dev/null +++ b/data/games/random_vs_random/gogame-30.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-31.sgf b/data/games/random_vs_random/gogame-31.sgf new file mode 100644 index 0000000..787a13b --- /dev/null +++ b/data/games/random_vs_random/gogame-31.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-32.sgf b/data/games/random_vs_random/gogame-32.sgf new file mode 100644 index 0000000..5f43111 --- /dev/null +++ b/data/games/random_vs_random/gogame-32.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-33.sgf b/data/games/random_vs_random/gogame-33.sgf new file mode 100644 index 0000000..9b4d742 --- /dev/null +++ b/data/games/random_vs_random/gogame-33.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-34.sgf b/data/games/random_vs_random/gogame-34.sgf new file mode 100644 index 0000000..087a4af --- /dev/null +++ b/data/games/random_vs_random/gogame-34.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-35.sgf b/data/games/random_vs_random/gogame-35.sgf new file mode 100644 index 0000000..a1c5d83 --- /dev/null +++ b/data/games/random_vs_random/gogame-35.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-36.sgf b/data/games/random_vs_random/gogame-36.sgf new file mode 100644 index 0000000..d5b02c1 --- /dev/null +++ b/data/games/random_vs_random/gogame-36.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-37.sgf b/data/games/random_vs_random/gogame-37.sgf new file mode 100644 index 0000000..269f2fb --- /dev/null +++ b/data/games/random_vs_random/gogame-37.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-38.sgf b/data/games/random_vs_random/gogame-38.sgf new file mode 100644 index 0000000..62bdab7 --- /dev/null +++ b/data/games/random_vs_random/gogame-38.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-39.sgf b/data/games/random_vs_random/gogame-39.sgf new file mode 100644 index 0000000..90e7115 --- /dev/null +++ b/data/games/random_vs_random/gogame-39.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-4.sgf b/data/games/random_vs_random/gogame-4.sgf new file mode 100644 index 0000000..df98e98 --- /dev/null +++ b/data/games/random_vs_random/gogame-4.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-40.sgf b/data/games/random_vs_random/gogame-40.sgf new file mode 100644 index 0000000..78dba43 --- /dev/null +++ b/data/games/random_vs_random/gogame-40.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-5.sgf b/data/games/random_vs_random/gogame-5.sgf new file mode 100644 index 0000000..29113ae --- /dev/null +++ b/data/games/random_vs_random/gogame-5.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-6.sgf b/data/games/random_vs_random/gogame-6.sgf new file mode 100644 index 0000000..550b9ff --- /dev/null +++ b/data/games/random_vs_random/gogame-6.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-7.sgf b/data/games/random_vs_random/gogame-7.sgf new file mode 100644 index 0000000..6a83e27 --- /dev/null +++ b/data/games/random_vs_random/gogame-7.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-8.sgf b/data/games/random_vs_random/gogame-8.sgf new file mode 100644 index 0000000..30978df --- /dev/null +++ b/data/games/random_vs_random/gogame-8.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gogame-9.sgf b/data/games/random_vs_random/gogame-9.sgf new file mode 100644 index 0000000..c3e8916 --- /dev/null +++ b/data/games/random_vs_random/gogame-9.sgf @@ -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[]) \ No newline at end of file diff --git a/data/games/random_vs_random/gotournament-121118195302.txt b/data/games/random_vs_random/gotournament-121118195302.txt new file mode 100644 index 0000000..e38db5a --- /dev/null +++ b/data/games/random_vs_random/gotournament-121118195302.txt @@ -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. \ No newline at end of file diff --git a/data/gogame.cfg b/data/gogame.cfg new file mode 100644 index 0000000..3a82545 --- /dev/null +++ b/data/gogame.cfg @@ -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 \ No newline at end of file diff --git a/data/networks/Pass2.nn b/data/networks/Pass2.nn new file mode 100644 index 0000000000000000000000000000000000000000..e5ae0daf1c323468d10e87b46cc5b16a59b02dcb GIT binary patch literal 3954 zcma)9U2GIp6u#YV*-~1zEm%N)3M~=}%`QemB#qgnY)ep5rc{OoQQyU9*w?)}c+ zch9-^-0SyQi*2!|46BgPRmU>SVnWwdkr;PMLR0v>YE7tCPBn#P=*;~^B8*imwk0f+ zGb}Z67!>f*VO7i-)>#RTMp#T??V4^n0_P3g7OYcwozL>5BeYUd(QGlKu$B@(qm~5g zcBe{QFC?dgrRfEjTv0+t>~rh_i-59{$}JscCY_Qh*iHo;NlNFF=t$B7B$W^n^mG`G z2>g)hVrI!HXy{fvEzIy#LCwxcRGqK^owC1=;{;}*X|z2a*d9(A}=nD72vV2ju(m~@v^EFibBm#Ipu01 zw>J=|3SEjo)aZKqs@)C>GxBK=(cz*-myQOD=V5qlZJuFF2sO|B;!xEsVprHOgi zC^C-c8nqq&Xv+DET-rUF15Q3Jqo zeIdF&2PxB(VJ)+~eyHp3h#84fr_nRii6r8*0}8w74Xa|C>r=x6=64N zY!qSO`ySNMOW%X3Kd)cwzjNX>97=>B^cvXl@&RE)5XHYw>UeZ)!-=09EfDWRoHu*_ zvx7tLUAc=x&s7N1U@5%a&^O|02)u~Otn>lB_?D4g{5n~g?|I@u;Ke{__Ga{2{>I+L zqd0WHh0rre&#FxXAq}XM9wOp}z|J9h{XaJ+2{o8rbG7%KFybgpRnC^ zxEs1W(goYPbZPsCJ``(ET_M6U6bR*S43fUSb?~`)fl$r) z5Uv?BEx+6)NGd;ugo=kc{@|33K-tfa!KssB z(Rsy~BMrIKLl@vZ(UzCM_ty3+4}R-e*21FPX$t2|TI!O){dIDG-<@YxBj6a>oLLg~ zh%ZKOeOajEAhfAcjZ-P_k>R7#;!+_Dc+9SQ_TkTWKYeTnp_~{)g)cSsGCg=P^~?t(XCFW02AJ+Y_iu0f$S@A=U9R7wh@Nij z_sw13wVb`ay$xZz@i8Qw$M?590`a4-A{Zm`a1RQRPh&F(IgNeI)8WjgGs0_d6XQl1 z8ZM_i%yVZ==-zpOW3yL9LTg!qpoj( zaC2jW%J`JT${WRC7)xvG$2sMgsx_hOT87^|gaU-v0SZkSAMl8#) z!20gS8nZ&RfU8-xMj<3lG|M`3j)kqPL>c;V)}^@;&`K*>89wrv&{c#BHOo4{v@cn)+W%&$8<+8SQY|Z76t~T<3)li3A~wsZE9p8_u9REeh+diim`8rWpw84--_S+toVE z?NCC&i4@g&StaS((+LNGDKh$@VC`Y&a4tqOAJm1&unH>|YOW9D3wB`sO5i0=2FbeV s2E3YB#;a;#MECC&G-(RfGybA7ojs-Oe`RFy)Wpc-fsu*n$s>pV1Iz_t&;S4c literal 0 HcmV?d00001 diff --git a/data/test/gogame-test1.cfg b/data/test/gogame-test1.cfg new file mode 100644 index 0000000..fe028ca --- /dev/null +++ b/data/test/gogame-test1.cfg @@ -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 \ No newline at end of file diff --git a/src/net/woodyfolsom/msproj/GameSettings.java b/src/net/woodyfolsom/msproj/GameSettings.java new file mode 100644 index 0000000..c9b98fa --- /dev/null +++ b/src/net/woodyfolsom/msproj/GameSettings.java @@ -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(); + } +} \ No newline at end of file diff --git a/src/net/woodyfolsom/msproj/Referee.java b/src/net/woodyfolsom/msproj/Referee.java index 782add9..c2be1e2 100644 --- a/src/net/woodyfolsom/msproj/Referee.java +++ b/src/net/woodyfolsom/msproj/Referee.java @@ -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); diff --git a/src/net/woodyfolsom/msproj/StandAloneGame.java b/src/net/woodyfolsom/msproj/StandAloneGame.java index 740347b..1455db0 100644 --- a/src/net/woodyfolsom/msproj/StandAloneGame.java +++ b/src/net/woodyfolsom/msproj/StandAloneGame.java @@ -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 <# 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 round1results = new ArrayList(); - + for (int round = 0; round < rounds; round++) { - round1results.add(referee.play(gameConfig)); + gameNo++; + round1results.add(referee.play(gameConfig, gameNo)); } List round2results = new ArrayList(); @@ -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); } } -} + +} \ No newline at end of file diff --git a/src/net/woodyfolsom/msproj/ann/PassLearner.java b/src/net/woodyfolsom/msproj/ann/PassLearner.java index cea200b..1d99127 100644 --- a/src/net/woodyfolsom/msproj/ann/PassLearner.java +++ b/src/net/woodyfolsom/msproj/ann/PassLearner.java @@ -44,7 +44,7 @@ public class PassLearner implements NeuralNetLearner { private void learnANN() { List parsedRecords = new ArrayList(); - 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()); } diff --git a/src/net/woodyfolsom/msproj/policy/RandomMovePolicy.java b/src/net/woodyfolsom/msproj/policy/RandomMovePolicy.java index eae9485..0677eb0 100644 --- a/src/net/woodyfolsom/msproj/policy/RandomMovePolicy.java +++ b/src/net/woodyfolsom/msproj/policy/RandomMovePolicy.java @@ -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 getActions(GameConfig gameConfig, GameState gameState, Collection prohibitedMoves, Player player, int nMoves) { List randomActions = new ArrayList(); - - /*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 } } \ No newline at end of file diff --git a/test/net/woodyfolsom/msproj/TestGameSettings.java b/test/net/woodyfolsom/msproj/TestGameSettings.java new file mode 100644 index 0000000..96983d4 --- /dev/null +++ b/test/net/woodyfolsom/msproj/TestGameSettings.java @@ -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()); + } +} diff --git a/test/net/woodyfolsom/msproj/ann/PassNetworkTest.java b/test/net/woodyfolsom/msproj/ann/PassNetworkTest.java index ec88c0e..134a8ac 100644 --- a/test/net/woodyfolsom/msproj/ann/PassNetworkTest.java +++ b/test/net/woodyfolsom/msproj/ann/PassNetworkTest.java @@ -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); + } }