Board: Optimize foreach_neighbor
[pachi/peepo.git] / README
blob2b310b9ccc54efbf38e0cbd51e96ada83ecdf57b
1 ZZGo is a simple modular framework for robots playing the game of
2 Go/Weiqi/Baduk. The aim is to make it easy to plug your engine
3 to the common infrastructure and implement your ideas while
4 minimalizing the overhead of implementing the GTP, board tools, etc.
5 The infrastructure is optimized for maximal speed, to make it well
6 suited for bruteforce engines.
8 ZZGo is under the MIT licence (close to public domain) so that as
9 many people as possible can use it. Some of the bundled engines
10 might be under a more restrictive licence (GPL).
12 Some optimizations are inspired by libEGo by Lukasz Lew. The code
13 is all original, though.
16 Currently, ZZGo supports a simple idiotbot-like engine and an example
17 MonteCarlo-player with bits of optional domain-specific knowledge
18 (dealing with ataris; see montecarlo/montecarlo.c for details).
19 The infrastructure is pretty fast and it should be quite easy to extend
20 it to provide more facilities for your engine (but it should be at
21 the same time kept as simple as possible).
23 ZZGo uses New Zealand scoring, currently. That means, it simply counts
24 the number of stones of each color on the board, plus komi. Additional
25 hack is that it does not count groups in atari, if the opponent neglected
26 to remove them; it is still one-point off there, though. In addition,
27 ZZGo cannot count multi-point eyes.
29 New Zealand rules also mean that multi-stone suicide is allowed! If you
30 do not like that (basically if you want to pretend it plays according
31 to Chinese rules), you need to rule that out in your engine, currently.
33 New Zealand rules have positional superko. Unfortunately, it is not quite
34 possible to prevent superko plays easily and keep the board_play() function
35 fast, since we need a way to undo our move. Thus, the default playout
36 guards only against basic ko. You can _check_ against superko quickly in
37 your engine and decide based on that (e.g. restart the playout).
40 Also, ZZGo supports only few GTP commands now. Most importantly,
41 it does not support the known_command and final_status_list commands.
44 To build zzgo, simply type:
46         make
48 Built zzgo binary in the current directory is a GTP client; use your
49 favorite Go client to connect to it (generally it should be possible
50 to use it in place of GNU Go), or use kgsGtp to connect to KGS.
51 The zzgo binary can take some parameters.
53 To build better optimized binary, type:
55         make zzgo-profiled
57 This will also create binary zzgo, but while the build will take
58 more time (probably less than a minute anyway), the resulting binary
59 will be about 1/4 to 1/5 faster.