Releases: AndyGrant/Ethereal
Ethereal 14.00 (NNUE)
Please see: http://chess.grantnet.us/Ethereal/ for the non-technical side of things, and to obtain Ethereal NNUE
Anyone who has a previous version of Ethereal 13.00 (NNUE) or later, should have received an email from me by now containing a link to download the updated binaries and networks, as well as a comment about updates going forward. If you've not yet gotten yours from andrewgrantethereal@gmail.com, you should check your spam and then reach out to me.
Change Log:
14.00: Speedup Accumulator using Tiling (Thanks to Berserk's author Jay)
13.99: Once again enable Smart Syzygy filtering of root moves
13.98: Use one-fourth of set threads to clear the Transposition Table
13.97: Improve Syzygy by reducing look ahead reads on Linux (Thanks Aloril + SF)
13.96: Fix Syzygy issue for wide DTZ tables
13.95: Simplify LMR logic in Ethereal to match that of other engines
13.94: Fix Syzygy issues when probing very long endgames (DTZ > 1000)
13.93: Fix a long standing, non-functional bug when storing null values into the TT
13.92: New Fischer Network: Repeat process using 13.85 Network for Data Generation
13.91: Simplify the History component of LMR during Tactical moves
13.90: Improve speed to report TB Win/Loss significantly
13.89: Default to using Clang and PGO builds
13.88: Increase ProbCut Margin from 80cp to 100cp
13.87: Perform 4x maddubs operations per madd(ones, acc). Big speed up.
13.86: New Standard Network: Repeat process using 13.84 Network for Data Generation
13.85: New Fischer Network: Same data as 13.80 final, but 2x512 L1
13.84: New Standard Network: Same process, but with a 2x512 L1 instead of 2x384
13.83: New Standard Network: Same process, but with a 2x384 L1 instead of 2x256
13.82: New Standard Network: 100m games of nodes=40k, 40x LR drop instead of 10x LR drop
13.81: Accept lower-depth tt-entries if we expect a research may follow (big brain idea)
13.80: New Fishcher Network: 100m games of nodes=20k, first network in a while +85 elo
13.79: New Standard Network: 100m games of nodes=20k, 40x LR drop instead of 10x LR drop
13.78: New Standard Network: 100m games of nodes=5k, 40x LR drop instead of 10x LR drop
13.77: Update some of the internal NNUE data processing tools internally
13.76: Simplify singularity() to simply wrap search() and reuse the MovePicker
Regression tests vs Ethereal 13.75:
Standard Chess using a very drawish book:
ELO | 45.54 +- 1.58 (95%)
CONF | 60.0+0.60s Threads=1 Hash=64MB
GAMES | N: 40000 W: 7091 L: 1878 D: 31031
http://chess.grantnet.us/test/30795/
Fischer Random Chess using a very shallow book:
ELO | 101.30 +- 2.08 (95%)
CONF | 60.0+0.60s Threads=1 Hash=64MB
GAMES | N: 40000 W: 13562 L: 2219 D: 24219
http://chess.grantnet.us/test/30797/
Ethereal 13.00 (NNUE)
Please see: http://chess.grantnet.us/Ethereal/
Ethereal 13 has been released, with both a free (Standard) version and a commercial NNUE (Efficiently-Updated Neural Network) version. The free version is available on Github, and offers minor elo gains over the previous version, with increased functionality for analysis. Ethereal continues its legacy of stability and reliability for analysis and engine play.
Ethereal 13 (NNUE) includes two NNUE Networks for evaluation. These Networks are the second of their kind, boasting themselves as the only other high level NNUEs not derived from, trained on, nor duplicated from the works of the Stockfish team. With it, Ethereal adds new ideas and techniques to extend existing machine learning algorithms, and adds original practices into the implementation. These new approaches in software design allow for older processors to outperform NNUEs found in other engines, while still harnessing the full power of the AVX/AVX2 instruction sets for CPUs with support.
Additionally, Ethereal is the first engine to offer a secondary Network trained exclusively for Fischer Random Chess (FRC). This Network outperforms the standard Network by significant margins in FRC play, showcasing a creative style by Ethereal, not reliant on Opening Theory. These Neural Networks offer up to +120 elo over Ethereal 12.75 in self-play for Standard and Fischer Random Chess, the culmination of over 238,000,000 games played between various versions of Ethereal.
The Standard version will run on any 64-bit machine, with source provided for Linux users, and binaries provided for Windows users. The NNUE version requires a CPU with the SSSE3 instruction set (which almost all CPUs have), and will not run on systems lacking these instructions. AVX/AVX2 have become ubiquitous in modern processor design, and are necessary to capitalize on the full strength of Neural Network technology. If you are unsure if your system is supported, please reach out to me via email at andrew@grantnet.us for assistance.
Stripe will verify your payment of $40 USD. Afterwards, you will receive an email from andrew@grantnet.us or andrewgrantethereal@gmail.com within 24 hours containing a download link for the Standard/Fischer NNUE Networks, as well as the binary or executable files for Windows and Linux. You should select the binary matching your Operating System. Users with Intel CPUs containing BMI2 support (Also known as PEXT), should use the pext binary for optimal performance. AMD CPU users should use the popcnt binary, unless they have a 5XXX series Ryzen. AVX2 binaries will be the fastest, followed by AVX, and finally SSSE3. You should use the fastest your CPU allows.
If Stripe is not possible for you, PayPal is also an option. Using PayPal as a merchant account proved to be unworkable. However, you can send a payment of $40 USD to andrew@grantnet.us via the "Send & Request" button. This process is not yet automated, so I will have to build and send binaries by hand. If you are able to use Stripe, that is my preference. PayPal charges greater fees for foreign currency conversions, and I do not pass any fees on to the buyer.
The attached binaries below are the Standard version, and do not contain support for NNUE. They will be significantly weaker than the NNUE version described above.
Ethereal 12.75
This is the final planned release of Ethereal.
Ethereal 12.50
12.26: Tune all of the search margins using the skopt tuner
12.27: Penalize Queen's that may be prone to discovered attacks
12.28: Have QueenRelativePin only evaluate truely discovered attacks
12.29: Use knowledge of fail-highs/fail-lows to tweak LMR
12.30: Revert all of the changes from V12.29
12.31: Apply a slight non-functional speedup to Probcut
12.32: Fix a hanging pthread which used up resources over time
12.33: Add UCI option "AnalysisMode" to toggle TB behaviour
12.34: Replace Fathom with Pyrrhic, adding 7-man support
12.35: Kick up the version number due to Pyrrhic
12.36: Update to latest Pyrrhic and fix TB_LARGEST bugs
12.37: Tune all evaluation terms using a new dataset methodology
12.38: Tune and tweak King Safety interactions using a Standard book
12.39: Delete the old tuning code and upload the new AdaGrad tuner
12.40: Add an option to the tuner to print verbatim source code
12.41: Tune every term in the evaluation using a Standard book
12.42: Tune all of the "normal" terms using a larger Standard book
12.43: Increase max hash usage to 128GB
12.44: Redefine how we delta prune in the qsearch
12.45: Tune all of the "complexity" terms using a Standard book
12.46: Tune all of the "normal" terms using a FRC book
12.47: Reduce many of the pruning margins in the search
12.48: Add a 512KB Evaluation Cache to each Thread
12.49: Make the PSQTs Asymmetrical ([64], not [32])
12.50: Tune the PSQT using a mix of FRC + Standard games
Ethereal 12.25
12.01 Only partial evaluate stacked Passed Pawns
12.02 Always try to prove singularity if we have a candidate move
12.03 Increase LMR by 1 when extending to negate the impact
12.04 Save TB hits into the TT with the actual search depth
12.05 Only apply History Extensions on the PV to fix depth issues
12.06 Restore defaults for ContemptDrawPenalty and ContemptComplexity to 0
12.07 + Fix storing TB wins/losses into the TT ( Terje )
12.08 Fix an issue causing singular moves to be mistaken as MultiCut moves
12.09 Update the Tuning mechanism to have an output closer to what we want
12.10 Add ARMv7 and ARMv8 build targets to the makefile
12.11 Improve mate detection around aspiration windows and correct a ucicurrmove issue
12.12 Update the Killer Moves when we take a MultiCut
12.13 Tune the entire evaluation using a modified book and method
12.14 Add a command line utility to evaluate a file of positions to a given depth
12.15 Speedup move generation by ~6.5% in PERFT suite testing
12.16 Fix making use of the command line utility for tuning
12.17 Remove depth skipping schemes during SMP. Return to true LazySMP
12.18 Once again add a preliminary search before trying ProbCut
12.19 Use depth' = depth - LMR(depth, played) for continuation pruning
12.20 Implement support for "go searchmoves ..." per requests
12.21 Don't apply continuation pruning to our Killer Moves
12.22 * Disable history updates at depth 1 if the first quiet caused a cutoff ( Alayan )
12.23 * Disable history updates at depth 2 if the first quiet caused a cutoff ( Alayan )
12.24 * Disable history updates at depth 3 if the first quiet caused a cutoff ( Alayan )
12.25 Bug fix MultiPV, and in TB positions search as normal with a refined movelist
Ethereal 12.00
* 11.76 Score Knights/Rooks based on how open the position
is. Openness is a function of the number of open
files as well as the number of rammed pawns.
11.77 Moved Closedness to its own function for a speedup.
* 11.78 Penalize hanging pieces threatened by a King.
& 11.79 Implement Multi-Cut Pruning based on attempts to prove
a move to be Singular.
& 11.80 Remove the redundant attackersToSquare() function.
* 11.81 Simplify away the Razoring in the main search routine.
* 11.82 Add rough elo estimates for various search techniques.
* 11.83 Apply an extra penalty for Passers that are stacked.
11.84 Fix a small white/black mirroring issue in Passed Stack
Pawn evaluation introduced with patch 11.83.
* 11.85 Penalize mutually attacked squares that are poorly defended.
* 11.86 Tune the evaluation terms added in patch 11.85
* 11.87 Bonus for Bishops on an open, long, diagonal controlling
some of the central squares, a la Stockfish.
* 11.88 Penalize knights that are far from both of the Kings.
* 11.89 Increase the Static Exchange Evaluation Pruning depth to 9
* 11.90 Evaluate Backwards pawns by their ranks. Adjust the Pawn
piece-square table to account for this change.
* 11.91 Apply an early game bonus having sole control over central
squares. Taper off this bonus as the position simplifies.
+ 11.92 Prefetch Transposition Table entries as early as possible.
* 11.93 Introduce Draw Contempt and Complexity Contempt.
* 11.94 Scale down the eval for a lone queen versus multiple other
minors and or majors, when the queen is given the advantage.
11.95 Scale up lone minor/rook vs lone minor/rook when there is
a difference of three or more pawns between the players.
& 11.96 Resolve fail-highs with progressively shallower searches.
* 11.97 When evaluating King Safety, exclude attacks to squares that
are twice protected by our pawns. Idea from Vizvezdenec.
* 11.98 Move 'space' evaluation terms to their own function.
Add Alayan to the authors output. Fix tuner and UCI options.
+ 11.99 Advise the Kernal to use Transparent Huge Pages.
* 12.00 Add a small variation to drawn evaluations to avoid potential
blindness to 3-fold repetitions.
Patches denoted with an "*" are by Alayan, those with "&" are by Weiss
author Terje, and those with "+" are from Github User Skiminki.
Ethereal 11.75
11.51: Speedup moveIsSingular() with our knowledge about the TT move's legality
11.52: Encode Castle moves as KxR. Report UCI currmove and UCI currmovenumber
11.53: Skip some bad captures after skipping quiets during moveIsSingular()
11.54: Do not let a Queen attack through our Rooks/Bishops for Mobility scoring
11.55: Speedup and simplify the logic behind storeTTEntry()
11.56: Full engine Tuning session using an average of a static and dynamic eval
11.57: Do not consider a pawn to be Isolated if it may capture another pawn
11.58: Syzygy probing speedup and simplification
11.59: Evaluate Complexity to adjust eval based on conversion chances
11.60: Add Complexity terms to the Tuner and run a Tuning session
11.61: Allow Tuning terms to be considered Midgame or Endgame only
11.62: Evaluate Kings based on nearest file-wise Pawn
11.63: Run a Tuning session on the King Pawn File Proximity term
11.64: Remove the Passed Pawn contribution to the Complexity calculation
11.65: Evaluate Stacked/Doubled Pawns differently based on ability to unstack
11.66: Add a few options to the Tuner in relation to static vs dynamic eval
11.67: Fix a bug in the logic behind patch 11.65
11.68: Fix a newline printing issue in the PERFT suite between Python 2/3
11.69: Do not ever consider an Isolated Pawn to be Backwards
11.70: Halve the eval bonus (but not malus) for Outposts on the A/H files
11.71: Never consider a King and lone Knight/Bishop to be winning
11.72: Do not perform history updates on illegal or skipped quiet moves
11.73: Apply Futility Move Pruning to moves with good history scores in some cases
11.74: Add support for MultiPV analysis
11.75: Add MultiPV information to the README
Ethereal 11.50
11.26 : Tune the evaluation using an updated sigmoid. The mistake in my
calculation was pointed out by Tamas Kuzmics (Tomitank)
11.27 : Remove QS Futility Pruning, and merge it into SEE move picking
11.28 : Reset the Killer Moves for the children of a node, at each node
11.29 : Rewrite the internal way of saving History Scores (+Speedup)
11.30 : Move the selection of Killer and Counter moves to history.x
11.31 : Simplify Probcut Pruning by replacing the Verification with SEE
11.32 : Tweak the Razor, Futility, and SEE Pruning Margins
11.33 : Treat Root nodes like all others in regards to early pruning
11.34 : Cleanup and simplify Ethereal's search extensions
11.35 : Tweak the Late Move Pruning move counts
11.36 : Move the contents of castle.x into move.x (Preperation for FRC)
11.37 : Forgot to update the version number from V11.35 -> V11.36
11.38 : Limit the number of quiet moves tried when looking to disprove
a singularity. Thanks to Raoni Campos (Pirarucu) for the idea :)
11.39 : Small code cleanup for search.c (+Speedup)
11.40 : Increase Late Move Reductions when evading check with our King
11.41 : Fix an oversight from V11.39 causing Illegal PVs to be reported
11.42 : Cleanup of attacks.x & bitboards.x
11.43 : Cleanup of move.x & movegen.x
11.44 : Cleanup of masks.x & movepicker.x & zobrist.x
11.45 : Cleanup of history.x & syzygy.x & thread.x & time.x
11.46 : Add support for FRC / Chess960
11.47 : Redefine PassedSafePromotionPath to require an empty pathway
11.48 : Cleanup of psqt.x & texel.x & types.x & uci.x & windows.x
11.49 : Following a NULL move, skip evaluateBoard() (+Speedup)
11.50 : Cleanup of board.x evaluate.x search.x transposition.x
Ethereal 11.25
11.02 : Move King Area computation into a lookup table
11.03 : Penalty for minor threats against our minors
11.04 : Evaluate candidate passed pawns
11.05 : Evaluate candidate passed pawns by safety of square (Stockfish)
11.06 : Change to Laser's Depth Skipping scheme for threading
11.07 * : Consider a queen check to be safe even if attacked by opposing queen
11.08 : Extend moves in the search based on continuation history scores
11.09 + : Evaluate safe checks by number of checking squares
11.10 + : Evaluate distance from passer to kings based on rank
11.11 : Cleanup for 11.10 and add new terms to the Tuner
11.12 : Tune arrays for distance from passers to kings
11.13 * : Increase time even more when the PV move changes
11.14 : Cleanup all masks and lookup tables for a speed gain
11.15 : Tweak time constants to reduce large search times for X+Y TC
11.16 : Remove Internal Iterative Deepening, apply Singular Extensions aggressively
11.17 : Collapse pruning conditions into a single collection
11.18 : Fix potential crash for NUMA code (As per Stockfish changes)
11.19 : Cleanup makefile to remove no longer working Android build
11.20 : Simplify search by moving boiler plate code to its own function
11.21 : Collapse Aspiration Window logic into a single loop
11.22 : Probe the TT during qsearch for cutoffs and a saved evaluation
11.23 : Don't double probe the TT when going into qsearch
11.24 : Fix compiler error from 11.23
11.25 : Rewrite the Tuner and tune all linear evaluation terms
Ethereal 11.00
10.56 : Skip Null Move Pruning when the TT entry is poor
10.57 * : Remove OCB scaling for the Bishop + 2 Knights case
10.58 : Allocate even more time when the score drops between searches
10.59 : Tune BaseKingSafety, and KingSafetyNoQueen constants
10.60 : Reduce Counter Move Pruning for improving nodes
10.61 : Implement "Follow-up History" (SF calls it (ss-2)->contHist)
10.62 : Use Follow-up History for low depth pruning
10.63 : Cleanup Zobrist key implementations
10.64 : Slightly faster Zobrist for non-normal move functions
10.65 : Remove separate Zobrist table for Pawns & Kings
10.66 : Limit Futility Pruning based on History values
10.67 : Tune threat evaluations using NDEPTHS=5 tuning session
10.68 : No longer bound the return value from a TT cutoff
10.69 : Move time management code to a new file, time.c
10.70 : Do ProbCut when in check, use Depth 2 verification search
10.71 : Bonus for Minors in front of our own, or our enemies, pawns
10.72 : Move JChess, EtherealV1, EtherealV2, Ethereal0xFF, to legacy branch
10.73 : Tune PSQT and assorted bonuses for Knights and Bishops
10.74 : Evaluate distance between Passers and each King
10.75 + : Cleanup draw detect and fix a bug, suggested by Ratosh (Pirarucu)
10.76 : Bonus when a Passer has a safe promotion pathway
10.77 : One-time compute of King squares for evaluation function
10.78 : Do more Counter Move / Follow-up Move pruning for non improving nodes
10.79 : Extend ThreatByPawnPush to understand double moves and enpass threats
10.80 : Speedup the move picker, and use SEE(1) for qsearch moves
10.81 : Try at least one quiet move after hitting LMP or FMP conditions
10.82 * : Increase time usage for large score jumps (Hold onto possible wins)
10.83 * : Increase time usage for small score jumps (Hold onto possible wins)
10.84 + : Update chess programming wiki link by Captflint
10.85 + : Fix bug with history hashing for Null Moves, found by Aloril
10.86 : Begrudgingly implement pondering support for Ethereal
10.87 : Simplify time management updates when the PV changes
10.88 : Add NUMA support for Windows as per Stockfish as per Texel
10.89 : Cleanup the Tuner, simplify adding additional terms to the tuner
10.90 + : Tweak Magic Bitboard workings for better cache usage, inspired by Laser
10.91 : Evaluate Pawn storm threats to our King
10.92 : Remove OCB scaling for the Bishop + 2 Rooks case
10.93 : Tune the Pawn Storm threats array
10.94 : NUMA fix when running many copies of Ethereal at once, found by CoffeeOne
10.95 : Use a different SEE margin for quiet vs noisy moves in pruning
10.96 : Don't let a player try two Null moves in a row
10.97 * : Remove OCB scaling for the Bishop + <*> case
10.98 * : Tuning session using NDEPTHS=8
10.99 : Tuning session using NDEPTHS=10
11.00 : Small code cleanups in attacks.c and board.c