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



PZChessBot 4.0 - new version chess engine



PZChessBot is a basic negamax engine.
Author: Kevin Lu 

v.4.0 What's Changed

PZChessBot v4.0 is now here! Featuring a fully self-trained NNUE, bootstrapped from a random network.

The network file is provided in case you want it, but is not necessary to run the program. It will work as a standalone executable.

+158 +/- 8 Elo to v3.0 @ STC (8 + 0.08)
+134 +/- 12 Elo to v3.0 @ LTC (60 + 0.6)

What's Changed
Use TT eval (when available) instead of static eval by @kevlu8 in #69
Change move selection to use a lazy method by @kevlu8 in #70
Add razoring by @kevlu8 in #71
Only probe tt once at beginning by @kevlu8 in #72
Only do NMP when static eval is high enough by @kevlu8 in #73
Add SPSA values by @kevlu8 in #74
Do not reset TT on position command by @kevlu8 in #75
Better ordering by @kevlu8 in #76
Add LMP by @kevlu8 in #77
Add Singular Extensions by @kevlu8 in #78
Use improving flag to lower RFP margin by @kevlu8 in #79
Add history pruning by @kevlu8 in #80
Add negative extensions by @kevlu8 in #81
Add QSearch futility pruning by @kevlu8 in #82
Reduce pv nodes less by @kevlu8 in #83
Reduce more if tentry is a capture by @kevlu8 in #84
fix killer move handling by @kevlu8 in #85
Add horizontal mirroring by @kevlu8 in #86
Add is_pseudolegal function by @wdotmathree in #87
Switch bucketing system by @kevlu8 in #88
skip low depth nodes with bad see by @kevlu8 in #89
Do not clear corrhist on search by @kevlu8 in #90
Add pretty output by @kevlu8 in #91
Raise the depth of the entire node when SE is done by @kevlu8 in #92
Only allow tt cutoffs in PV and fix TT handling by @kevlu8 in #103
Add MultiPV support by @kevlu8 in #104
Completely overhaul PVS system by @kevlu8 in #106
Change < to <= in razoring by @kevlu8 in #105
Do not do eval correction when ttEval is mate by @kevlu8 in #107
Return average of eval and beta in RFP by @kevlu8 in #110
Add TT to qsearch by @kevlu8 in #111
Use TT eval when available in QS by @kevlu8 in #112
Reduce cutnodes more by @kevlu8 in #113
Use a dynamic PVS SEE margin by @kevlu8 in #115
Adjust NMP R-value based on depth by @kevlu8 in #116
Allow razoring to depth 8 by @kevlu8 in #118
Add corrhist based on a non-pawn position hash by @wdotmathree in #119
Do shallower NMP when far exceeding beta by @kevlu8 in #120
Only do LMR at depth over 2 by @kevlu8 in #121
Don't do LMR on early moves by @kevlu8 in #122
Add captures only movegen for quiescence by @wdotmathree in #123
Use lazy move picking for QS by @kevlu8 in #124
Test adding finny-like tables by @kevlu8 in #125
Only store upper 32 bits of hash by @kevlu8 in #126
Simplify out reset logic by @kevlu8 in #127
Fail firm when failing high by @kevlu8 in #128
Change time management by @kevlu8 in #129
Add complexity time management by @kevlu8 in #130
Disallow NMP at low depth by @kevlu8 in #131
Test adding TT prefetching by @kevlu8 in #132
Do not do complexity TM for captures, promotions, and in check by @kevlu8 in #133
Reduce less on killer moves by @kevlu8 in #134
Do more reduction in LMR by @kevlu8 in #135
Do less LMR on rootnode by @kevlu8 in #137
Do not allow entering QS when TT move is available by @kevlu8 in #136
Do more NMP when improving by @kevlu8 in #138
Do not allow NMP in singular searches by @kevlu8 in #139
Improve makefile and add LTO by @kevlu8 in #140
Fix ucinewgame behavior by @kevlu8 in #141
Reduce history magnitudes for each search by @kevlu8 in #142
Add soft node time management by @kevlu8 in #143
Fix node counting by @kevlu8 in #144
Attempt to fix mate score handling by @kevlu8 in #145
Don't store new move in TT in allnodes by @kevlu8 in #146
Do not update corrhist on mates by @kevlu8 in #147
Only do IIR on PV and Cutnodes by @kevlu8 in #148
Raise SE margin by @kevlu8 in #149
Use ttDepth - 3 in SE by @kevlu8 in #150
Break out of moveloop directly by @kevlu8 in #151
Change history update formula by @kevlu8 in #152
Do more LMR in nonPV nodes by @kevlu8 in #153
Fix illegal move issue (disallow pruning when no best move) by @kevlu8 in #154
Add TTPV flag and do more LMR in TTPV nodes by @kevlu8 in #155
Add 1-ply conthist for move ordering only by @kevlu8 in #156
Clean up square control by @wdotmathree in #159
Use conthist for history pruning by @kevlu8 in #158
2-ply conthist by @kevlu8 in #157
Remove counter-move history by @kevlu8 in #160
Remove __search function by @kevlu8 in #162

PzChessBot 2.0 vs other engines:

Emerald 0.3.02/2+22 Partii
Ironfang 1.02/2+22 Partii
Fridolin 4.00 JA2/2+22 Partii
Freda 1.12/2+22 Partii
Libra-chess 1.0.12/2+22 Partii
Kraken 2025-06-161.5/2+12 Partii
Maelstrom 2.1.01.5/2+12 Partii
Lunar 0.2.11/2+02 Partii
Halogen 130.5/2-12 Partii
Zangdar 4.04 JA0.5/2-12 Partii
Celeris 1.00/2-22 Partii
Fire 100/2-22 Partii
Stormphrax 7.0.00/2-22 Partii
Zangdar 4.040/2-22 Partii
Aku 2025.6.12 JA0/2-22 Partii
PlentyChess 6.0.5 JA0/2-22 Partii
Fire 9.3 JA0/2-22 Partii



Successes of the PZChessBot engine in our tournaments:



Comments