How Ntest Works
Ntest uses a lot of ideas from Michael Buro's othello papers;
in particular it uses MPC and part of its evaluation function is a sum of pattern coefficients,
where a "pattern" is the specific pattern of stones on a line of the board or in a corner region.
Eval
The evaluation function is made up of
- Pattern coefficients
- Potential mobility
- Mobility
- A constant to account for odd/even ply differential
Pattern coefficients
are as described by Mic Buro in his papers
Potential mobility
Ntest uses the "linear" method: for each line on the board, ntest counts the number of interior disc/empty square transitions.
These numbers are summed over the whole board, for each player.
Then evaluation coefficients for "player potential mobility" and "opponent potential mobility" are calculated via table-lookup;
therefore the evaluation is a nonlinear function of pot mob.
The potential mobility counts are packed into the same 32-bit value as the pattern coefficients so the pot mob calculation
takes no time except for unpacking and table lookup.
Mobility
Ntest uses a bitboard representation of the board so it can efficiently calculate mobility for each player.
Again evaluation coefficients for "player mobility" and "opponent mobility" are calculated via table lookup, allowing
for nonlinear functions of mobility.
Constant
To damp even/odd ply bounce in the evaluation function a small constant is applied, roughly 0.55 disc near the end of the game and 0.25 disc in midgame.
This bounce is predicted by theory for imperfect evaluation functions; I believe ntest's bounce is smaller than that of most other top programs.
Book
The book stores three types of value:
- Seeking draws or wins value
- Seeking wins, avoiding draws value
- Best guess of the game outcome
Move Ordering
- Move from hashtable
- do a 1-ply search, and sort by midgame eval + constant * opponent's mobility
Any cutoff is put into the hashtable for the next iteration, so normally the hash-table move is the "fastest" move
that is likely to cutoff
chris.welty@btinternet.com