Next: Influence, Previous: Tactical Reading, Up: Top
In the tactical reading code in reading.c, the code generating the moves which are tried are all hand coded in C, for efficiency. There is much to be said for another type of reading, in which the moves to be tried are generated from a pattern database.
GNU Go does three main types of pattern based reading. First, there is the OWL code (Optics with Limit Negotiation) which attempts to read out to a point where the code in engine/optics.c (see Eyes) can be used to evaluate it. Like the tactical reading code, a persistent cache is employed to maintain some of the owl data from move to move. This is an essential speedup without which GNU Go would play too slowly.
Secondly, there is the engine/combination.c which attempts to find combinations—situations where a series of threats eventually culminates in one that cannot be parried.
Finally there is the semeai module. A semeai is
a capturing race between two adjacent DEAD or CRITICAL
dragons of opposite colors. The principal function,
owl_analyze_semeai()
is contained in owl.c.
Due to the complex nature of semeais, the results of
this function are more frequently wrong than the usual
owl code.