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

Luna Chess-Engine (LCE) 2.1.0 JA - new version chess engine


Luna Chess Engine
Luna is a high-performance chess engine written in Rust, designed for efficiency and strength. It combines classical bitboard-based move generation with a state-of-the-art NNUE (Efficiently Updatable Neural Network) evaluation, allowing for deep positional understand in.
Author: Spunc595

Luna Chess-Engine (LCE) 2.1.0 JA what's new?
Recent Changes Summary — Luna Chess Engine
Correctness fixes (real bugs found in played games):

Fixed mate score encoding: it used board.ply (absolute, grows for the entire game) instead of the ply relative to the search root — in long games, mate was no longer recognized as such once the game ply exceeded a threshold.
Added Mate Distance Pruning (required the fix above as a prerequisite).
Fixed the threefold repetition rule: it counted the current position as already "repeated" on the first occurrence instead of the second (count >= 1 → count >= 2).
Fixed a critical bug in the UCI go command parser: it didn't handle value-less flags (ponder, infinite); when ponder was present it misaligned the reading of wtime/btime/binc, causing the engine to fall back to a fixed 5s time budget instead of the real one — the suspected root cause of a loss on time forfeit from a completely winning position.
Disabled pondering in the Lichess wrapper (ponder: true → false): Luna doesn't implement stop/ponderhit, so pondering remained risky even with the parser fixed.
Removed a redundant post-search revalidation in main.rs that added uncronometered work right in the critical window before printing bestmove.
New search/evaluation features:

ucinewgame handling (clears the Transposition Table between games).
Time management aware of winc/binc with a safety margin.
Passed pawn bonus and "mop-up" bonus (guides the King toward conversion in won endgames), applied with both NNUE and classical PST.
Score decay in the absence of progress (counters infinite "shuffling" in largely won positions).
SEE (Static Exchange Evaluation): used for move ordering and for pruning in quiescence search.
Android/ARM64 porting (for the MCEC tournament):

Working cross-compilation to aarch64-linux-android (NDK + cargo-ndk), fixed the Cargo config that would have polluted the ARM build with x86-specific flags.
Added a NEON SIMD path for NNUE inference (previously ARM only ran the pure scalar fallback) — same scheme already used for AVX2/SSE2 on x86_64, with a dedicated correctness test.
NNUE:

Automatic training of the NNUE network was abandoned due to difficulties encountered; the engine still supports loading an NNUE network (falling back to classical PST evaluation if the file is missing/incompatible), but the network is no longer generated/updated via self-training.


If you appreciate our work, you can support us on PayPal.


Comments