Author: Robert Hyatt
Date: 19:28:53 07/12/03
Go up one level in this thread
On July 12, 2003 at 18:42:51, Rick Bischoff wrote:
>Hi all,
>
>First time poster, long time listener(reader) :-) Anyway, I am busy away
>implementing my chess engine and have a question about killer moves-- first some
>background:
>
>My move structure has a "score" field that is used to sort the moves in
>descending order after generation. This score is simply 0 for no captures,
>PieceValue(Captured) - PieceValue(MyOwnPiece) + PieceValue(QUEEN) +
>PieceValue(PROMOTION).
>
>Ok, so now I have an array somewhere called : int killerMoves[MAX_PLY][64*64]
>
>and my idea is this--
> A) After a "real" move is made, zero out the entire array
> B) During move generation, for each move M, if
>killerMoves[ply][M.from*64+M.to]>0, M.score = that value
> C) During the search...
>
>... if (val >= beta) { killerMoves[ply][currentMove.from * 64 + currentMove.to]
>= M.score + 1; return beta; }
>
>.... }
>.... killerMoves[ply][bestMove.from*64 + bestMove.to] = bestMove.score+1;
>.... return alpha;
>
>Is this the "proper" way to implement killer moves? Would it be better to set
>the score of the move to +INF after a cutoff? Is there a better structure I
>can use other than an int array?
>
>Thanks,
>Rick
Killers are actually easier to implement than that. When you get a fail
high, or back up a score > alpha (that means this is _not_ a fail low node,
store the best move if it is not a capture. If the best move is a capture,
you will search it before killers anyway so there is no reason to dislodge a
non-capturing killer with a killer that will have already been searched by
the time you get around to trying "killer moves".
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.