Hi Matthew,cyberfish wrote:I am doing a partial rewrite of my engine, and have boiled it down to basic alpha-beta + Q, MVV/LVA, and transposition table (hash move also used). I am now thinking about adding things to it. I want to implement things that make a big difference in playing strength first. Here is the order I came up with -
SEE (try to not consider bad captures in qsearch)
killers
PVS (relies on good move ordering, hence after the first two)
Null move
LMR
IID
check extension
I have done all these before the rewrite, so I know how they work. I am just doing the rewrite because I was so fascinated by all those algorithms that I implemented all of them blindly without much testing, and with poor implementations, too. This time I am going to test carefully and do things slowly.
How does the order look?
Comments? Suggestions?
Thanks
I totally agree with this approach, and in fact I am considering to also start again from scratch, with emphasis on carefully checking each addition.
So far it has been my experience that the increase in playing strength is not necessarily related to the size of the new code.
A complicated new piece of evaluation code may show no measurable increase in playing strength, while a seemingly "trivial" cleanup of a few lines suddenly gives a nice jump in strength.
It makes you wonder how many of these subtle imperfections may still lurk in the program.
That's why I now think that simplicity of design and a systematic approach is important to make progress.
One idea is not always try to add new code to increase playing strength, but sometimes try to remove code without reducing playing strength.
Jan