In Rust geschriebene UCI-Schach-Engine, der Nachfolger von Proxima b, Proxima b 2.0 und Cosette. Das Projekt wird nach Stunden geschrieben, mit dem Ziel, eine Stärke von 3000 Elo zu erreichen. Perfekt als Sparringspartner für andere Schach-Engines, da es mit sehr schnellen Spielen intensiv getestet wurde. Unterstützt Syzygy-Tablebases, MultiPV, Thinking und Multithreading.
Aktuelle Stärke : 3000 Elo (01.11.2024)
Dokumentation : https://tearth.dev/Inanis/
Version | Veröffentlichungsdatum | Elo | Wichtigste Änderungen |
---|---|---|---|
1.5.0 | 01.11.2024 | 3000 | Aspirationsfenster, verbesserte Leistung und Multithreading |
1.4.0 | 03.08.2024 | 2950 | Überprüfen Sie Erweiterungen, relative PST und Gegenbewegungsheuristik |
1.3.0 | 14.06.2024 | 2900 | Gradient Descent Tuner, verbessertes SEE und Auswertung |
1.2.1 | 04.09.2023 | 2850 | Befehle, die direkt über eine Befehlszeile ausgeführt werden, perfekt im UCI-Modus |
1.2.0 | 15.01.2023 | 2850 | Verbesserte Syzygy-Unterstützung, allgemeine Leistungs- und Stabilitätsverbesserung |
1.1.1 | 14.08.2022 | 2800 | Eine Reihe von Korrekturen für gemeldete Probleme und Stabilitätsverbesserungen |
1.1.0 | 31.07.2022 | 2800 | Syzygy Tablebases, MultiPV, angepasste Auswertung |
1.0.1 | 05.04.2022 | 2750 | Eine Reihe von Korrekturen für gemeldete Probleme und Stabilitätsverbesserungen |
1.0.0 | 02.04.2022 | 2750 | Erstveröffentlichung |
Jede Version enthält eine Reihe von Binärdateien für verschiedene Plattformen: Linux (x86, x86-64, ARM, AArch64) und Windows (x86, x86-64). Sowohl Linux x86-64 als auch Windows x86-64 wurden außerdem mit zwei zusätzlichen Befehlssatzvarianten kompiliert: POPCNT und POPCNT + BMI1 + BMI2 – um die beste Leistung zu erzielen, versuchen Sie bitte, den benchmark
Befehl mit verschiedenen Engine-Varianten auszuführen und wählen Sie diejenige aus, die am besten funktioniert hat keinen Fehler zurückgegeben und verfügt über die fortschrittlichsten Anweisungen.
Vielen Dank an alle Tester und ihren Einsatz! Bitte beachten Sie, dass Elo in den obigen Listen aufgrund unterschiedlicher Engine-Pools und der für Tests verwendeten Zeitkontrolle geringfügig von den Schätzungen des Autors abweichen kann.
Inanis hat ein offizielles Lichess-Konto, in dem Sie versuchen können, die Engine herauszufordern: https://lichess.org/@/InanisBot. Bitte beachten Sie, dass die Bewertungen dort sehr niedrig ausfallen und nicht mit denen von CCRL vergleichbar sind. Akzeptiert Standardschach mit Bullet-, Blitz-, Schnellschach- und klassischer Zeitkontrolle.
Hash
(Standard: 2 MB) – eine Gesamtgröße (in Megabyte) für die Transpositionstabelle und die Pawn-HashtabelleMove Overhead
(Standard: 10 ms) – die Zeit (in Millisekunden), die während einer Suche für unerwartete Verzögerungen (wie die Langsamkeit der GUI oder Netzwerkverzögerungen) reserviert werden sollte.MultiPV
(Standard: 1 PV-Linie) – Anzahl der PV-Linien, die bei der Suche angezeigt werden sollenThreads
(Standard: 1 Thread) – Anzahl der Threads, die während der Suche verwendet werden sollen (sollte kleiner sein als die Anzahl der Prozessorkerne, um die beste Leistung zu erzielen)SyzygyPath
(Standard: <leer>) – Speicherort der optionalen Syzygy-TabellenbasenSyzygyProbeLimit
(Standard: 8 Stück) – maximale Anzahl von Stücken, für die der Tablebase-Probe ausgeführt werden sollSyzygyProbeDepth
(Standard: 6) – minimale Tiefe, in der der Tablebase-Probe ausgeführt werden sollPonder
(Standard: falsch) – ermöglicht es der Engine, während der Zeit des Gegners nachzudenkenCrash Files
(Standard: false) – Wenn diese Option aktiviert ist, werden Absturzmeldungen im Verzeichnis ./crash gespeichert Standardmäßig wird durch den Aufruf von cargo build
oder cargo build --release
die Engine ohne Unterstützung für Syzygy-Tablebases erstellt (aber immer noch voll funktionsfähig). Um es einzubinden, fügen Sie bitte --features syzygy,bindgen
hinzu und stellen Sie sicher, dass Sie clang installiert haben, wenn Sie unter Windows arbeiten (MSVC unterstützt einige C11-Elemente nicht und kann daher nicht verwendet werden).
Inanis verfügt über einen integrierten Tuner, der die Optimierung aller Bewertungsparameter mithilfe einer bekannten Texel-Tuning-Methode ermöglicht. Als Ausgabe stehen Rust-Quelldateien zur Verfügung, die so generiert wurden, dass sie direkt in den Quellcode der Engine eingefügt werden können.
Beispiel-Eingabedatei:
r2qkr2/p1pp1ppp/1pn1pn2/2P5/3Pb3/2N1P3/PP3PPP/R1B1KB1R b KQq - c9 "0-1";
r4rk1/3bppb1/p3q1p1/1p1p3p/2pPn3/P1P1PN1P/1PB1QPPB/1R3RK1 b - - c9 "1/2-1/2";
4Q3/8/8/8/6k1/4K2p/3N4/5q2 b - - c9 "0-1";
r4rk1/1Qpbq1bp/p1n2np1/3p1p2/3P1P2/P1NBPN1P/1P1B2P1/R4RK1 b - - c9 "0-1";
Beispiele für den Betrieb des Tuners:
tuner ./input/quiet.epd ./output/ true 0.007 0.75 1
– Single-Threaded-Tuning für in quiet.epd
gespeicherte Positionen ausführen, beginnend mit den Zufallswerten, mit Skalierungskonstante 0,007, WDL-Verhältnis 0,75 und Speichern des Ergebnisses im output
tuner ./input/quiet.epd ./output/ false None 1.0 4
– Optimierung mit 4 Threads für in quiet.epd
gespeicherte Positionen ausführen, beginnend mit den bereits in der Engine festgelegten Werten, mit vor der Optimierung festgelegter Skalierungskonstante, WDL-Verhältnis 1,0 und Speichern des Ergebnisses im output
Seit Version 1.1.0 verfügt Inanis auch über einen Befehl zum Generieren von EPD-Dateien mit Ruhepositionen, basierend auf der bereitgestellten PGN-Eingabe:
dataset ./input/games.pgn ./output/quiet.epd 16 250 50 3 0.5
– Erzeugen Sie eine neue quiet.epd
Datei, indem Sie games.pgn
analysieren und 3 zufällige Positionen aus jedem Spiel übernehmen und diese mit einem Ply ignorieren kleiner als 16, Bewertungspunktzahl größer als 250 und Differenz zwischen Bewertungspunktzahl und Ruhesuchpunktzahl größer als 50. Die durchschnittliche Spielphase 0,5 bedeutet, dass die Positionen ausgeglichen sind (> 0,5 = kurz vor der Eröffnung, < 0,5 = kurz vor dem Ende) Das Testen der strategischen Bewertungsleistung kann mithilfe des test
erfolgen, der eine Suche mit fester Tiefe nach in der EPD-Datei gespeicherten Positionen durchführt.
Beispiel einer Testsuite-Datei:
1k2r2r/1bq2p2/pn4p1/3pP3/pbpN1P1p/4QN1B/1P4PP/2RR3K b - - bm Nd7; c0 "Nd7=10, Bc5=8, Bc6=2, Be7=7"; id "STS: Knight Outposts/Repositioning/Centralization.001";
1q2bn2/6pk/2p1pr1p/2Q2p1P/1PP5/5N2/5PP1/4RBK1 w - - bm Ne5; c0 "Ne5=10, Nd4=8, Ra1=6, b5=9"; id "STS: Knight Outposts/Repositioning/Centralization.002";
1r1q1rk1/1b1n1p1p/p2b1np1/3pN3/3P1P2/P1N5/3BB1PP/1R1Q1RK1 b - - bm Ne4; c0 "Ne4=10, Bxa3=6, Nb6=6"; id "STS: Knight Outposts/Repositioning/Centralization.003";
1k2r2r/1bq2p2/pn4p1/3pP3/pbpN1P1p/4QN1B/1P4PP/2RR3K b - - bm Nd7; c0 "Nd7=10, Bc5=8, Bc6=2, Be7=7"; id "STS: Knight Outposts/Repositioning/Centralization.001";
1q2bn2/6pk/2p1pr1p/2Q2p1P/1PP5/5N2/5PP1/4RBK1 w - - bm Ne5; c0 "Ne5=10, Nd4=8, Ra1=6, b5=9"; id "STS: Knight Outposts/Repositioning/Centralization.002";
1r1q1rk1/1b1n1p1p/p2b1np1/3pN3/3P1P2/P1N5/3BB1PP/1R1Q1RK1 b - - bm Ne4; c0 "Ne4=10, Bxa3=6, Nb6=6"; id "STS: Knight Outposts/Repositioning/Centralization.003";
Beispiele für die Durchführung der Tests:
testset ./input/STS1.epd 16 64 4
– Führen Sie eine Suche mit fester Tiefe (in diesem Fall 16) für alle in der STS1.epd
Datei gespeicherten Positionen unter Verwendung einer 64-MB-Transpositionstabelle und 4 Threads durch. Um den Test als erfolgreich zu klassifizieren, muss die letzte Iteration den korrekten besten Zug zurückgeben. Bauen Sie Abhängigkeiten auf
Entwicklungsabhängigkeiten
Externe Bibliotheken
Da Inanis ein Lieblingsprojekt ist, werden Pull-Requests derzeit nicht akzeptiert – dies kann sich in Zukunft ändern, je nachdem, wie das Projekt verlaufen wird. Sie können jedoch jederzeit Fragen oder Vorschläge äußern, wir freuen uns sehr darüber.
Alle unten aufgeführten Befehle können sowohl im interaktiven Modus als auch direkt über eine Befehlszeile ausgeführt werden, beispielsweise inanis.exe perft 5
. Mit [DEV] gekennzeichnete Einträge sind nur verfügbar, wenn die Engine mit der dev
kompiliert wird.
=== General ===
benchmark - run test for a set of positions
evaluate [fen] - show score for the position
uci - run Universal Chess Interface
quit - close the application
=== Development ===
[DEV] dataset [pgn] [output] [min_ply] [max_score] [max_diff] [density] - dataset generator
[DEV] magic - generate magic numbers
[DEV] testset [epd] [depth] [ttable_size] [threads_count] - run test of positions
[DEV] tuner [epd] [output] [randomize] [k] [wdl_ratio] [threads_count] - run tuning
=== Perft ===
perft [depth]
perft [depth] fen [fen]
perft [depth] moves [moves]
=== Divided Perft ===
dperft [depth]
dperft [depth] fen [fen]
dperft [depth] moves [moves]
=== Quick Perft ===
qperft [depth] [threads_count] [hashtable_size_mb]
qperft [depth] [threads_count] [hashtable_size_mb] fen [fen]
qperft [depth] [threads_count] [hashtable_size_mb] moves [moves]