Applying proof numbers to Life and Death: First Result Akihiro Kishimoto
Outline Introduction Current Status of my Tsume-Go solver Experiments Issues to be resolved Conclusions
Research Direction Go is hard to do a brute-force search –Still we need a search to prove the safety of stones Need a “smarter” search algorithm –Proof and disproof numbers are successful in tsume-shogi solvers –Why not apply this method to tsume-go solvers?
Current Status Writing a tsumego solver for Explorer –Proof numbers as a threshold as well as an evaluation [Seo:95] –Disproof numbers for dynamic ordering at AND nodes –Garbage collection scheme [Nagai:99]
What I haven’t done Handle Ko and Seki –E.g. Seki causes an issue (c.f. GHI problem) Enhancements –Most important part to go up performance
Proof Numbers Variable depth-first search [Seo:95] –Proof number [Allis:94] as a threshold –Transposition table Proof Number pn OR nodeAND node 1
Proof Numbers: How to Compute? pn(n): minimal number of leaf nodes to prove n Terminal Node: –OR: pn(n) = Inf –AND: pn(n) = 0 Leaf (Unknown) Node: – pn(n) = 1 Internal node: – OR: pn(n) = min (pn(n1), …, pn(nk)) n1…nk:children – AND: pn(n) = pn(n1) + …. + pn (nk) n1… nk: children
Disproof Numbers Dual notion of proof numbers pn(n): minimal number of leaf nodes to prove n dn(n): minimal number of leaf nodes to disprove n Disproof Number pn OR nodeAND node
Disproof Numbers: How to Compute? Terminal Node: –OR: dn(n) = 0 –AND: dn(n) = Inf Leaf (Unknown) Node: – dn(n) = 1 Internal node: –OR: dn(n) = dn(n1)+ … +dn(nk)) n1… nk: children –AND: dn(n) = min(dn(n1),….,dn (nk)) n1… nk: children
Garbage Collection Scheme Transposition table can’t save all the nodes –Some information must be discarded –Want to keep more important information SmallTreeGC [Nagai:99] 0 Small tree Large tree 0 0
Garbage Collection Scheme (cont’d) 1.Keep an entry to count the size of subtree 2.Discard TT entries with small subtrees 3.Continue 2 until TT has enough empty entries e.g. 60 % of entries are thrown out
Experimental Results Pick up 5 problems from Thomas Wolf’s collection (lv1) Problems solved: 3
Experimental Results (cont’d) 58,653 nodes Depth=8 10,775 nodes Depth=13 Unsolved 157,653 nodes
What happens? (Show the search space) –Weak heuristic to kill stones pass is weird –Stable branching factor? –Slow
Not Research Issue but Important! # of nodes expanded per second is slow and unstable (1,000 – 10,000 nodes/sec on leedale) Case: 4,000 nodes / sec % cumulative List::LongContains TsumeGoTask::NuMovesToAdd TsumeGoTask::CheckAdj kHash::initTable List::Append(int)
Not Research Issue but Important (cont’d) Case: 1,000 nodes/ sec % cumulative List::LongContains TsumeGoTask::NuMovesToAdd List::Append(int) TsumeGoTask::GenMoves GoBoard::AdjacentBlocks
Things to be Implemented: (Dis)proof with Cyclic Positions (c.f. GHI Problem)[Breuker:98] –Duplicate TT entries to save results [Nagai:02] –Specific method to df- pn B A Proof? Disproof? C D E
Overestimation of Proof and Disproof Numbers Proof Set Search [Mueller:2002] –Keep a set rather than numbers for (dis)proof [Nagai: 2002] –Keep track of ancestors of a node with more than one parents Example AND nodeOR node pn = 1!!
Conclusions Are proof and disproof numbers effective? –Too early to conclude –Need lots of enhancements Evaluation functions Simulation Position decomposition …
Near Future Work Incorporate Martin’s one-eye evaluation function Handle Ko [Wolf] and Seki Convert Seo’s algorithm into df-pn –Df-pn doesn’t work well at present…. Faster implementation