Skip to content

@AndyGrant AndyGrant released this Jun 4, 2021

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.

3 people reacted
Assets 8

@AndyGrant AndyGrant released this Sep 8, 2020

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
Assets 9

@AndyGrant AndyGrant released this Jun 14, 2020

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
Assets 7
  • V12.00
  • 37ccbfe
  • Compare
    Choose a tag to compare
    Search for a tag
  • V12.00
  • 37ccbfe
  • Compare
    Choose a tag to compare
    Search for a tag

@AndyGrant AndyGrant released this Feb 29, 2020

* 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.

Assets 7

@AndyGrant AndyGrant released this Nov 11, 2019

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
Assets 7

@AndyGrant AndyGrant released this Jun 28, 2019

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
Assets 7

@AndyGrant AndyGrant released this Jan 21, 2019

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
Assets 7

@AndyGrant AndyGrant released this Sep 6, 2018

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
Assets 7

@AndyGrant AndyGrant released this Jul 16, 2018

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
Assets 7