lucasart wrote: Don wrote: Evert wrote:
There is no third killer. But that doesn't mean that should not be tried and what I do is not necessarily the best.
I found having a third killer slot to be slightly better in Jazz, but it's never going to be a huge win...
This is the least interesting usage of the refutation move anyway and if that was the only thing it was used for it would not be worth the implementation overhead and extra code complexity.
It's far more useful in pruning and LMR decisions, at least for Komodo.
Well if you also do not reduce the third killer... It gets used both to improve move ordering and to prevent LMR accidents. Besides, good move ordering and preventing LMR accidents is already partially redundant since LMR reduces more and more as moves are late.
There is definitely some redundancy here as you say. However it is a lot more complicated than that. Here is why:
In LMR we find it is over-kill to simply push a move to the top so that it doesn't get reduced. And when you do that you are also taking some high scoring history move and reducing it where it would not have been previously reduced.
Additionally we have proved to our satisfaction that not reducing these is overkill but reducing them less is the right thing to do. I think it has to do with the effectiveness of the history table for us, it is hard to beat the performance of that and the killers for move ordering decisions - and we have tried. It seems that the killers are still better than the refutation most of the time and at least for us the only good move ordering attempt is to put this in for killer B and even that is still in question. So for whatever reason it seems that in Komodo we have to treat the refutation move special but not special enough to make a major change to move ordering based on it.
This is nothing odd about that because we (and everyone else) does this with checks too. We do not reduce checks even if it's the last move in the move list, and yet if it's really that special why don't we sort it to the top? It's because such moves are generally no better than any other move and do not deserve high move ordering, yet they can have a big impact on the search.
As you probably know, a lot of this is black magic, it's really difficult to know exactly what is going to to work or reason out why it does or doesn't work.
Anyway, there are many variations of the idea to test, and it's very possible that what works best for Komodo is not what works best for Jazz, Stockfish or DiscoCheck. For now I'll try things one at a time:
- use it as a third killer for move ordering
- use it as an LMR veto
We use it LIMIT the reductions, a very similar idea but not quite the same.
- remove the 2nd killer and use the refutation move in its stead (for ordering and as LMR veto)
- try other variations like fsq/tsq instead of piece/tsq. perhaps even your piece/fsq/tsq.
Since the move is intended to be a refutation, I am pretty sure you need to be pretty specific about what it is you are refuting, and even then it's a generalization because a true refutation is based on a specific position. The hash table move is a specific refutation.
I think what happens is that usually the killer move is the right move assuming the hash table move doesn't do the job. But your opponent might make a move which makes the killer move inappropriate. For example if the killer is Nf3 and the opponent pushes a pawn to g4, you don't want to play Nf3. Instead you will record that there is a better answer to Pg4. If the opponent plays Bg4 however Nf3 is probably still a valid move.
But it should be tried - no harm done and it might turn out that you can get away with a little bit more generalization here.
We shall see
As you say, it can easily be different with different programs. In fact it would probably be quite odd if it wasn't because all sorts of things interact here.
Capital punishment would be more effective as a preventive measure if it were administered prior to the crime.