lauriet wrote:The null move uses R=2 no matter what.
LMR (R=1) is based on the move ordering so it reduces moves that are < 0 based on PST.
Quiescence could be an issue.....I search ALL captures, good or bad. Can I improve this ??
Laurie.
Yes.
Search over ALL captures adds an extra overhead that you don't need. For example, you can discard losing captures in the quiescence search because you will surely stand pat in the next ply. Check that you are doing well the stand pat.
I suggest you to implement a SEE function and discard moves where SEE < 0
The one described in the wiki is pretty good. Rhetoric has this function adapted. You should see a speedup.
In my opinion, the starting point BEFORE introduce null move an lmr is to have a clean alpha - beta with a good quiescence search and a good move ordering.
Add a hash table at this point.
Compile some stats. You should see that 95% of the beta cutoffs are made by the first move, and that in average, 98% of the cutoffs are made within the 3 first moves searched.
Test it, as much as you can, and then, when you are pretty sure that everyting is ok, then adapt that alpha-beta to a PVS. You should see a small speedup.
Then, introduce null move and lmr. The gain must be huge.
I followed these steps when I made a rewrite of Rhetoric. I think is the most logical way to speedup your engine.
I forgot to ask if you have implemented and tested a perft function. Sometimes the basics fail and some branches can be searched more than once.
Hope it helps.