1 This is brief developer-oriented overview in Pachi structure.
3 Pachi is completely Go-specific (c.f. Fuego; though e.g. atari go support
4 should be easy to add), but fairly modular. It has been built with focus
5 on MonteCarlo-based play, but it can in principle be used for other
12 Pachi consists of the following components:
15 +------+ +--------+ +---------+
16 | core | -- | engine | -- | playout |
17 +------+ +--------+ +---------+
23 * "core" takes care of the program's lifetime, GTP interface and basic
24 fast Go board implementation
26 zzgo.c global initialization and the main loop
27 version.h current version information
28 debug.h debugging infrastructure
29 random.[ch] fast random number generator
30 gtp.[ch] GTP protocol interface
31 timeinfo.[ch] Time-keeping information
32 stone.[ch] one board point coloring definition
33 move.[ch] one board move definition
34 board.[ch] board definition and basic interface
36 * "aux library" provides extra functions like static tactical evaluation
37 and pattern matching; it is somewhat interwound with "core" component
39 mq.h "move queue" data structure
40 stats.h "move statistics" data structure
41 probdist.[ch] "probability distribution" data structure
42 ownermap.[ch] simulation-based finalpos. "owner map" data structure
43 pattern3.[ch] fast 3x3 spatial pattern matcher
44 network.[ch] Network interface (useful for distributed engine)
46 * "tactical library" provides extended interfaces for the go board,
47 most important non-trivial tactical information
49 util.[ch] the universal catch-all for extended board interfaces
51 * "engine" receives notifications about opponent moves and is asked
52 to generate a move to play on given board
54 engine.h abstract engine interface
55 random/ example "random move generator" engine
56 replay/ example "playout move generator" engine
57 montecarlo/ simple treeless Monte Carlo engine, quite bitrotten
58 uct/ the main UCT-player engine, see below
59 distributed/ "meta-engine" for distributed play by orchestrating
60 several UCT engines on different computers
61 joseki/ auxiliary engine for generating joseki patterns
63 * "playout" policy is asked to generate moves to play during the Monte Carlo
64 simulations, and to provide rough evaluation of moves feasibility for
67 playout.[ch] abstract playout policy interface,
68 Monte Carlo simulation execution
69 playout/light uniformly random playout policy
70 playout/moggy rule-based "Mogo-like" playout policy
72 * Also, several ways of testing Pachi are provided:
74 t-unit/ interface for writing unit-tests for specific
75 functionality, mainly tactics
76 t-play/ interface for testing performance by playing games
77 against a fixed opponent (e.g. GNUGo)
83 The UCT engine has non-trivial structure by itself:
85 +-------------+ +-----+ +-------------------+
86 | node policy | -- | UCT | --- | node prior-hinter |
87 +-------------+ +-----+ +-------------------+
93 * "UCT" is the core of the engine
95 uct.[ch] engine initialization, public interface
96 internal.h internal state and data structures
97 tree.[ch] minimax move tree with success statistics
98 walk.[ch] filling the tree by walking it many times
99 and running MC simulations from leaves
100 slave.[ch] engine interface for the distributed engine
102 * "node prior-hinter" assigns newly created nodes preliminary success
103 statistics ("prior values") to focus the search better
105 prior.[ch] variety of methods for setting the priors
107 * "node policy" mainly chooses the current node's child to descend
108 through during the tree walk, based on the already recorded statistics;
109 it must balance exploration and exploitation well during the selection
111 policy/ucb1 the old-school original simple policy
112 policy/ucb1amaf the AMAF/RAVE-based policy gathering statistics rapidly
114 * "dynkomi driver" dynamically determines self-imposed extra virtual komi
122 The infrastructure is optimized for speed to make it well suited
123 for bruteforce engines, however tradeoffs are made to make it useful
124 for heavier MonteCarlo playouts as well (e.g. real liberties are
125 tracked instead of pseudoliberties). If you are looking for raw
126 light playout speed, libEGO is better choice.
128 In general, arbitrary board sizes are supported; however, board sizes
129 smaller than 9x9 have not been tested and board sizes larger than 25x25
130 are not supported by GTP - also, in theory some buffer overflows might
131 happen with board sizes larger than 19x19. The engine parameters are
132 primarily tuned for 19x19 play.
137 While the Pachi engines generally play according to Chinese rules,
138 internally, Pachi uses Tromp-Taylor rules because they are simple,
139 fast and universal; they are very close to the New Zealand rules.
140 That means, it simply counts the number of stones and one-point eyes
141 of each color on the board, plus komi and handicap correction.
143 Tromp-Taylor rules also mean that multi-stone suicide is allowed! If you
144 do not like that (basically if you want to pretend it plays according
145 to Chinese rules), you need to rule that out in your engine, currently.
146 The provided engines DO avoid multi-stone suicide, though it is allowed
147 in the playouts for performance reasons (perhaps we should re-visit that
148 decision in light of heavy playouts).
150 Tromp-Taylor rules have positional superko; the board implementation
151 will set a flag if it is violated, but play the move anyway. You need
152 to enforce the superko rule in your engine.
158 ...is a very sad hack. ENSURE that only trusted parties talk to Pachi's
159 GTP interface, as it is totally non-resilient to any kind of overflow
160 or bad input attacks and allowing arbitrary input to be entered within
161 is a major security hole. Yes, this needs to be cleaned up. Also, currently
162 engines cannot plug in their own commands and there is no GoGui interface.
164 Pachi supports only few GTP commands now. Most importantly, it does not
165 support the undo command. The final_status_list command requires engine
172 The UCT engine allows external plugins to be loaded and provide external
173 knowledge for various heuristics - currently just biasing the MCTS priors,
174 but more can be added easily. The plugins should follow the API in
175 <uct/plugin.h> - see that file for details.
181 Joseki patterns can be generated from variations of a SGF file. Josekis
182 are matched per-quadrant, no other move must be within the quadrant. See
183 joseki/README for details on usage of the auxiliary engine and a full
184 recipe for making Pachi play according to joseki sequences extracted from
191 The UCT engine can "pre-read" the starting board position and
192 dump the core of the built tree to a file, loading it later. This is
193 called a 'tbook' (as in "tree book") and can be generated using the
194 ./gentbook.sh script. The newly generated file is automatically used
195 by the UCT engine when found.
197 Alternatively, there is a support for directly used opening book
198 (so-called fbook, a.k.a. "forced book" or "fuseki book"). The book
199 is stored in a text file in Fuego-compatible format and can be loaded
200 using the ./zzgo -f parameter.