Motor de xadrez UCI escrito em Rust, o sucessor de Proxima b, Proxima b 2.0 e Cosette. O projeto é escrito fora do expediente, com o objetivo de atingir a força de 3.000 Elo. Perfeito como sparring para outros motores de xadrez, já que foi fortemente testado em jogos muito rápidos. Suporta tabelas Syzygy, MultiPV, ponderação e multithreading.
Força atual : 3000 Elo (01-11-2024)
Documentação : https://tearth.dev/Inanis/
Versão | Data de lançamento | Elo | Principais mudanças |
---|---|---|---|
1.5.0 | 11/01/2024 | 3.000 | Janelas de aspiração, melhor desempenho e multithreading |
1.4.0 | 03-08-2024 | 2950 | Verifique extensões, PST relativo, heurística de contra-ataque |
1.3.0 | 14-06-2024 | 2900 | Sintonizador de gradiente descendente, SEE e avaliação aprimorados |
1.2.1 | 04-09-2023 | 2850 | Comandos executados diretamente de uma linha de comando, perfeitos no modo UCI |
1.2.0 | 15-01-2023 | 2850 | Suporte aprimorado ao Syzygy, desempenho geral e melhoria de estabilidade |
1.1.1 | 14-08-2022 | 2800 | Várias correções para problemas relatados, melhoria de estabilidade |
1.1.0 | 31-07-2022 | 2800 | Bases de tabela Syzygy, MultiPV, avaliação ajustada |
1.0.1 | 05-04-2022 | 2750 | Várias correções para problemas relatados, melhoria de estabilidade |
1.0.0 | 02-04-2022 | 2750 | Lançamento inicial |
Cada versão contém um conjunto de binários para várias plataformas: Linux (x86, x86-64, ARM, AArch64) e Windows (x86, x86-64). Tanto o Linux x86-64 quanto o Windows x86-64 também foram compilados com duas variantes adicionais do conjunto de instruções: POPCNT e POPCNT + BMI1 + BMI2 - para obter o melhor desempenho, tente executar o comando benchmark
usando variantes de mecanismo diferentes e escolha aquela que não retornou erro e possui as instruções mais avançadas.
Muito obrigado a todos os testadores e seu esforço! Observe que o Elo nas listas acima pode diferir ligeiramente das estimativas do autor devido aos diferentes conjuntos de motores e ao controle de tempo usado para os testes.
Inanis tem uma conta oficial do lichess, onde você pode tentar desafiar o motor: https://lichess.org/@/InanisBot. Observe que as classificações são muito subestimadas e não comparáveis às da CCRL. Aceita xadrez padrão com controle de tempo bullet, blitz, rápido e clássico.
Hash
(padrão: 2 MB) - um tamanho total (em megabytes) para a tabela de transposição e a tabela hash de peõesMove Overhead
(padrão: 10 ms) - a quantidade de tempo (em milissegundos) que deve ser reservada durante uma busca por alguns atrasos inesperados (como lentidão da GUI ou atrasos na rede)MultiPV
(padrão: 1 linha PV) - número de linhas PV que devem ser exibidas durante a buscaThreads
(padrão: 1 thread) - número de threads a serem usados durante a pesquisa (deve ser menor que um número de núcleos de processador para obter o melhor desempenho)SyzygyPath
(padrão: <empty>) - localização das bases de tabela Syzygy opcionaisSyzygyProbeLimit
(padrão: 8 peças) - número máximo de peças para as quais o teste tablebase deve ser executadoSyzygyProbeDepth
(padrão: 6) – profundidade mínima na qual a análise da base de tabela deve ser executadaPonder
(padrão: falso) - permite que o motor pense durante o tempo do oponenteCrash Files
(padrão: false) - quando ativado, salva mensagens de falha no diretório ./crash Por padrão, chamar cargo build
ou cargo build --release
construirá o mecanismo sem suporte para bases de tabela Syzygy (mas ainda totalmente funcional). Para incluí-lo, adicione --features syzygy,bindgen
e certifique-se de ter instalado o clang ao trabalhar no Windows (o MSVC não suporta alguns elementos C11, portanto não pode ser usado).
O Inanis possui um sintonizador integrado, que permite otimizar todos os parâmetros de avaliação usando um conhecido método de ajuste de Texel. Como saída, existem arquivos-fonte do Rust gerados de uma forma que permite que sejam colados diretamente no código-fonte do mecanismo.
Exemplo de arquivo de entrada:
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";
Exemplos de execução do sintonizador:
tuner ./input/quiet.epd ./output/ true 0.007 0.75 1
- execute o ajuste de thread único para posições armazenadas em quiet.epd
, começando pelos valores aleatórios, com constante de escala 0,007, proporção WDL 0,75 e salvando o resultado no diretório output
tuner ./input/quiet.epd ./output/ false None 1.0 4
- execute o ajuste com 4 threads para posições armazenadas em quiet.epd
, partindo dos valores já configurados no motor, com constante de escala determinada antes do ajuste, relação WDL 1.0 e salvando o resultado no diretório output
Desde a versão 1.1.0, o Inanis também possui um comando para gerar arquivos epd com posições silenciosas, com base na entrada PGN fornecida:
dataset ./input/games.pgn ./output/quiet.epd 16 250 50 3 0.5
- gera um novo arquivo quiet.epd
, analisando games.pgn
e tomando 3 posições aleatórias de cada jogo, ignorando-as com uma camada menos de 16, pontuação de avaliação maior que 250 e a diferença entre a pontuação de avaliação e a pontuação de pesquisa de quiescência maior que 50. A fase média do jogo 0,5 significa que as posições serão equilibradas (> 0,5 = perto da abertura, < 0,5 = perto do fim) O teste de desempenho da avaliação estratégica pode ser feito usando o comando test
, que realiza uma pesquisa de profundidade fixa para posições armazenadas no arquivo EPD.
Exemplo de arquivo de conjunto de testes:
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";
Exemplos de execução dos testes:
testset ./input/STS1.epd 16 64 4
- execute uma pesquisa de profundidade fixa (16 neste caso) para todas as posições armazenadas no arquivo STS1.epd
, usando tabela de transposição de 64 MB e 4 threads. Para classificar o teste como bem-sucedido, a última iteração deve retornar o melhor movimento correto. Construir dependências
Dependências de desenvolvimento
Bibliotecas externas
Como o Inanis é um projeto favorito, solicitações pull não são aceitas atualmente - isso pode ou não mudar no futuro, dependendo do andamento do projeto. No entanto, fique à vontade para fazer perguntas ou sugestões, elas serão muito apreciadas.
Todos os comandos listados abaixo podem ser executados tanto no modo interativo quanto diretamente de uma linha de comando, por exemplo inanis.exe perft 5
. As entradas marcadas com [DEV] estão disponíveis somente quando o mecanismo é compilado com o recurso 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]