a lot of changes in this batch, but not all of them were for strength.
here’s a quick runthrough of the elo-affecting changes:
- add improving heuristic to rfp (prune more nodes while improving)
- add staticEval >= beta guard to nmp (restrict the usage of null move pruning to moves that already seem good from static eval)
- futility pruning (very similar to reverse futility pruning - removes quiet moves when static eval is pretty far below alpha)
- tempo bonus (side to move gets a bonus to eval for having tempo)
- add quiescence search results to transposition table (i had this in the old version but i guess i forgot to port it over until now)
- soft time bounds in search (instead of searching for as long as possible and nuking the search thread mid-search, stop iterative deepening if it looks like the next node will take too long)
to fix this, i moved the timing-out logic inside the search function, which is what most engines do. I didn’t do this earlier because 1. it’s marginally harder and 2. it would require making the search functions IO instead of ST. ST is escapable, so it’s more pure, so this was kinda a bummer to do, but i didn’t see any way to get around this.
here’s a graph i made while i was looking at aspiration windows more. it shows the average centipawn change between successive depths of search. the current aspiration window implementation assumes that depth and avg cp change is inversely related, but it doesn’t look like this is true. (what is the hump doing??) I tried a couple of aspiration window implementations that don’t make this assumption but didn’t get anything huge. I’ll probably replace it at some point.
Comments 0
No comments yet. Be the first!
Sign in to join the conversation.