Skip to main content

Since you’re here...

... we have a small favour to ask. More people, like you, are reading and supporting our blog: "Chess Engines Diary". And unlike many other sites and blogs, we made the choice to keep our articles open for all, regardless of where they live or what they can afford to pay.

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



New version chess engine for Android: Viridithas 8.1.0

 

Chess engine: Viridithas
Rating CEDR=3088

Features
General Search Techniques
Alpha-Beta
The central algorithm used to determine the values of positions (and by extension, which moves to make) is called alpha-beta pruning. It is a version of the minimax algorithm that maintains bounds on the score to prune parts of the search tree. Alpha-Beta prunes more of the tree when better moves are tried first, so it relies on good move ordering to search efficiently.

Principal Variation Search
As we hope that the first move tried is the best one (and it often is), all that must be done for the rest of the moves is to prove that they are worse than the first one. As such, every move after the first is searched with a "zero window" (i.e. beta is brought down to a single centipawn above alpha) in order to prove that it is not the best move. If a move proves to be better, a somewhat costly re-search must be done, but this improves search efficiency on average.

Iterative Deepening
In order to search within a limited time, successively deeper searches are done, instead of searching directly to a specified depth. This sounds like it would cause crippling time wastage, but lower-depth searches contribute to move-ordering for deeper searches, leading counterintuitively to a speedup in time-to-depth.

Aspiration Windows
When the iterative deepening search progresses from depth N to depth N + 1, the search is initially run with a small alpha-beta window around the value returned by the previous search. This provides the search with the ability to prune more aggressively in circumstances where the search is stable. If a window fails, the window is expanded exponentially in the direction of the failiure.

Transposition Table
Every position searched is hashed into a 64-bit unsigned integer value, or "zobrist hash", which is used to store information about the position in a flat, fixed-size hashtable. This allows information to preserved between searches, and also vastly improves move ordering as best moves from lower depths can be re-tried first.

Move Ordering Techniques
MVV/LVA
The Most-Valuable-Victim / Least-Valuable-Attacker heuristic is used to order heuristically winning captures before losing ones in the search, which greatly improves the efficiency of alpha-beta pruning.

Killer Moves
Moves that previously proved "so good as to be untenable" (caused a "beta-cutoff") are cached in a table. The search then attempts to use these moves first, as they are more likely to be good.

Counter Moves
Whenever a move causes a beta-cutoff, it is remembered as a counter-move to the move that was played immediately before it. These counter-moves are tried after the killer moves.

History Heuristic
Every time a move of a piece to a square results in a beta-cutoff, the score of that pairing of (piece, square) is increased in a table. This allows the search to generalise across subtrees to further improve move ordering. Additionally, if a move that was not the first move causes a beta-cutoff, the moves that were tried before it have their history scores decreased.

TT-moves
Best moves previously found in the search are cached in the hashtable. When a position is re-searched, the TT-move is tried before all other moves, as it is extremely likely to be the best move.

Subtree Size At Root
At the root of the search, the moves are ordered by the number of nodes required to search them in the previous iteration of Iterative Deepening, descending.

Search Reduction and Extension Techniques
Null-Move Pruning
The null-move heuristic uses the concept of "giving a side two moves in a row" to prune certain lines of search. If giving the opponent two moves in a row is not sufficient for them to beat beta, then we prune the search tree as our advantage is large enough not to bother searching.

Futility Pruning
Nodes close to the leaves of the search tree are pruned if they have a very low static evaluation score, assuming that only a few moves will not be enough to recover the position.

Reverse Futility Pruning / Beta Pruning
Nodes close to the leaves of the search that have a very high static evaluation score are pruned if the static evaluation beats beta by a depth-dependent margin.

Late Move Reductions
It is generally assumed during search that the first moves tried are the best ones. As such, the more moves that are tried in a position, the less fruitful a deep search is likely to be. To make use of this insight, moves tried later in a position will be searched to a reduced depth. As with PVS, a re-search must be done if a reduced depth search finds a better score, but this improves search efficiency on average.

Late Move Pruning
Essentially the same idea as LMR, but at low depth when enough moves have been tried, the rest of the moves are simply skipped.

Transposition Table Reductions
When a position that will be in the principal variation (the most important line of search) is entered, and no best-move is found from the transposition table, the depth is reduced by one ply. This is not done for any tactical reason, but instead because such a search is likely to take a lot of time to complete, so reducing depth is a time-saving measure to avoid search explosion. This is most likely to occur when deep search reveals that the low-depth PV was incorrect, so search must begin on a new PV that has less information saved in the hashtable for it.

Check Extensions
If a move is made that gives check, the depth to which that moves is searched is increased by one ply. (This may not be exactly one ply, as Viridithas makes use of fractional depth.) This often allows Viridithas to see checkmates that are several moves deeper than the nominal search depth.

Singular Extensions
If a move proves to be much better than all the alternatives in a position, the depth used to explore that move is increased by one.

Quiescence Search SEE Pruning
If a capture is found in the quiescence search that would beat beta even if the capturing piece was immediately lost for nothing, then qsearch terminates early with a beta-cutoff.

Main Search SEE Pruning
Each time a move is found in main-search, all captures possible on the to-square are tried, cheapest-piece-first, and if the exchange is losing, the move is pruned.

Evaluation Techniques
Tapered Evaluation
The evaluation function is phased between the opening and the endgame, to account for important differences in the values of certain terms between the two.

Piece Values
The values of the pieces broadly conform to the typical 1/3/3/5/9 scheme, but are adjusted to account for changes in relative piece value between the midgame and the endgame.

Piece-Square Tables
Lookup tables with heuristic values for piece locations allow the program to understand concepts like "knights are better in the centre" and "your rooks are strong on your opponent's second rank". This term is similarly phased.

Pawn Structure
Bonuses and maluses are applied for things like isolated, passed, and doubled pawns.

Bishop Pair
A small bonus is given if a side has a pair of bishops.

Mobility
The relative mobility of the pieces in a position can be an important factor in the evaluation. Piece mobilities are evaluated with differing weights and with some restrictions on their movement, like ruling that moves to squares that are controlled by enemy pawns are likely not useful.

King Safety
The number of attacks on the squares around the king are passed into a nonlinear formula that determines the value in centipawns of the king's safety or danger.

Threats
Attacks from pawns on pieces and from minors on majors are given a bonus in the evaluation.

Tempo
A small bonus is given for being the side-to-move in a position.

Texel Tuning
The weights of the evaluation function are tuned on Viridithas's own self-play games.

Evaluation Development History/Originality (HCE/NNUE)
First evaluation was a simple piece value / psqt table approach, using values from PeSTO. (as far as I remember)
Early in development, a local-search texel tuning module was developed, and trained on the Lichess Elite dataset, removing the PeSTO values with increased strength.
Many new evaluation terms were added during development, and were continually re-tuned on Viridithas's self-play games.
The first NNUE was trained on a dataset of games played by Viridithas 2.7.0, 2.6.0, and 2.5.0, all rescored with a development version of Viridithas 2.7.0 at low depth.
Subsequent networks were trained on additional self-play games by subsequent versions of Viridithas. The 13th-generation network, and many since, include positions from the Lichess Elite dataset rescored by Viridithas.
In summary, the originality of the data for training Viridithas's NNUE is strong - it is about ~60% games played by Viridithas against himself, 35% positions from human games, and something like ~5% games played in a Viridithas 2.7.0 vs. StockNemo 5.0.0.0 test match I ran on my own hardware. Most importantly, I have never trained on the evaluation output of any engine other than Viridithas.


Comments

Popular posts from this blog

New Strong Engines Test, by Chess Engines Diary, 2024.04.12

  💾  552 (!) games from the tournament download   👍 @chessenginesdiary  Country - Poland, City -  Malbork 🕓 Time 3'+3" 💻HP Pavilion i5-1035G1 8GB RAM 🖬 GUI-Banksia All  CEDR  317.321 games download  (01.04.2024 - 3'+3")  HypnoS 030424, Yuli GM Pro 16, Stockfish 16.1 and ShashChess 35 . These four engines scored the same number of points and placed at the top of the table in this strong tournament. Tech table: Engine KN/move NPS dep/mov time/mov mov/game time/game fails Alexandria 6.1.0 3218 576429 30.2 5.6 56.7 316.2 Berserk 13 4779 841025 36.7 5.7 56.0 318.1 Brainlearn 28 2275 366977 31.4 6.2 43.5 269.4 Caissa 1.18 5492 923486 30.2 5.9 50.4 299.7 Clover 6.1.19 4803 854377 31.4 5.6 62.2 349.4 Cool Iris 12.10 2201 356730 27.6 6.2 51.2 315.5 CorChess 20240331 2253 372774 27.4 6.0 52.2 315.8 Crystal 8 3582 571994 20.3 6.3 47.7 298.8 Fire 9.3 5225 876565 22.0 6.0 55.5 331.1 Fisherov chess monk 1.2 3487 619728 36.0 5.6 60.4 340.0 Hyp

New version chess engine: Raid 3.6 TacticaL RetreaT (Stockfish derivative)

Raid - is a Stockfish derivative . Rating CEDR=3743 Raid 3.2 - results: Polyfish 240114 7/14 +0 14 Games Hazard 4.21 DuaL 6.5/12 +1 12 Games Leptir 100124 6/12 +0 12 Games Arasan 24.1 7.5/10 +5 10 Games Uralochka 3.41 dev1 6/10 +2 10 Games Caissa 1.16 5.5/10 +1 10 Games SF-PRO 07.01.2024 5/10 +0 10 Games Stockfish 20240117 5/10 +0 10 Games Minic 3.41 7/8 +6 8 Games Pawn 3.0 6.5/8 +5 8 Games Texel 1.11 5.5/8 +3 8 Games RubiChess 20240112 5/8 +2 8 Games CorChess 20240103 4/8 +0 8 Games Counter 5.5 4.5/6 +3 6 Games Obsidian 10.0 3.5/6 +1 6 Games Fisherov chess monk 1.2 3/6 +0 6 Games Avalanche 2.1.0 3.5/4 +3 4 Games Starzix 4.0 2.5/4 +1 4 Games Cool Iris 11.80 2/4 +0 4 Games Blue Marlin 15.7 2/4 +0 4 Games AI 28.0 2/4 +0 4 Games

New chess engine: HypnoS 240324 (derived from Stockfish)

  HypnoS is a free and strong UCI chess engine derived from Stockfish  that analyzes chess positions and computes the optimal moves. HypnoS does not include a graphical user interface (GUI) that is required  to display a chessboard and to make it easy to input moves. These GUIs are  developed independently from HypnoS and are available online. HypnoS development is currently supported on the Openbench framework. OpenBench (created by Andrew Grant) is an open-source Sequential Probability Ratio Testing (SPRT) framework designed for self-play testing of engines. OpenBench makes use of distributed computing, allowing anyone to contribute CPU time to further the development of some of the world's most powerful engines. HypnoS 240324 download

Chess engine: Incognito 8.2 (experimental version of CorChess)

  Eduard Nemeth: "by Solista: This engine is identical in code to 8.01 but without Random Op. MultiPV mode. Some users only want to use normal MultiPV mode. Download Win 64-Bit (avx2, bmi2, sse41, source code).". Rating CEDR=3741 Incognito 5 PRO engine results SF CorChess 010124 25.5/50 +1 50 Games Predator AI 23/46 +0 46 Games Polyfish 240105 22.5/44 +1 44 Games Sawfish 2TC 21/42 +0 42 Games SF PB 070124 14.5/29 +0 29 Games Dragon 3.3 15.5/26 +5 26 Games Stockfish 20240108 12/24 +0 24 Games Deep Blue 20230628 12/24 +0 24 Games AbbyStein 2.8 12/24 +0 24 Games Berserk 12.1 11/20 +2 20 Games Cool Iris 11.80 10.5/20 +1 20 Games Ethereal 14.25 10.5/16 +5 16 Games Stockfish 20231231 8/16 +0 16 Games Raid 3.1 8/16 +0 16 Games SF-PRO 25.12.2023 8/16 +0 16 Games Killfish 071223 8/16 +0 16 Games Crystal 7 7/14 +0 14 Games TACTICAL 161223 6/12 +0 12 Games Fisherov chess monk 1.2 6/12 +0 12 Games Seer 2.8.0 6.5/10 +3 10 Games SF-PRO 07.01.2024 5/10 +0 10 Games Incognito 8.2 download

New version chess engine: Lc0 v.0.31.0-rc2

LcZero - CEDR Rating=3712 v0.31.0-rc2: In this version: Changed cuda compilation options to use -arch=native or -arch=all-major if no specific version is requested, with fallback for older cuda that don't support those options. Updated android builds to use openblas 0.3.27. A few small fixes. Individual statistics:  Lc0 BT4 Clover 6.1 5.5/8 +3 8 Games RofChade 3.1 4.5/8 +1 8 Games Dragon 3.3 4.5/8 +1 8 Games SF-PRO 19.11.2023 4/8 +0 8 Games YuliGM PrO 15 3.5/8 -1 8 Games ShashChess 34.5 3.5/8 -1 8 Games Sawfish 2TC 3.5/6 +1 6 Games Polyfish 231120 3.5/6 +1 6 Games Hazard 4.1 3/6 +0 6 Games Raid 3.1 3/6 +0 6 Games Eman 9.80 3/6 +0 6 Games Incognito 4 3/6 +0 6 Games Vanilla 14c 3/6 +0 6 Games Patzer AI X-256 2.5/6 -1 6 Games SugaR AI SE 2.5/5 +0 5 Games Altair 6.0.0 3.5/4 +3 4 Games Caissa 1.15 3/4 +2 4 Games Seer 2.8.0 2.5/4 +1 4 Games Fisherov chess monk 1.2 2.5/4 +1 4 Games Crystal 7 CMB 2.5/4 +1 4 Games Chess-System-Tal-2 2.5/4 +1 4 Games Lc0 v.0.31.0-rc2 (gpu-nvidia-cudnn) d