Since you’re here...

We hope you will consider supporting us today. We need your support to continue to exist, because good entries are more and more work time. Every reader contribution, however big or small, is so valuable. Support "Chess Engines Diary" even a small amount– and it only takes a minute. Thank you.
============================== My email: jotes@go2.pl



Panda 1.2 - new version chess engine


Panda - UCI chess engine
Author: Sebastiano Rebonato-Scott

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