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 email@example.com for assistance.
Stripe will verify your payment of $40 USD. Afterwards, you will receive an email from firstname.lastname@example.org or email@example.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 firstname.lastname@example.org 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.
This is the final planned release of Ethereal.
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 (, not ) 12.50: Tune the PSQT using a mix of FRC + Standard games
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
* 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.
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
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
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
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
10.01 * : Make the bench able to be run from the command line 10.02 : Increase King Safety in the mid game by 12% 10.03 : Remove some bad FENs from the perft test suite 10.04 * : Remove UCI bench command (only run from command line) 10.05 * : Merge piece.h and types.h (-30 lines of code) 10.06 : Rewrite the Late Move Reductions from scratch 10.07 : More aggressive Late Move Pruning, and simplified 10.08 : Use the same value for SEE Pruning in improving and non improving nodes 10.09 : Remove all trailing white space from the files 10.10 : Fix a compilation issue for debug builds caused by 10.05 10.11 : Cleanup and simplify applyMove() & revertMove() (-100 lines of code) 10.12 : Track Counter Moves for move ordering hueristics 10.13 : Fix an off-by-one issue with the fifty move rule (Seen in a TCEC game) 10.14 * : Correct two wrong FENs in the bench command's list of positions 10.15 : More aggressive LMP for non improving nodes 10.16 : Cap the evaluation difference's contribution to Null Move Pruning 10.17 : Simplify the Aspiration Window search (Torwards Stockfish style) 10.18 : Extend quiet moves coming from in check positions, when good 10.19 : Remove some check extensions that occured before the move loop 10.20 : Hand tune the values for Knight & Bishop outposts 10.21 : Hand tune King Safety contribution from safe checks 10.22 : Update the upper bound when failing low on an Aspiration search 10.23 : Implement Counter Move History, Pruning, and Sorting 10.24 : Swap Counter Move Pruning & Late Move Pruning for a 1% speed gain 10.25 : Apply all of our early pruning techniques to PvNodes (But not RootNodes) 10.26 : Reduce Counter Move History Pruning (CMHP) threshold to 0 10.27 : Cap History contribution to LMR by [-2, 2] 10.28 : Use fail-soft for Razoring, Beta Pruning, and Prob Cut Pruning 10.29 + : Remove the evaluation of the # of rammed pawns when we have Knights 10.30 : Swap the Stockfish's US/THEM naming convention for the Evaluation 10.31 : Evaluate threats by safe pawn pushes 10.32 : Use SEE() to place bad captures after quiet moves in sorting 10.33 : Use different CMHP threshold for improving nodes 10.34 : Remove the Estimated Usage heuristic from Time Managment 10.35 : Changes in an attempt to make Android build work 10.36 : Changed my mind about patch 10.35 and reverted 10.37 + : Evaluate threats on rooks by pawns and minor pieces 10.38 : Adjust some tuning code to match changes in patch 10.37 10.39 : Tweak the LMR formula part 1 10.40 : Tweak the LMR formula part 2 10.41 : Speedgain by using information from move sorting to reduce SEE() calls 10.42 : Only perform razoring at depth 1 10.43 : Simplify time managment: No time adjustments when the score jumps 10.44 : Remove thread dependence from the Aspiration Window values 10.45 + : Tuning by Laldon, a slight bugfix to Threat evaluation, and a KS tweak 10.46 : Evaluate Oppisite Coloured Bishop endgames with a simple scaling factor 10.47 : Cleanup some logic around the Pawn King Evaluation table 10.48 : Use "normal" piece values for SEE() and friends 10.49 : Bugfix-ish: Count Null Moves torwards the 50 move rule counter 10.50 : Speedup by delaying calls to SEE() from the Move Picker 10.51 : Even more aggressive Late Move Pruning 10.52 + : Tweak the definition of Unsupported/Weak pawns in Threat evaluation 10.53 : Remove an extra brace commited in 10.52 10.54 : Use the same definition as 10.52 to evaluate major threats on minors 10.55 : Remove an extra call to hashfull() when reporting TB hits at the root