Skip to content

Releases: lynx-chess/Lynx

v1.5.1

21 Jun 09:39
Compare
Choose a tag to compare
  • πŸ› Threefold repetition bugfix: Revert "Detect threefold repetition on pvNode (#796)" (#818)

Full Changelog: v1.5.0...v1.5.1

v1.5.0

09 Jun 00:16
Compare
Choose a tag to compare
  • πŸ” Add Futility pruning (FP) (#733)
  • πŸ” LMR: allow when in check (#702)
  • πŸ” LMR: reduce more if there's a TT move and a capture (#706)
  • πŸ” Move RFP before NMP (#732)
  • πŸ” SPSA search parameters tuning (#730, #764)
  • βš–οΈ Remove double pawns penalty [proper SPRT pawn eval] (#746)
  • βš–οΈ Index bishop mobility bonus by attacks count (#758)
  • βš–οΈ Index rook mobility bonus by attacks count exluding own pieces (#768)
  • βš–οΈ Add knight mobility bonus and index it by attacks count excluding own pieces (#775)
  • βš–οΈ Take only pawns into account for king shield (#789)
  • βš–οΈ Add king virtual mobility indexed by mobility count (#785)
  • βš–οΈ Use some Stoofvlees quiet data for eval tuning (#710)
  • ⚑ Improve search logic (#725)
  • ⚑ Use optimized method to check if a move was valid (#716)
  • ⚑ Use a StringBuilder to generate UCI info command (#805)
  • ⚑ Remove option to disable TT (#720)
  • ⚑ Remove manual piece count during static eval (#698)
  • ⚑ Simplify TaperedEvaluationTermByRank (#757)
  • ⚑ Simplify TaperedEvaluationTermByCount (#767)
  • ⚑ Simplify Aspiration windows (#802)
  • πŸ› Fix index out of range exception on max depth (#708)
  • πŸ› Detect threefold repetition on pvNode (#796)
  • πŸ› Fix Game.MakeMove behavior on invalid moves (#804)

Non strength-winning changes:

  • Add ponder support (#772)
  • Generate UCI options for search parameters dynamically (#734)
  • Normalize mobility values (#788)

Full Changelog: v1.4.0...v1.5.0

v1.4.0

21 Mar 11:38
Compare
Choose a tag to compare
  • πŸ” Improve RFP (#652)
  • πŸ” Avoid doing TT cutoffs on PV nodes (#653)
  • πŸ” Use TT score as positional eval for pruning (#692)
  • βš– Tweak pawnless endgames evaluation (#693)
  • βŒ› Tweak time management (#664, #665, #667, #668, #671, #677, #691)
  • ⚑ Stop checking for two/threefold repetition and 50 moves draws in QSearch (#673)
  • ⚑ Refactor Update50movesRule() method (#678)
  • ⚑ Reimplement repetition detection (#679)
  • ⚑ Prefetch TT entry in NegaMax search (#681)
  • ⚑ Remove Position.StaticEval() heap allocations (#683)
  • ⚑ Force GC collection at the end of Engine constructor and after ucinewgame (#685)
  • ⚑ Use packed evaluation (#697)
  • πŸ› Clear history on newgame (#649)
  • πŸ› Fix long input position commands parsing (#650)
  • πŸ› Fix engine stall when depth over 100 is reached during search (#651)
  • πŸ› Don't search with fixed depth when cutechess provides 0s to move (#654)
  • πŸ› Prevent illegal moves when low in time (#657)
  • πŸ› Error when searching at max depth (#670)

Non strength-winning changes:

  • Add fen UCI command (#688
  • Increase max TT size from 1GB to 8GB (#669)
  • πŸ› Fix behavior of consecutive go commands (#655)

Full Changelog: v1.3.0...v1.4.0

v1.3.0

04 Feb 22:17
Compare
Choose a tag to compare
  • πŸ” Add basic (quiet) history malus/penalty (#610)
  • πŸ” Add capture history (#634)
  • πŸ” Update (quiet) history moves only in beta cutoffs (#608)
  • πŸ” Stop clearing quiet history (#637)
  • πŸ” Take quiet history into consideration for LMR (#613)
  • ⚑ Refactor move encoding methods and stop encoding special move flags individually (#622)
  • ⚑ Store captured pieces as part of the move (#604)
  • ⚑ Use jagged arrays ([][]) instead of multidimensional ones ([,]) (#605, #606, #607)
  • ⚑ Simplify triple repetition detection logic, removing some branching (#623)
  • ⚑ Make Piece an integer enum (#603)

Full Changelog: v1.2.0...v1.3.0

v1.2.0

11 Jan 14:52
Compare
Choose a tag to compare
  • πŸ” Prune SEE bad captures in QSearch (#558)
  • πŸ” Reduce SEE bad captures in regular search (#564, #571)
  • πŸ” Use spsa tuned search values (#543, #553)
  • βš–οΈ Add rook mobility to eval (#539)
  • 🧬 Improve move generation: hardcode castling moves and a few calculated variables (#541)
  • 🧬 Implement SEE and order bad captures after killers but before quiet moves (#554)
  • ⚑ Reduce TT entry size to 8 bytes (#544)
  • ⚑ Optimize go command parsing (#545)
  • ⚑ Split MoveGenerator.GenerateAllMoves and MoveGenerator.GenerateCaptures to avoid branching (#549)
  • ⚑ Set search thread as high priority (#546)
  • ⚑ SEE micro-optimizations (#566)
  • ⚑ Use stack-allocated span for movegen (#551, #596)
  • ⚑ Optimize PositionHash (#582)
  • ⚑ Optimize castling and en-passant moves Zobrist hashing (#577)
  • ⚑ Replace EnPassantCaptureSquares dictionary with equivalent array (#578)
  • ⚑ Optimize FEN parsing (#581)
  • ⚑ Attempt to initialize MoveGenerator and GoCommand asap (#576)
  • πŸ› Fix engine crash due to a negative calculated time to move (#555)
  • πŸ› Add support for negative wtime and btime (#556)
  • πŸ› Enable InvariantGlobalization and fix crash in some Linux scenarios (#575)

Non strength-winning changes:

  • Add option to run bench at different depths (#537)

Full Changelog: v1.1.0...v1.2.0

v1.1.0

14 Dec 00:49
Compare
Choose a tag to compare
  • πŸ” Add Internal Iterative Reduction (IIR) (#507)
  • πŸ” Add basic LMP (#512)
  • πŸ” Improve TT replacement scheme: add required conditions for always replace (#526)
  • πŸ” Add third killer move (#517, #525)
  • πŸ” Use new history bonus formula based on Sirius and Berserk one (#527)
  • πŸ” In case of 'fake' ponder-hit, research from depth 1 (#467)
  • βš– Re-tune eval using some Stash data (#515)
  • ⚑ Avoid PEXT array initialization when PEXT isn't supported (#516)

Full Changelog: v1.0.1...v1.1.0

v1.0.1

20 Nov 09:48
Compare
Choose a tag to compare

Non strength-winning changes:

  • πŸ› Clamp static evaluation within +- checkmate limits, preventing illegal moves (and erratic behavior in general) in positions with too much material on one side (#510).

    We're talking about positions here such as QQQQQQQQ/QQQQQQQQ/QQQQQQQQ/QQQQQQQQ/QQQQQQQQ/QQQQQQQQ/QPPPPPPP/K6k b - - 0 1, which will never happen in a real game but can be artificially set up (i.e. in lichess), so no strength change is expected in regular engine games.


Full Changelog: v1.0.0...v1.0.1

v1.0.0

16 Nov 12:16
Compare
Choose a tag to compare

Getting out from ZeroVer club now that these two conditions are met:

  • Lynx has basically reached feature-parity with BBC, engine outcome of BitBoard Chess Engine in C YouTube playlist that helped me the most during the initial phases of Lynx development.
  • .NET 8 GA has been released and therefore Lynx no longer relies on pre-release SDK or library versions.

  • πŸ” Rewrite NMP (#479, #482, #492, #493, #494)
  • πŸ” In case of 'ponder-hit', research last depth (#466)
  • πŸ” Don't clear TT move if no best move is provided: keep old one II (#478)
  • βš– Use PSQTs tuned without explicit piece values (#425)
  • ⚑ Incremental move sorting (#477)
  • ⚑ Avoid checking lack of material in static evaluation when the phase is high enough (#490)

Full Changelog: v0.19.0...v1.0.0

v0.19.0

27 Oct 09:22
Compare
Choose a tag to compare
  • πŸ” Tune LMR reduction (#452)
  • πŸ” PVS-LMR logic improvement (#456)
  • πŸ” Implement TT in quiescence search (#308)
  • πŸ” Don't clear TT move if no best move is provided: keep old one (#462)
  • βŒ› Check _searchCancellationTokenSource in qsearch as well (#454)
  • πŸ› Avoid storing the same move duplicated in both killer moves (#458)
  • πŸ› Ensure no search depth 0 happens after a 'ponder hit' (#465)

Non-strength winning chnages:

  • πŸ› Fix ucinewgame command when followed by go command (#455)

Full Changelog: v0.18.0...v0.19.0

v0.18.0

21 Oct 17:00
Compare
Choose a tag to compare
  • βš– Tune PSQT (#414, #415, #417)
  • πŸ” Add razoring (#429)
  • πŸ” Add soft cap history moves score (#442)
  • πŸ” Revisit and improve Aspiration Windows (#437)
  • ⚑ Implement PEXT bitboards for bishop and rook attacks (#451)
  • πŸ› Fix evaluation when checkmate is delivered at the same time 50 moves rule apply (#453)
  • πŸ› Fix move ordering at high depths/LTC (#448, indirectly #442)
  • πŸ› Avoid re-searches in IDDFS (#439)

Non-strength winning changes:

  • βš– Normalize eval and add UCI_ShowWDL option (#421, #422)
  • 🧹 Remove UseOnlineTablebaseInSearch from UCI (#441)

Full Changelog: v0.17.0...v0.18.0