Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Killer and history

Author: Andrew Williams

Date: 01:57:43 06/24/98

Go up one level in this thread


On June 24, 1998 at 03:23:59, JW de Kort wrote:

>HI,
>
>thanks every one for the replies to my question. But i do still have
>a question on the killer moves. "What excectly is a killer", stated
>differently; where doe i put the killer code in my alpha-beta (pvs) and
>how do i decide that a move is a killer. From what i have read about this
>i conluded that the killer on e.g ply 2 is the most recent move to couse
>a beta cuttoff on the same ply in an earlier branch of the ree. Is this
>correct, and if so does good killers get trown away very early by using
>this approach?
>    And furthermore; some one -i appologise for not rembering his name-
>wrote that a killer move is placed first in the list of move generated. Is
>the killer move not supposed to be tried before generating the move list
>in order to be able to skip time consuming making of the move list?
>
>Any help -again- highly appriciated

Your description of what a Killer move is is accurate. What I do with my
killers is this:

BEFORE generating any moves, I check the killer moves (I keep 2 per ply) to
see whether they are valid in the current position (eg if the move is e1-d3,
I must ensure that the piece on e1 is capable of that move and that there
isn't a piece of the same colour on d3 - there are other checks to do as
well). If the move IS valid in the current position, I search it. If the
search causes a cutoff, I first call register_killer(ply, mv), which will
increase the killrate of the move by one. I return the score. If not I try
the same thing with the other killers until I've tried them all. I keep
track of the best killer and its score, because I'm not going to search the
killers a second time.

If I've tried all my killers at this ply and not got a cutoff, I go into
the main search. So I generate the moves and step through them, searching
each one exactly as before, EXCEPT that before searching it, I check to
see if it is in the list of killers for this ply. If it is, I already know
the result of the search (no cutoff) so there's no need to bother.

Suppose now during this normal search I get a cutoff. I then call
register_killer(ply, mv), which either increments the "killrate" of this
move or inserts it into the list of killers if it isn't already there.

This is the theory at least. In practice, somewhere in the above I have
introduced a show-stopping bug into my program, which I am currently trying
to expunge.

I'm not sure, but I think that people who talk about "putting the killers
at the front of the list of generated moves" are generating their moves
in stages, so they also are trying killers before generating the bulk of
their moves. But maybe I've misunderstood.

Andrew Williams



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.