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

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:

Move Ordering

  1. Move from hashtable
  2. 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