I don't quite follow. Here's my move ordering and an explanation of why this is:Martin Brown wrote:This seems like a good time to ask why there isn't some advantage to storing any killer move (including captures) and trying out the killer with a slightly more complex test for legality before move generation at that ply.bob wrote:Captures are not included because you _always_ try captures _before_ killers. By the time you are ready to try a killer move, the captures have been done.cms271828 wrote:Hi, I'm looking at killer moves again, and trying to figure out what I want to do.
To make it simple, suppose we just store 1 killer move, so this will be a non-capture that causes a cutoff (not sure why captures aren't included).
I presume that in general this approach must be slower and that sorted favourable captures are so effective in their own right as to be not worth storing. Although in the toy program I have written it seems to be faster when the killer is tried before full move generation. My move generator is old and slow, but it is terminal node evaluations that dominate runtime.
Thanks for any enlightenment.
(1) hash move (always). This move was proved best in a previous search, it should be tried first here. I do this without generating any moves at all.
(2) captures with SEE >= 0. I only generate captures here and try the ones that appear to not be bad.
(3) killer moves (2). I do this before generating any additional moves (I have already generated captures, I still have to generate non-captures).
(4) The rest of the moves. Here I have to generate the non-captures and search them in the order generated.
So back to the original question. Killers should not be captures, because we will try the good captures _before_ we try any killers at all. We would not want to search the same capture again (we should get an instant hash fail low if we did) which would simply waste that killer.