Skip to content

ericlangedijk/chessnix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

chessnix


logo


I decided I don't understand anything of chess programming.

Chessnix is a UCI chess engine.

  • Needs Zig 0.15.2 to compile.
  • chessnix is a windows 64 bits exe for modern computers.
  • chessnix_bot can be played against on lichess.org.

Version 1.4 Work in Progress...

  • Working on it, not pretending to understand anything. Waiting for Zig 0.16.
  • Stronger: I hope.
  • Changed: Alpha Raises Reduction LMR (instead of depth reduction) after score > alpha.
  • Changed: Only update pv when pv-node. Removed update pv in qsearch.
  • Changed: Time management.
  • Changed: TT structure and entry replacement strategy.
  • Changed: Prefetch TT for a slight speed boost.
  • Changed: Some minor optimizations.
  • Removed: Reward / punish moves in qsearch.
  • Bug solved: Another terrible one: qsearch comparing a zero score with TT score instead of the eval.
  • Bug solved: Parsing negative time.

Version 1.3

  • Stronger: ~3168 ELO on CCRL.
  • Added: Slight center bias in quiet move ordering for shallow depths (experimental).
  • Added: Search history pruning, history reduction.
  • Added: Store raw static evaluation in TT.
  • Added: Slight capture history bonus and malus in quiescence search.
  • Removed: Killer moves.
  • Removed: Maintaining pins of both sides. I will not code a 'perfect' SEE in the near future.
  • Removed: Unused see_score function.
  • Changed: Lots of tweaks in the search algorithm (history pruning + reduction, different LMR table).
  • Changed: Correction history.
  • Changed: History structure and calculations, especially continuation history.
  • Changed: Rescaled history values.
  • Changed: Moved 'ply' from position to search.
  • Changed: Included a slight score correction during search using rule50.
  • Changed: Bound logic when storing to TT. I think it is correct now.
  • Changed: Move generation creates ExtMoves (64 bits) instead of the raw moves (16 bits), avoiding copying stuff.
  • Bug solved: Terrible LMR table accessing out of bounds value resulting in god knows what.
  • Bug solved: Node clearing (before enter search and on making nullmoves).
  • Bug solved: Corrected 'id name' uci output.

Version 1.2

  • Stronger: ~3015 ELO on CCRL.
  • Added: Chess960 support.
  • Added: Staged movepicking.
  • Added: Razoring.
  • Added: Continuation History.
  • Added: Correction History.
  • Added: Internal Iterative Reduction.
  • Added: CutNode reduction.
  • Added: SEE pruning.
  • Changed: Transposition Table with 2 entries per bucket.
  • Changed: Aspiration Window strategy.
  • Changed: Late Move Pruning. Using an improvement rate + depth formula.
  • Changed: Late Move Reduction. Using a precomputed table now.
  • Changed: Quiescence search. Does not store bestmove anymore.
  • Changed: Node counting. Only incremented after doing a move.
  • Changed: Finetuned search in general.
  • Move generation refactor.
  • Position always storing pins for both sides. For future perfect SEE.
  • Bug solved: Invalid principal variation output.
  • Bug solved: Bishop pair evaluation bug. The mask for white / black squares was wrong.
  • Bug solved: A terrible 'get all attacks' bug affecting evaluation, SEE and move ordering.

Version 1.1

Does not exist. This was a local bugfix for pv output.

Version 1.0

Engine plays reasonable chess. Entered CCRL with 2842 ELO. Many many things need still to be changed, but it is time for a first version.

Version 0.1

Engine plays terrible chess, mainly because I am not interested at all in writing an evaluation function. To be continued...

Versioning

  • Major number changes when the evaluation function changes.
  • Minor number changes for improvements and bugfixes.

Planning

  • Version 1.x 3200+ ELO.
  • Version 2.x 3400+ ELO (extended evaluation tuning).
  • Version 3.x 3600+ ELO (use neural network training).

Some terminal command examples

  • setoption name UCI_Chess960 value true -> enables chess960.
  • position startpos moves e2e4 e7e5. (moves" is optional) -> sets the startposition, does the moves.
  • position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4. (moves is optional) -> sets the fen, does the moves.
  • eval -> give the static evaluation of the position.
  • go depth 7 -> search position to depth 7.
  • go movetime 5000 -> search position for 5000 milliseconds.
  • perft 5 -> performs a perft test with subtotals per move.
  • qperft 5 -> performs a perft without subtotals per move.
  • bench -> performs perft speedtests on 4 positions.
  • d -> draw the current position and some info.
  • quit -> stop the program.
  • cls -> clear the terminal.

Thanks

Aron Petkovski. I used most of the tuned evaluation of an old version of Integral (3) to get me started (from chessnix 2.0 onwards I will do my own tuning). Jonthan, Janez and Colin on Discord. The people of TalkChess, Zig Forum, CCRL. The authors of the engines I used for testing: Bbc, Cheese, Chessplusplus, Colossus, Cwtch, Infrared, Integral, Lambergar, Linx, Lishex, Mess, Monty, OpenCritter, PlentyChess, Pounce, Priessnitz, Seawall, Seredina, Shallow, Shallowguess, Simbelmine, Stash, Supernova, Teki, Yakka. Some extra thanks to these people who made their engine support chess960. I also learned a lot from the source code of all these engines. Chessnix contains, besides my own inventions, a wild mix of ideas from the chess programming wiki as well as several other chess engines (Alexandria, Cwtch, Lambergar, Integral, PlentyChess, Pawnocchio, Stockfish and probably others).

The name

I spent many years on Lemmix, the DOS Lemmings clone. So in my feeling the name had to end with "ix" as well. Later I found out a nix is a kind of water spirit. So then I added the queen water spirit logo.

Noob

I am a github noob and only use a main branch as a backup of the current state on my PC. With every release an extra zip of the source code at that moment is provided.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages