Moteur d'échecs UCI écrit en Rust, successeur de Proxima b, Proxima b 2.0 et Cosette. Le projet est écrit après les heures d'ouverture, dans le but d'atteindre une force de 3000 Elo. Parfait comme partenaire d'entraînement pour d'autres moteurs d'échecs, car il a été fortement testé avec des parties très rapides. Prend en charge les bases de table Syzygy, MultiPV, la réflexion et le multithreading.
Force actuelle : 3000 Elo (01-11-2024)
Documentation : https://tearth.dev/Inanis/
Version | Date de sortie | Élo | Principaux changements |
---|---|---|---|
1.5.0 | 01-11-2024 | 3000 | Fenêtres d'aspiration, performances améliorées et multithreading |
1.4.0 | 03-08-2024 | 2950 | Vérifier les extensions, le PST relatif, l'heuristique de contre-mouvement |
1.3.0 | 14-06-2024 | 2900 | Accordeur de descente de gradient, SEE et évaluation améliorés |
1.2.1 | 04-09-2023 | 2850 | Commandes exécutées directement depuis une ligne de commande, parfaites en mode UCI |
1.2.0 | 15-01-2023 | 2850 | Prise en charge améliorée de Syzygy, amélioration des performances générales et de la stabilité |
1.1.1 | 14-08-2022 | 2800 | Un tas de correctifs pour les problèmes signalés, amélioration de la stabilité |
1.1.0 | 31-07-2022 | 2800 | Bases de table Syzygy, MultiPV, évaluation ajustée |
1.0.1 | 05-04-2022 | 2750 | Un tas de correctifs pour les problèmes signalés, amélioration de la stabilité |
1.0.0 | 02-04-2022 | 2750 | Version initiale |
Chaque version contient un ensemble de binaires pour différentes plates-formes : Linux (x86, x86-64, ARM, AArch64) et Windows (x86, x86-64). Linux x86-64 et Windows x86-64 ont également été compilés avec deux variantes de jeu d'instructions supplémentaires : POPCNT et POPCNT + BMI1 + BMI2 - pour obtenir les meilleures performances, essayez d'exécuter la commande benchmark
en utilisant différentes variantes de moteur et choisissez celle qui n'a pas renvoyé d'erreur et contient les instructions les plus avancées.
Un grand merci à tous les testeurs et à leurs efforts ! Veuillez noter que les Elo figurant dans les listes ci-dessus peuvent légèrement différer des estimations de l'auteur en raison des différents pools de moteurs et du contrôle du temps utilisé pour les tests.
Inanis a un compte lichess officiel, où vous pouvez essayer de défier le moteur : https://lichess.org/@/InanisBot. Veuillez noter que les notes y sont très sous-estimées et ne sont pas comparables à celles du CCRL. Accepte les échecs standard avec un contrôle du temps bullet, blitz, rapide et classique.
Hash
(par défaut : 2 Mo) - une taille totale (en mégaoctets) pour la table de transposition et la table de hachage des pionsMove Overhead
(par défaut : 10 ms) - la durée (en millisecondes) qui doit être réservée lors d'une recherche de certains retards inattendus (comme la lenteur de l'interface graphique ou les retards du réseau)MultiPV
(par défaut : 1 ligne PV) - nombre de lignes PV qui doivent être affichées lors de la rechercheThreads
(par défaut : 1 thread) - nombre de threads à utiliser pendant la recherche (doit être inférieur au nombre de cœurs de processeur pour obtenir les meilleures performances)SyzygyPath
(par défaut : <vide>) - emplacement des bases de tables Syzygy facultativesSyzygyProbeLimit
(par défaut : 8 pièces) - nombre maximal de pièces pour lesquelles la sonde tablebase doit être exécutéeSyzygyProbeDepth
(par défaut : 6) - profondeur minimale à laquelle la sonde tablebase doit être exécutéePonder
(par défaut : false) - permet au moteur de réfléchir pendant le temps de l'adversaireCrash Files
(par défaut : false) - lorsqu'il est activé, enregistre les messages de crash dans le répertoire ./crash Par défaut, appeler cargo build
ou cargo build --release
construira le moteur sans prise en charge des bases de table Syzygy (mais toujours entièrement fonctionnel). Pour l'inclure, veuillez ajouter --features syzygy,bindgen
et assurez-vous d'avoir installé clang lorsque vous travaillez sous Windows (MSVC ne prend pas en charge certains éléments C11, il ne peut donc pas être utilisé).
Inanis dispose d'un tuner intégré qui permet d'optimiser tous les paramètres d'évaluation à l'aide de la méthode de réglage bien connue de Texel. En sortie, des fichiers sources Rust sont générés de manière à pouvoir les coller directement dans le code source du moteur.
Exemple de fichier d'entrée :
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";
Exemples d'exécution du tuner :
tuner ./input/quiet.epd ./output/ true 0.007 0.75 1
- exécute un réglage monothread pour les positions stockées dans quiet.epd
, en commençant par les valeurs aléatoires, avec une constante de mise à l'échelle de 0,007, un rapport WDL de 0,75 et en enregistrant le résultat dans le répertoire output
tuner ./input/quiet.epd ./output/ false None 1.0 4
- exécution du réglage avec 4 threads pour les positions stockées dans quiet.epd
, à partir des valeurs déjà définies dans le moteur, avec une constante de mise à l'échelle déterminée avant le réglage, rapport WDL 1,0 et enregistrer le résultat dans le répertoire output
Depuis la version 1.1.0, Inanis dispose également d'une commande pour générer des fichiers epd avec des positions silencieuses, basées sur l'entrée PGN fournie :
dataset ./input/games.pgn ./output/quiet.epd 16 250 50 3 0.5
- générer un nouveau fichier quiet.epd
, en analysant games.pgn
et en prenant 3 positions aléatoires dans chacun des jeux, en les ignorant avec un pli inférieur à 16, score d'évaluation supérieur à 250 et différence entre le score d'évaluation et le score de recherche de quiescence supérieur à 50. La phase de jeu moyenne 0,5 signifie que les positions seront équilibrées (> 0,5 = proche de l'ouverture, < 0,5 = proche de la fin) Le test des performances de l'évaluation stratégique peut être effectué à l'aide de la commande test
, qui effectue une recherche à profondeur fixe des postes stockés dans le fichier EPD.
Exemple de fichier de suite de tests :
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";
Exemples d'exécution des tests :
testset ./input/STS1.epd 16 64 4
- exécutez une recherche à profondeur fixe (16 dans ce cas) pour toutes les positions stockées dans le fichier STS1.epd
, en utilisant une table de transposition de 64 Mo et 4 threads. Pour que le test soit considéré comme réussi, la dernière itération doit renvoyer le meilleur coup correct. Construire des dépendances
Dépendances de développement
Bibliothèques externes
Parce qu'Inanis est un projet favori, les demandes de tirage ne sont pas acceptées actuellement - cela peut ou non changer à l'avenir, en fonction de la manière dont le projet se déroulera. Cependant, n'hésitez pas à faire part de vos problèmes ou suggestions, elles sont grandement appréciées.
Toutes les commandes listées ci-dessous peuvent être exécutées aussi bien en mode interactif que directement depuis une ligne de commande, par exemple inanis.exe perft 5
. Les entrées marquées par [DEV] ne sont disponibles que lorsque le moteur est compilé avec la fonctionnalité dev
.
=== 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]