My understanding is that #2, 3, 4 and 9 should give noticeable improvement if implemented correctly, even with the most basic implementation.Henk wrote:In my chess program I tried out several "good ideas" that did not improve performance:
1) Mate distance pruning
2) Futility pruning in Quiescence search
3) LMR
4) Hash table ( This I have to try out again)
5) History heuristic (not killer moves)
6) lazy evaluation when normal evaluation is fast enough
7) alfa beta instead of pvs
8) MTD(f)
9) Aspiration windows
By your own definition, #6 isn't helpful when the normal (full) eval "is fast enough". Where you have a large and complex evaluation, you can save time via a well-designed lazy eval. An excellent introduction to the topic with an implementation example can be found here:
http://www.top-5000.nl/authors/rebel/chess840.htm
I'm a bit confused by your #7, as PVS is an enhancement to the basic AlphaBeta implementation.
#1 and 5 are debatable as to their merits and are probably rather engine-dependent on their benefit.
I am unable to comment on #8, as I've never tried it.
However, they are definitely all "good ideas", despite your assertion that they are not simply because you tried them without success.
jm