|
1 | 1 | # Inanis |
2 | 2 | UCI chess engine written in Rust, the successor of [Proxima b](https://github.com/Tearth/Proxima-b), [Proxima b 2.0](https://github.com/Tearth/Proxima-b-2.0) and [Cosette](https://github.com/Tearth/Cosette). The project is written after hours, with the goal to reach a strength of 3000 Elo. Perfect as a sparring partner for other chess engines, since it was heavily tested using very fast games. Supports Syzygy tablebases, MultiPV, pondering and multithreading. |
3 | 3 |
|
4 | | -**Current strength**: 3000 Elo (01-11-2024) |
| 4 | +**Current strength**: 3100 Elo (01-02-2025) |
5 | 5 |
|
6 | 6 | **Documentation**: https://tearth.dev/Inanis/ |
7 | 7 |
|
8 | 8 | ## Releases |
9 | 9 | | Version | Release date | Elo | Main changes | |
10 | 10 | |---------------------------------------------------------------|--------------|------|--------------| |
| 11 | +| [1.6.0](https://github.com/Tearth/Inanis/releases/tag/v1.6.0) | 01-02-2025 | 3100 | More evaluation features and improved time management | |
11 | 12 | | [1.5.0](https://github.com/Tearth/Inanis/releases/tag/v1.5.0) | 01-11-2024 | 3000 | Aspiration windows, improved performance and multithreading | |
12 | 13 | | [1.4.0](https://github.com/Tearth/Inanis/releases/tag/v1.4.0) | 03-08-2024 | 2950 | Check extensions, relative PST, countermove heuristic | |
13 | 14 | | [1.3.0](https://github.com/Tearth/Inanis/releases/tag/v1.3.0) | 14-06-2024 | 2900 | Gradient descent tuner, improved SEE and evaluation | |
@@ -35,25 +36,27 @@ Inanis has an official lichess account, where you can try to challenge the engin |
35 | 36 |
|
36 | 37 | ## UCI options |
37 | 38 | - `Hash` *(default: 2 MB)* - a total size (in megabytes) for the transposition table and pawn hashtable |
38 | | - - `Move Overhead` *(default: 10 ms)* - the amount of time (in milliseconds) that should be reserved during a search for some unexpected delays (like the slowness of GUI or network lags) |
| 39 | + - `Move Overhead` *(default: 100 ms)* - the amount of time (in milliseconds) that should be reserved during a search for some unexpected delays (like the slowness of GUI or network lags) |
39 | 40 | - `MultiPV` *(default: 1 PV line)* - number of PV lines which should be displayed during search |
40 | 41 | - `Threads` *(default: 1 thread)* - number of threads to use during search (should be less than a number of processor cores to get the best performance) |
41 | 42 | - `SyzygyPath` *(default: <empty>)* - location of the optional Syzygy tablebases |
42 | 43 | - `SyzygyProbeLimit` *(default: 8 pieces)* - maximal number of pieces for which the tablebase probe should be executed |
43 | 44 | - `SyzygyProbeDepth` *(default: 6)* - minimal depth at which the tablebase probe should be executed |
44 | 45 | - `Ponder` *(default: false)* - allows the engine to think during the opponent's time |
45 | 46 | - `Crash Files` *(default: false)* - when enabled, saves crash messages in the ./crash directory |
| 47 | + - `Search Noise` *(default: false)* - when enabled, a small random noise is added to make search different every time |
| 48 | + - `Soft Nodes` *(default: false)* - when enabled, nodes limit is enforced only after search iteration is done instead of aborting it in the middle |
46 | 49 |
|
47 | 50 | ## How to build |
48 | 51 | By default, calling `cargo build` or `cargo build --release` will build the engine without support for Syzygy tablebases (but still fully functional). To include it, please add `--features syzygy,bindgen` and make sure you have installed [clang](https://clang.llvm.org/) when working on Windows (MSVC doesn't support some C11 elements, so can't be used). |
49 | 52 |
|
50 | 53 | ## Algorithms |
51 | 54 | - **Board representation**: bitboards (a hybrid of make/undo scheme and storing data on stacks) |
52 | | - - **Move generator**: staged (hash move, captures, quiet moves), magic bitboards, precalculated arrays for knight and king |
53 | | - - **Move ordering**: hash move, good captures (SEE with support for x-ray attacks), killer table, special moves, history table, bad captures |
| 55 | + - **Move generator**: staged (captures, quiet moves), magic bitboards, precalculated arrays for knight and king |
| 56 | + - **Move ordering**: hash move, good captures (SEE with support for x-ray attacks), killers, countermoves, castling and promotions, butterfly history, bad captures |
54 | 57 | - **Search**: negamax, alpha-beta pruning, quiescence search, aspiration windows, null-move pruning, static null move pruning, razoring, late move reduction, late move pruning, lazy SMP, internal iterative reductions, check extensions |
55 | 58 | - **Cache**: transposition table, pawn hashtable, history heuristic, killer heuristic, countermove heuristic |
56 | | - - **Evaluation**: material, piece-square tables, pawn structure, mobility, king safety |
| 59 | + - **Evaluation**: material, piece-square tables, pawn structure, pawn threats, mobility, king safety, tempo |
57 | 60 |
|
58 | 61 | ## Tuner |
59 | 62 | Inanis has a built-in tuner, which allows for optimizing all evaluation parameters using a well-known [Texel's tuning method](https://www.chessprogramming.org/Texel%27s_Tuning_Method). As an output, there are Rust source files generated in a way that allows them to be directly pasted into the engine's source code. |
|
0 commit comments