[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: computer-go: MF architecture
In item 2, why are you doing full board evaluations during the life/death
reading. I thought this phase would just return whether the group is
alive/dead/unsettled and suggest a move (if necessary) to accomplish the
result. Actually, I thought the full board evaluation was doing life/death
readings, not life/death readings doing full board evaluations. I thought
your life/death reader did a local narrow search to determine if the group
was killed or if it attained 5 "effective" liberties at which point the
search has become too big and is abandoned. Maybe my info is outdated, I
have been reading some pretty old posts (several years old).
-----Original Message-----
From: David Fotland [mailto:fotland@xxxxxxxxxxxxxxxxx]
Sent: Thursday, May 24, 2001 1:19 AM
To: computer-go@xxxxxxxxxxxxxxxxx
Subject: Re: computer-go: MF architecture
The architecture is pretty simple:
1) try a pass move and do a full board quiescence search. Record the best
move(s) for the opponent, which will be used
during full board quiescence search.
2) decide on strategy
- adjust running factors and aggressiveness based on handicap
- find game phase (opening, middle, endgame)
- estimate size of taking sente
- decide if ahead or behind
- do all of the life and death reading (with my own original
search algorithm), using up to about 100 full board evaluations
- assign bonus values for attack and defense of all groups
- these strategy values are used by the move generators
3) generate moves, with reasons, bonuses, and score estimates
- fuseki database - single move
- joseki database - sequence
- pattern database - sequence
- moves that work from life/death reading - single move
- various other move generators (for running, surrounding,
attacking, defending, filling dame, making big moves, junction points, etc)
4) sort the generated moves
5) until allocated time runs out (about 200 full board evaluations)
- try a generated move or sequence, followed by full board
quiescence search (using alpha-beta, depth first searching)
6) return the best move found (including the evaluated pass)
The full board quiescence search considers:
- local tactical responses
- local pattern responses
- tactical and pattern follow-ups to the second-last move
- global one move life/death/tactical moves
- global moves from the pass search
- taking sente at any time
It has variable depth, from 1 to about 7 ply. Some of the sequences in the
joseki database are 20 or 30 ply long, so
the full board search depth can be quite deep.
I've described the full board evaluation before. Basically, I evaluate the
strength of all groups statically, looking at eyes, connections,
relative liberty counts, running ability, etc, then evaluate the score,
using radiated influence, and adding bonuses for all reasons
that were satisfied.
String tactics are used as part of the full board evaluation for string
tactical stability and evaluating cutting points and control
of eye-diagonals. For each move made, the program examines about 50K to
300K tactical nodes.
The most complex and frequently changing code is the tactical move
generator and the static eye evaluator. Each is about
4000 lines of C. The code to incrementally change the low level board data
structures is moderately complex, but has been
stable for at least 10 years :) The total size of the engine is just under
50K lines of C.
David
Any other strong programs care to share their high level architecture?