Facón 1.4 - Hoja, new version chess engine


Facón is a chess engine built from scratch in C++17, designed as a learning project and long-term development platform. The name comes from the facón — a traditional Argentine gaucho knife, forged by hand, raw and functional.
Each version carries a codename that follows the knife-making process: from rough rusty iron to a sharp, precise blade.
Author: Carlos M. Canavessi

Facón 1.4 - what's new?

+430 Elo over 1.3 (Ordo ~2330, gauntlet 1040 games at 2min+1sec). NPS: +53% (Linux), +92% (Windows).

Search

  • Check extension: when in check, extend search depth by 1. Check evasions are now resolved at full depth instead of dropping into quiescence. +30 Elo.
  • Static Exchange Evaluation (SEE): full exchange simulation with x-ray discovery. Losing captures pruned in quiescence search. Shortcut: skip SEE for captures where the victim is worth >= the attacker.
  • Reverse futility pruning: at depth 1-3, if the static evaluation already exceeds beta by a margin, prune the node without searching. Like NMP without the null search cost.
  • Move-level futility pruning: at depth 1-2, skip quiet moves when the static evaluation plus a margin is still below alpha.
  • Make/unmake legality: the per-move board copy in is_legal() (~700 bytes per pseudo-legal move) replaced with make, check, unmake. NPS: +130%.
  • Move scores computed once: parallel scoring array eliminates O(n^2) move_score() calls during selection sort. NPS: +9%.
  • LMR table precalculated: startup-initialized LMR_table[MAX_PLY][MAX_MOVES] replaces per-node log() calls.
  • Quiet queen promotions in qsearch: pawn pushing to the 8th rank without capturing is now visible to quiescence search.
  • Forced move instant-play: only one legal move = play immediately with zero search time.

Evaluation

  • Piece mobility: pseudo-legal squares per piece, excluding own pieces and enemy pawn attacks. Knight 4cp, bishop 5cp, rook 2cp, queen 1cp per square.
  • Open/semi-open files: rook bonuses for files with no pawns (+20cp) or no friendly pawns (+10cp).
  • Rook on 7th rank: +20cp bonus.
  • Bishop pair: +30cp when both bishops present.
  • Knight outposts: +20cp for knights on ranks 4-6 that cannot be attacked by enemy pawns.

Transposition Table

  • Depth-preferred replacement: shallow entries for different positions no longer evict deeper entries.
  • TTEntry::depth int8_t to uint8_t: fixes overflow at MAX_PLY (128).

Time Management

  • Base time budget increased (MOVES_TO_GO 30 to 25).
  • Progressive easy-move reduction (x0.95 per stable iteration, cumulative, cancellable).
  • AW fail-high time extension (proportional to fail-high count, capped at x1.50).
  • Time cap relaxed (remaining/3 to remaining*2/5).
  • Mate reduction only when winning (no longer triggers when being mated).
  • TM extensions now always run before checking soft_stop().
  • go depth X without clock no longer activates TM.
  • movestogo UCI parameter now parsed and used.

Infrastructure

  • bench command: 10 positions, depth 15 default. Quiet by default, bench verbose for full output.
  • FACON_DEBUG build mode: diagnostic counters compiled only with -DFACON_DEBUG=ON.


Comments

Popular posts from this blog

Reckless 0.9.0 - new version super strong chess engine

Reckless 0.10.0 - new version super strong chess engine