Maverick 1.0 To Do List…
It’s been two months since I did any significant chess coding – life got in the way! I did tinker here and there but nothing special. However, Christmas is around the corner. I’m hoping to have some time to relax with a IPA beer and do some coding.
I thought it would be worthwhile spending some time to think about what I need to do to create version 1.0 of Maverick. I’ve said from the start, version 1.0 will have a playing strength of 2500 ELO (i.e. Grandmaster level) on the CCRL scale. So I’ll release Maverick 1.0 when I can beat all of the following opponents in a 100 game match at 5 mins per move:
- Tao 5.6 – I’ve admired Bas Hamstra’s engine for a long time – I hope one day he continues the development
- YACE – another classic
- Anmon 5.6
- Hermann 2.8 64 bit
I tested Maverick 0.51 at fast time controls. One minute per game was the slowest time control I used. In my test this gave Maverick a rating of about 2370 ELO. However, in the CCRL Division 6 tournament Maverick struggled. I thought it would be in the top half of the table. But it finished one off the bottom! I suspect this is due to the time controls. Maverick is quite a fast searcher but I intentionally haven’t put any real selectivity into the search apart from null move. This probably results in a higher branching factor than other engines with Late-Move-Reduction. At super fast time control Maverick may do well due to its raw speed, but its higher branching factor holds it back at the slower time control. When version 0.51 is tested by CCRL I suspect it will be 100 ELO lower than my tests i.e. about 2270 ELO. This mean I have a long way to go to reach 2500 ELO.
Before I set out my to-do list for version 1.0 it might be helpful to go over what Maverick already contains i.e. the current state-of-the-engine. Here’s a reasonably comprehensive list:
- Magic bitboard engine
- Move dictionary architecture
- Hash tables (4 slots structure)
- Killer Moves
- Evaluation function with the following terms:
- Middle-game to Endgame interpolation
- Piece square tables
- All basic endgames (e.g. B + N +K vs. K)
- Mobility
- Passed pawns (a major impact on strength)
- Basic pawn weaknesses (extremely rudimentary)
- Null Move (R = 3)
- Static-Exchange-Evaluation for move ordering and quiescent move pruning
- Checks in the first ply of of the quiescent search
- Extend on one-reply-to-check on the first ply of quiescent search
- Internal Iterative Deepening
- Enhanced Transposition cutoffs
- Opening book
- Pondering (really easy using the UCI protocol)
So I’d say Maverick isn’t too complex and doesn’t contain anything different.
Here’s the list of to-do’s for version 1.0:
- CLOP tuning
- Revisit some parameters for tuning:
- Piece-Square-Tables
- Mobility
- Passed pawns
- Add king safety
- Add potential passed pawn terms to the evaluation
- Add pawn storm code when castling on opposite sides
- Add bad exchange terms to the evaluation (and tune)
- Change the maximum depth measure to exclude the quiescent search (I think?)
- Use magic multipliers to calculate mobility and center control
- Improve knight placement and isolation code
- Add pawn and king endgame code (this could be a big strength gain)
- Add special endgame code for K + R vs. K + N (inspired by Thomas Pestzke)
- Tweak move ordering:
- Evade check move history
- Null Move capture-evade
- Multiple PV
- Support for Chess960
- Possibly MAC and Linux support (need to get a development environment up and running for both)
I’m hoping this list will be enough to push 2500 ELO – let’s see!
Have I missed anything?