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.