Panda 1.2 what's new?
This is the third significant release of Panda!
It constitutes some improvements to playing strength and a few other changes.
Playing Strength Improvements
Panda 1.2's improved playing strength comes from 3 main areas: move ordering, search selectivity and evaluation. Here are some of the more significant changes (that I can remember):
Move Ordering Changes
- implemented staged move generation
- history tables for continuations and followup moves
- exact SEE replacing MVV at high depths
- very simple TT replacement scheme
Search Selectivity Changes
- internal aspiration windows (aspiration window inside alpha-beta search for PV-nodes with an exact TT score)
- new approach to razoring: razor at higher depths but only when the opponent just captured
- change how qsearch handles positions in check + simplify qsearch futility pruning
- bugfix to LMR: avoiding repeating the same search twice if we didn't actually reduce
- bugfix to singularity double extension
Evaluation Changes
Panda 1.2 uses a larger, stronger neural network than Panda 1.1.
Panda 1.1's network had a HL size of 256, and was trained on about 140 million positions. The new network has a HL size of 384, and was trained on about 400 million new positions.
All the data which has been used to train Panda's networks has been generated using Panda's unique datagen method, in which Panda scores positions while playing games against itself and then re-evaluates these positions in hindsight based on what happened in the game.
Sadly, I haven't been able to test whether or not this approach to datagen gains any elo relative to the classical approach, because generating 400 million positions once takes long enough already.
Other Changes
There were several parts of code in Panda 1.1 which has been written when I was just starting learning Rust, and hence were very messy/unidiomatic. Though it's still far from perfect (and I'm still learning Rust), I'd say the code is quite a bit nicer now.
TUI
Inspired by other engines (Viridithas in particular), I created a TUI for Panda which it uses unless it receives the uci command. My dad wanted to try using the engine with a physical board (rather than a GUI like CuteChess), so I made the interface a bit nicer to look at:
Panda 1.2 - tests against other engines
Based on my own testing, Panda 1.2 should be significantly stronger than Panda 1.1.
Here are the results of some matches:
Match Against Stash 35 (currently rated 3304 in CCRL 40/15)
--------------------------------------------------
Results of Panda vs Stash-v35 (8+0.08, 1t, 16MB, 8moves_v3.pgn):
Elo: 2.71 +/- 16.86, nElo: 3.43 +/- 21.28
LOS: 62.39 %, DrawRatio: 33.20 %, PairsRatio: 1.00
Games: 1024, Wins: 317, Losses: 309, Draws: 398, Points: 516.0 (50.39 %)
Ptnml(0-2): [46, 125, 170, 117, 54], WL/DD Ratio: 1.18
--------------------------------------------------
Match Against Panda 1.1 (currently rated 3227 in CCRL 40/15)
--------------------------------------------------
Results of Panda vs Panda-1_1 (8+0.08, 1t, 16MB, 8moves_v3.pgn):
Elo: 141.03 +/- 36.77, nElo: 206.76 +/- 48.15
LOS: 100.00 %, DrawRatio: 32.00 %, PairsRatio: 7.50
Games: 200, Wins: 91, Losses: 14, Draws: 95, Points: 138.5 (69.25 %)
Ptnml(0-2): [0, 8, 32, 35, 25], WL/DD Ratio: 0.23
--------------------------------------------------
Based on these matches, I estimate the strength of Panda 1.2 should be a tiny bit above 3300 CCRL 40/15 rating.

Comments
Post a Comment