Motor de ajedrez UCI escrito en Rust, el sucesor de Proxima b, Proxima b 2.0 y Cosette. El proyecto está escrito fuera de horario, con el objetivo de alcanzar una fuerza de 3000 Elo. Perfecto como compañero de entrenamiento para otros motores de ajedrez, ya que fue probado exhaustivamente utilizando partidas muy rápidas. Admite bases de datos Syzygy, MultiPV, reflexión y subprocesos múltiples.
Fuerza actual : 3000 Elo (11-01-2024)
Documentación : https://tearth.dev/Inanis/
Versión | fecha de lanzamiento | elo | Principales cambios |
---|---|---|---|
1.5.0 | 01-11-2024 | 3000 | Ventanas de aspiración, rendimiento mejorado y subprocesos múltiples |
1.4.0 | 03-08-2024 | 2950 | Verificar extensiones, PST relativo, heurística de contramovimiento |
1.3.0 | 14-06-2024 | 2900 | Sintonizador de descenso de gradiente, SEE y evaluación mejoradas |
1.2.1 | 04-09-2023 | 2850 | Comandos ejecutados directamente desde una línea de comando, perfecto en modo UCI |
1.2.0 | 15-01-2023 | 2850 | Soporte mejorado de Syzygy, mejora del rendimiento general y de la estabilidad. |
1.1.1 | 14-08-2022 | 2800 | Un montón de correcciones para problemas reportados, mejora de la estabilidad |
1.1.0 | 31-07-2022 | 2800 | Bases de tablas Syzygy, MultiPV, evaluación ajustada |
1.0.1 | 05-04-2022 | 2750 | Un montón de correcciones para problemas reportados, mejora de la estabilidad |
1.0.0 | 02-04-2022 | 2750 | Lanzamiento inicial |
Cada versión contiene un conjunto de archivos binarios para varias plataformas: Linux (x86, x86-64, ARM, AArch64) y Windows (x86, x86-64). Tanto Linux x86-64 como Windows x86-64 también se compilaron con dos variantes de conjuntos de instrucciones adicionales: POPCNT y POPCNT + BMI1 + BMI2. Para obtener el mejor rendimiento, intente ejecutar el comando benchmark
utilizando diferentes variantes del motor y elija la que no devolvió un error y tiene las instrucciones más avanzadas.
¡Muchas gracias a todos los evaluadores y su esfuerzo! Tenga en cuenta que Elo en las listas anteriores puede diferir ligeramente de las estimaciones del autor debido a los diferentes grupos de motores y al control de tiempo utilizado para las pruebas.
Inanis tiene una cuenta oficial de lichess, donde puedes intentar desafiar el motor: https://lichess.org/@/InanisBot. Tenga en cuenta que las calificaciones son muy subestimadas y no comparables con las de CCRL. Acepta ajedrez estándar con bala, blitz, rápido y control de tiempo clásico.
Hash
(predeterminado: 2 MB) : un tamaño total (en megabytes) para la tabla de transposición y la tabla hash de peones.Move Overhead
(predeterminado: 10 ms) : la cantidad de tiempo (en milisegundos) que se debe reservar durante una búsqueda para detectar retrasos inesperados (como la lentitud de la GUI o retrasos de la red).MultiPV
(predeterminado: 1 línea PV) : número de líneas PV que deben mostrarse durante la búsquedaThreads
(predeterminado: 1 subproceso) : cantidad de subprocesos que se utilizarán durante la búsqueda (debe ser menor que una cantidad de núcleos de procesador para obtener el mejor rendimiento)SyzygyPath
(predeterminado: <vacío>) : ubicación de las bases de tablas Syzygy opcionalesSyzygyProbeLimit
(predeterminado: 8 piezas) : número máximo de piezas para las que se debe ejecutar la sonda de base de tablaSyzygyProbeDepth
(predeterminado: 6) : profundidad mínima a la que se debe ejecutar la sonda de base de tablaPonder
(predeterminado: falso) : permite que el motor piense durante el tiempo del oponente.Crash Files
(predeterminado: falso) : cuando está habilitado, guarda los mensajes de fallos en el directorio ./crash De forma predeterminada, llamar cargo build
o cargo build --release
construirá el motor sin soporte para bases de tablas Syzygy (pero aún completamente funcional). Para incluirlo, agregue --features syzygy,bindgen
y asegúrese de haber instalado clang cuando trabaje en Windows (MSVC no admite algunos elementos C11, por lo que no se puede usar).
Inanis tiene un sintonizador incorporado que permite optimizar todos los parámetros de evaluación utilizando el conocido método de ajuste de Texel. Como resultado, hay archivos fuente de Rust generados de una manera que permite pegarlos directamente en el código fuente del motor.
Archivo de entrada de ejemplo:
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";
Ejemplos de ejecución del sintonizador:
tuner ./input/quiet.epd ./output/ true 0.007 0.75 1
- ejecute el ajuste de un solo subproceso para las posiciones almacenadas en quiet.epd
, comenzando desde los valores aleatorios, con una constante de escala de 0.007, una relación WDL de 0.75 y guarde el resultado en el archivo directorio output
tuner ./input/quiet.epd ./output/ false None 1.0 4
Ajuste de 4 ejecuciones con 4 subprocesos para las posiciones almacenadas en quiet.epd
, a partir de los valores ya establecidos en el motor, con una constante de escala determinada antes del ajuste, relación WDL 1.0 y guardar el resultado en el directorio output
Desde la versión 1.1.0, Inanis también tiene un comando para generar archivos epd con posiciones silenciosas, según la entrada PGN proporcionada:
dataset ./input/games.pgn ./output/quiet.epd 16 250 50 3 0.5
- genera un nuevo archivo quiet.epd
, analizando games.pgn
y tomando 3 posiciones aleatorias de cada juego, ignorándolas con una capa menos de 16, puntaje de evaluación mayor que 250 y la diferencia entre el puntaje de evaluación y el puntaje de búsqueda de inactividad mayor que 50. La fase promedio del juego 0,5 significa que las posiciones estarán equilibradas (> 0,5 = cerca de la apertura, < 0,5 = cerca del final) La prueba del rendimiento de la evaluación estratégica se puede realizar utilizando el comando test
, que realiza una búsqueda de profundidad fija de las posiciones almacenadas en el archivo EPD.
Archivo de conjunto de pruebas de ejemplo:
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";
Ejemplos de ejecución de las pruebas:
testset ./input/STS1.epd 16 64 4
: ejecute una búsqueda de profundidad fija (16 en este caso) para todas las posiciones almacenadas en el archivo STS1.epd
, utilizando una tabla de transposición de 64 MB y 4 subprocesos. Para clasificar la prueba como exitosa, la última iteración debe devolver el mejor movimiento correcto. Construir dependencias
Dependencias de desarrollo
Bibliotecas externas
Debido a que Inanis es un proyecto favorito, actualmente no se aceptan solicitudes de extracción; esto puede cambiar o no en el futuro, dependiendo de cómo se desarrollará el proyecto. Sin embargo, siéntase libre de hacer preguntas o sugerencias, serán muy apreciadas.
Todos los comandos enumerados a continuación se pueden ejecutar tanto en modo interactivo como directamente desde una línea de comando, en el ejemplo inanis.exe perft 5
. Las entradas marcadas con [DEV] están disponibles solo cuando el motor está compilado con la función 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]