I don't know if it is best to generate captures in (small) stages instead of generating them all. For how big is the chance that a capture causes a cut off after hash move has been played. If that chance would be low then it would be better to generate all captures in one method call.
Typical numbers people report for cut moves in cut nodes are 80-90% cutoff by the first move (presumably hash), and 5-10% by the second move (presumably the MVV/LVA-wise best capture). So it does seem to happen reasonably often. I use 'staged' move generation in Spartacus, where it generates all captures on a particular victim-value group, and then searches those before generating for the next value group. Even with a stupid method for generating the captures of a given target I was surprised how competitive this was, nps-wise.
flok wrote:Today I made the moves-list-generator of my program 3.48% slower.
The code shrunk on the other hand shrunk:
2,28% lines
7,2% bytes
A good day for a software developer is a day where he removes code.
Then I might as well implement minimax and have stopped few years ago.
It is the speed requirement. Software that does not meet the requirements is not good.
flok wrote:Today I made the moves-list-generator of my program 3.48% slower.
The code shrunk on the other hand shrunk:
2,28% lines
7,2% bytes
A good day for a software developer is a day where he removes code.
Then I might as well implement minimax and have stopped few years ago.
It is the speed requirement. Software that does not meet the requirements is not good.
Speed must come in the first place from the algorithm, implementation at earliest on the second place.
Henk wrote:Skipper only has to be about million times faster (or doesn't ELO increase with 70 points for each factor two).
By fixing a bug a couple of bugs (e.g. not sorting en-passant moves correctly) I gained +/- 130 elo poins today. That is including that 3.4% slow down...