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



New version chess engine: Lynx 1.7.0 (Windows, MacOS, Linux)



Lynx it's written in C# (.NET 6). UCI protocol is needed.
Chess Engines Diary Rating CEDR=2890

Lynx release artifacts are self-contained and require no dependencies to be run.
However, you can also choose to build Lynx yourself.
Requirements
NET 6 SDK. You can find instructions about how to install it in yo

v.1.7.0
🔍 Search
Regular search: fail hard -> fail soft (#1039, #1040, #1041)
QSearch: fail hard -> fail soft (#1052)
Fail soft TT cutoffs (#1044)
Remove pvNode condition for first move full search (#1045)
History pruning: quiet history (#972)
Improve queen promotion with capture move ordering (#1061)
Make TranspositionTableElement.Key an ushort instead of a short (#1070)
SPSA 2024-10-1 (#1074)

⚖️ Evaluation
Enemy king related PSQTs (#924)
Friendly and enemy king distance to passed pawn (#955)
Passed pawns: bonus for not enemy pieces ahead (#998, #1008)
Pawn phalanx (#1009, #1010)
Bishop penalty: same color pawns (#1022)
Bishop penalty: blocked central pawns (#1029)
Checks (#1027)
Mobility: exclude squares attacked by opponent's pawn (#958)
Add 50 moves rule scaling, down to 50% of the score (#965)
Improve endgame scaling with pawn count (#928)
Bucketed passed pawns (#945)
Index queen mobility bonus by attacks count excluding own pieces (#774)
Tuning: use some Ethereal FRC data (#916)
Tuning: tune at 5k epochs (50k epochs -> 10k epochs -> 5k) epochs (#1031)
⌛ Time management

Use expected moves to go (#996)
⚡ Speedups
Move Move serialization to Writer thread (#999)
Add a Board array to Position to track where pieces are indexed by square (#849)
Remove good old _isFollowingPV and _isScoringPV (#1034)
Make TaperedEvaluationTerm an integer I (#935)
Add PSQT class to store PackedPSQT (#939)
Flatten PSQTs [][][][] (#927)
Flatten capture history (#870)
Pin 1 dimension arrays (#953)
Pin attack-related arrays (#985)
Reverse killer moves arrays (#861)
Replace Chebyshev distance calculation with lookup table (double array) (#957)
Refactor additional evaluations: pass piece side (#963)
Speedup InfoCommand.SearchResultInfo (#984)
Make SearchResult.Moves an array and optimize its population (#986)
Refactor Game.PositionHashHistory into a private array (#991)
Remove Position.MakeMoveCalculatingCapturedPiece, using Position.Board instead (#1021)
Only update PV table on PV nodes (#1042)

🧠 Memory usage (!)
Remove unnecessary, initial TT initializations (#989)
Allocate TT only once, clearing it afterwards on ucinewgame (#990)
Avoid static readonly flat array initial allocations for inline arrays (#948)
Use ArrayPool to reduce recurrent allocations (#983)
Stop generating logs/log-∗.log files by default (#1004)
Cache Move.UCIString results in a Dictionary(#1001)
Optimize go command parsing (#1005)
Remove unused props from SearchResult and re-order the ones left (#1006)

🐛 Bug fixes
Don't prune moves in regular search while being checkmated (#1060)
Prevent negative checkmate scores from being lower than EvaluationConstants.MinEval (#1063)
Non-strength winning changes:

Relevant for testers:
By default log files are no longer generated under logs/ dir unless warnings or errors happen (#1004)
Lynx process' memory usage won't skyrocket to twice the expected (TT) value anymore, as it could briefly happen in the past, providing there was such memory available for it.
Simplify appsettings.json (#1075)
Relevant for developers that consume the NuGet package:

Lynx allocates way less than before when searching, which implies much lower GC pressure.
You have control now of UCI info and bestmove string allocations if you're using Searcher class to interact with the engine, since now the channel doesn't send the information pre-serialized (details below).
API changes:
Channel<string> -> Channel<object>, you're now expected to invoke .ToString() on whatever comes from the channel to print it. Alternatively, you can just consume it by checking object types (they are either strings, Lynx.Model.SearchResult or Lynx.UCI.Commands.Engine.BestMoveCommand) (#999)
Remove Position(Position, Move) constructors, now you're forced to use MakeMove/UnMakeMove methods (#976)
Remove parameterless Game constructor, a fen or a parsing result is always required now (tip: Constants.InitialPositionFEN can be used) (#980)
Make Position.UniqueIdentifier an ulong instead of a long (#1078)


Lynx 1.5.1 - Individual statistics
Odonata 0.9.01/10-810 Games
Beast 15 MPV1/8-68 Games
Caissa 1.190.5/8-78 Games
HypnoS 2206240/8-88 Games
Kookaburra 3.000/7-77 Games
Bread Engine 0.0.55/6+46 Games
Javelin 2.0.03/6+06 Games
Inanis 1.3.02/6-26 Games
Alexandria 7.0.00/6-66 Games
Stockfish 202406230/6-66 Games
Dodecahedron 0.0.1.2 JA4/4+44 Games
Heimdall 0.14/4+44 Games
Drosophila 1.6 JA4/4+44 Games
Sloth 1.94/4+44 Games
JigSaw 5.81/4-24 Games
Lambergar 0.6.01/4-24 Games
Deep Ripper -10.5/4-34 Games
Clover 6.20.5/4-34 Games
Mayhem 8.30.5/4-34 Games
Motor 0.6.00/4-44 Games
SF-PRO 14.06.20240/4-44 Games

---
Lynx 1.7.0 download 
github:https://github.com/lynx-chess/Lynx/releases/

Comments

Popular posts from this blog

New Strong Engines Test, by Chess Engines Diary, 2024.04.12

New chess opening book: M11.2 (bin and ctg)

New version chess engine: Lc0 BT4

Dragon NNUE by Komodo Chess - it's free!