um mecanismo XiangQi (xadrez chinês) para XQWizard com IA forte
Programa de jogo de xadrez chinês ElephantEye (Elephant Eye) versão: 3.15
Rede de Enciclopédia Xiangqi* Março de 2008
(* E-mail: [email protected])
1. Introdução
ElephantEye é um programa de xadrez chinês gratuito Sob a premissa de seguir a Licença Pública Geral Menor GNU, entusiastas e programadores de xadrez podem usar livremente o ElephantEye e seu programa fonte.
O nome chinês de ElephantEye é "Elephant Eye", que juntamente com as "pernas de cavalo" e a "estrutura de canhão" constituem a "terceira dimensão no tabuleiro de xadrez" do xadrez chinês. O ElephantEye costuma ser usado em conjunto com o ElephantBoard, um software de edição de registros de xadrez, o que significa ter um plano claro (Board em inglês significa “tabuleiro”). (Nota: ElephantBoard agora foi renomeado como "Chess Wizard".)
2. Contrato do Motor
ElephantEye suporta UCCI 3.0. Os usuários do Light Red Xiangqi podem chamar o mecanismo ElephantEye por meio do adaptador de mecanismo UCCI (UCCI2QH).
(1) Os comandos UCCI suportados são:
ucci
opção definida...
posição {fen <fen_str> | startpos} [move <move_list>]
banmoves <move_list>
vá [ponderar | desenhar] ...
ponderhit [desenhar] |
sonda {fen <fen_str> | startpos} [move <move_list>]
desistir
(2) As informações UCCI que podem ser retornadas são:
id {nome <nome_do_motor> | versão <nome_da_versão> | copyright <informações_de_autor> | autor <nome_do_autor> |
opção...
ucciok
informações...
{nobestmove | bestmove <best_move> [ponder <ponder_move>] [desenhar | renunciar]}
pophash [bestmove <best_move>] [limite inferior <valor> profundidade <profundidade>] [limite superior <valor> profundidade <profundidade>]
tchau
3. Configurações de parâmetros
Como um mecanismo UCCI, o ElephantEye possui vários parâmetros que podem ser definidos (podem ser definidos diretamente no <Chess Wizard>).
(1) Iniciando biblioteca:
A biblioteca de abertura padrão é BOOK.DAT no diretório atual do programa ElephantEye (ELEEYE.EXE), que contém 10.000 posições simétricas.
(2) Tempo de reflexão:
Limitar a profundidade do pensamento geralmente não é uma boa escolha. Recomenda-se definir um limite de tempo e deixar o programa alocar tempo automaticamente. Ao resolver um jogo de matar ou analisar uma situação, o programa pode pensar sem limites e parar de pensar a qualquer momento.
(3) Tamanho da mesa de substituição:
Embora o tamanho da tabela de substituição tenha pouco impacto na velocidade de execução do programa e a configuração padrão de 16 MB seja suficiente, o ElephantEye ainda oferece a função de definir o tamanho da tabela de substituição. Se a memória permitir, você pode aumentar adequadamente o tamanho da tabela de substituição ao jogar xadrez lento, mas é recomendado não exceder metade da memória física.
(3) Grau de alfaiataria:
Para acelerar as operações do programa, o ElephantEye usa recorte vazio por padrão e a possibilidade de efeitos negativos é mínima. Somente o nível mais baixo desativa o corte em branco.
(4) Quantidade de conhecimento:
A quantidade de conhecimento está relacionada à precisão da avaliação da situação. Entre os níveis de conhecimento do ElephantEye, apenas o nível mais baixo não utiliza a função de avaliação da situação (apenas o valor do subpoder é considerado. Não há necessidade de confiar). no conhecimento da revisão para analisar a posição, etc. Nesta situação, você pode tentar esta configuração.
(5) Aleatoriedade:
ElephantEye apresenta 4 níveis de aleatoriedade. Quanto maior a aleatoriedade, maior a probabilidade de o programa apresentar uma jogada que ele considera não ser a melhor jogada, mas "não é a melhor jogada" não deixa de ter quaisquer benefícios, especialmente quando a biblioteca de abertura não está habilitada, aumentando apropriadamente o a aleatoriedade pode evitar O programa faz o mesmo movimento na mesma situação.
4. Regras
A partir da versão 2.0, o ElephantEye não apenas apóia a regra de "decisão unilateral de perder de longo prazo", mas também apóia "decisão de perder de longo prazo" Hit "inclui" check "e" catch ". Devido às limitações na complexidade do programa, apenas as três situações a seguir são reconhecidas como "capturas":
A. Cavalos e carros ou artilheiros (peões) com raízes;
B. Carroças e artilheiros a cavalo (peões) com raízes;
C. O canhão captura bigas ou cavalaria enraizada (peões).
Embora o ElephantEye possa não ser capaz de identificar corretamente movimentos longos em situações complexas, uma vez que suporta o comando UCCI banmoves..., uma vez que o usuário pensa que o motor baniu "movimentos longos", ele pode usar a função "set ban" do <Assistente de Xadrez> Deixe o motor mudar com força.
5. Algoritmo do Jogo
ElephantEye é um programa de xadrez de força bruta que usa algoritmos de jogo rigorosos e eficazes:
(1) Mova o gerador usando linhas e colunas de bits:
Linhas de bits (BitRanks) e colunas de bits (BitFiles) são propícias à geração de movimentos de peças de xadrez deslizantes (carros e canhões) (especialmente linhas de captura e colunas de bits podem usar tabelas de pesquisa em vez de loops em raios). No ElephantEye, a tecnologia de linhas e colunas de bits não é usada apenas no gerador de movimentos, mas também na determinação da fixação.
(2) Pesquisa de situação estática:
Ao fazer uma busca estática, o ElephantEye procurou movimentos para capturar ou remover generais. Ao procurar movimentos para capturar, o ElephantEye filtrou capturas sem importância, como peões que não conseguem capturar o rio, ou soldados que capturam o bispo que não está na defesa. Os métodos de espera não estão no escopo da pesquisa estática.
(3) Movimentos de ciclo e detecção de longo alcance:
O ElephantEye pode identificar movimentos em loop. Quando ocorrem movimentos em loop, ele pode determinar qual lado é o líder e aproveitar as regras que proíbem os capitães. No entanto, atualmente o ElephantEye não consegue identificar agarramentos longos.
(4) Tabela de substituição:
ElephantEye refere-se à ideia de design do programa de xadrez chinês "Running Horses", usa tabelas de substituição de camada dupla com profundidade e sempre cobertas e adota uma estratégia de atualização de tabela de substituição de correção de limite de baixo nível (alto).
(5) Corte em branco com inspeção:
ElephantEye usa recorte vazio com R = 2 e usa recorte vazio verificado no estágio final do jogo.
(6) Aprofundamento iterativo/movimentos de comer crianças/movimentos matadores/inspiração na tabela de história:
A classificação de movimentos do ElephantEye é muito simples e clara, seguida por movimentos iterativos de aprofundamento, bons movimentos de captura, movimentos matadores e movimentos generativos classificados pela tabela de histórico.
(7) O geral/único deverá estender:
Para extensões seletivas, o ElephantEye usa extensões gerais e apenas extensões gerais.
(8) Pesquisa de variante principal Alfa-Beta:
ElephantEye usa pesquisa de variante primária alfa-beta recursiva tradicional.
(9) Iniciando biblioteca:
A biblioteca de abertura do ElephantEye contém um total de 10.000 movimentos simétricos, extraídos de 8.000 jogos principais em competições nacionais de xadrez individual, competições por equipes, Copa Wuyang, ligas e outros jogos de 1990 a 2005.
(10) Pensamento nos bastidores e estratégias de alocação de tempo:
O ElephantEye oferece suporte à função de pensamento em segundo plano e fornece duas estratégias de alocação de tempo, baseada em período e horas extras, que alocarão automaticamente o tempo de maneira razoável.
6. Abrindo biblioteca
A biblioteca de abertura do ElephantEye pode ser produzida pelo "ElephantEye Opening Library Maker". Depois de executar a ferramenta de produção, você deve primeiro selecionar a pasta onde o registro do jogo PGN está localizado e, em seguida, salvá-lo como um arquivo de biblioteca de abertura (geralmente BOOK.DAT). Geralmente, quanto maior o número de registros de xadrez usados para gerar a biblioteca de abertura, maior será o arquivo da biblioteca de abertura gerado.
Para tornar a biblioteca de abertura produzida eficaz para o ElephantEye, você só precisa substituir BOOK.DAT no diretório ElephantEye pelo arquivo de biblioteca de abertura gerado. Você também pode especificar o arquivo da biblioteca de abertura na caixa de diálogo "Configurações do mecanismo" do <Chess. Assistente>.
7. Biblioteca de funções de avaliação de situação
ElephantEye A partir da versão 2.1, a parte de pesquisa e a parte de avaliação da situação do programa foram separadas. A parte de pesquisa é acoplada à parte de avaliação da situação por meio da chamada de funções API.
Outros programadores de xadrez podem jogar mais livremente com base no ElephantEye. De acordo com o acordo LGPL, as duas partes de pesquisa e avaliação de situação são tratadas como bibliotecas de programas independentes. Para usar qualquer parte, basta divulgar o programa fonte dessa parte. Em outras palavras, se a parte de avaliação da situação não utiliza nenhum código aberto, então o programador não tem obrigação de divulgar o programa fonte desta parte, e o mesmo vale para a parte de busca.
A interface de função da API de avaliação de situação do ElephantEye é definida da seguinte forma:
A. Nome do mecanismo de avaliação da situação: const char *GetEngineName(void);
B. Interface da função de pré-avaliação de posição: void PreEvaluate(PositionStruct *lppos, PreEvalStruct *lpPreEval);
C. Interface da função de avaliação de posição: int Evaluate(const PositionStruct *lppos, int vlAlpha, int vlBeta);
Entre eles, PositionStruct e PreEvalStruct devem estar em conformidade com as estruturas definidas em position.h e pregen.h respectivamente.
8. Programa fonte
O programa fonte do ElephantEye inclui 9 módulos, o conteúdo é aproximadamente o seguinte:
(1) ucci.h/ucci.cpp
Módulo de interpretação de comandos UCCI, incluindo programas de recepção de entrada de linha em Windows e Unix;
(2) pregen.h/pregen.cpp
Módulo para geração de arrays Zobrist e movimentação de tabelas predefinidas. A tabela predefinida do ElephantEye é dividida em duas partes. Uma é a tabela predefinida para peças de xadrez deslizantes (incluindo nenhuma peça, torres, canhões e todas as outras peças). outras peças de xadrez, o que evita julgamentos de limites complicados ao gerar movimentos.
(3) posição.h/posição.cpp
Descreve principalmente a estrutura de dados e funções de movimentos e situações. O processamento da situação é o foco deste módulo. O conteúdo do processamento inclui inicialização da situação, importação de cordas FEN, movimento da peça de xadrez, julgamento de racionalidade do movimento do assassino, julgamento geral, detecção de líder e ciclo, ajuste do valor das peças, etc. Também inclui 5 tabelas de valores de posição de subforça.
(4)genmoves.cpp
O gerador de movimentos inclui dois tipos que geram movimentos que capturam peças e movimentos que não capturam peças, mas não podem apenas gerar movimentos que removem generais. Ao gerar os movimentos de comer crianças, cada movimento recebe um valor MVV (LVA) (ou quase-SEE) correspondente. Este módulo também possui uma função que determina especificamente se as peças de xadrez estão protegidas para calcular o valor MVV (LVA) Para peças de xadrez protegidas, calcule o valor MVV-LVA (sem contar se for menor que zero). , calcule apenas o valor MVV. Portanto, o programa para determinar se uma peça de xadrez tem raiz também está incluído neste módulo.
(5) hash.h/hash.cpp
O módulo de gerenciamento de tabela de substituição, tabela de histórico e lista de movimentação inclui a alocação e acesso de tabelas de substituição, aquisição de grandes variações e outras operações.
(6) livro.h/book.cpp
Abrindo o módulo de leitura da biblioteca.
(7) movesort.h/movesort.cpp
Mover módulo de classificação de lista.
(8) search.h/search.cpp
Além dos três processos principais de pesquisa estática, pesquisa completa e pesquisa de nó raiz, o módulo de pesquisa também inclui controle de aprofundamento iterativo, pensamento em segundo plano, alocação de tempo, estatísticas de parâmetros de pesquisa e saída de informações de pesquisa. Este módulo é o módulo principal de todo o programa.
(9) eleeye.cpp
Programa principal (ou seja, função principal).
(10) preeval.h/preeval.cpp
Pré-gerador de matriz de posição de subpotência, ElephantEye ajusta linearmente a matriz de posição de subpotência com base nos dois parâmetros de "ofensiva/defesa" e "abertura/meio jogo/final de jogo".
(11) avaliar.cpp
Quanto à função de avaliação de situação, o ElephantEye adota um mecanismo de avaliação preguiçosa de quatro níveis. O nível mais difícil avalia apenas padrões especiais de xadrez, um nível adicional avalia a contenção, um nível adicional avalia a flexibilidade da torre e o nível mais alto também avalia a obstrução. do cavaleiro.
9. Desempenho do programa
O design do ElephantEye concentra-se em algoritmos de busca, mas é relativamente carente de conhecimento. Em um processador de 2,8 GHz, aproximadamente 1.000.000 de nós podem ser pesquisados por segundo (incluindo pesquisa regular e pesquisa estática), e aproximadamente 11 camadas podem ser pesquisadas em uma situação típica de meio de jogo em 1 minuto.
Em termos de poder de xadrez, o ElephantEye está no mesmo nível de programas como "Qiyin" e SaoLa (Chess Challenger). No entanto, devido a falhas na função de avaliação de posição, o ElephantEye está longe de ser o melhor software de xadrez comercial (Xie Master,). Família Xiangqi, Xiangqi Qibing, Qi). Ainda existe uma certa lacuna.
ElephantEye foi testado em sites de jogos de xadrez como Lianzhong e Yitian. Medido por pontos, o recorde do Lianzhong.com é de cerca de 2.500 pontos, o recorde de xadrez rápido de Yitian é de cerca de 2.000 pontos e o de xadrez lento é de cerca de 1.500 pontos.
Em setembro de 2005, com a ajuda do Sr. Shi Jinshan, um entusiasta de software de xadrez taiwanês, ElephantEye participou da competição de grupo de xadrez chinês da 10ª Olimpíada de Informática ICGA realizada em Taipei, com um recorde de 7 vitórias, 5 derrotas e 14 derrotas entre 14 programas Classificado em 11º lugar em agosto de 2006; Participou do primeiro campeonato nacional de jogos de computador realizado em Pequim, com recorde de 7 vitórias, 2 derrotas e 11 derrotas, ficando em 7º lugar entre 18 programas.
10. Recursos relacionados
O programa fonte do ElephantEye é lançado no projeto XiangQi Wizard do SourceForge, e sua página é:
http://sourceforge.net/projects/xqwizard/
A melhoria da versão do ElephantEye é lançada de forma síncrona em tempo real no site SourceForge SVN. O endereço de acesso é:
https://xqwizard.svn.sourceforge.net/svnroot/xqwizard/
Você pode usar programas clientes SVN como o TortoiseSVN para obter o código mais recente (completamente sincronizado com os desenvolvedores). O endereço de introdução e download do TortoiseSVN é:
http://sourceforge.net/projects/tortoisesvn/
O ElephantEye deve ser executado em um programa de xadrez que suporte UCCI (como o <Chess Wizard>). O programa de instalação do <Chess Wizard> contém a versão mais recente do ElephantEye.
<Chess Wizard> pode ser baixado do seguinte site:
http://www.skycn.com/soft/24665.html (estação de software Sky)
http://www.onlinedown.net/soft/38287.htm (Parque de Software Huajun)
Além do programa fonte do próprio ElephantEye, o pacote do programa fonte do ElephantEye também inclui os seguintes módulos adicionais:
(1) Código base (base): Fornece instruções de montagem, chamadas de funções do sistema e outras funções;
(2) Módulo de regras do xadrez chinês (ccess): fornece uma interface para outro software usar o código ElephantEye;
(3) Módulo de produção da biblioteca de abertura (BOOK): o código para criar a biblioteca de abertura BOOK.DAT;
(4) Simulador da Liga de Motores UCCI (LEAGUE): Fornece uma plataforma automática de correspondência em lote para testes e competição de motores UCCI;
(5) UCCI Engine Search Tree Analyzer (TREE): uma ferramenta de análise de rota de pesquisa para o mecanismo UCCI (suportando UCCI 2.2+);
(6) Ferramentas de registro de xadrez XQF (XQFTOOLS): Fornece ferramentas para converter XQF e outros registros de xadrez em PGN;
(7) Adaptador Light Red Chess (UCCI2QH): Fornece uma interface para Light Red Chess chamar o mecanismo UCCI;
(8) O mecanismo de xadrez vermelho claro suporta o adaptador UCCI (QH2UCCI): fornece uma interface para o xadrez vermelho claro "Dream Egg" se juntar ao teste do mecanismo UCCI;
(9) BBS Chess (BBSCHESS): Uma ferramenta de configuração de posição de xadrez feita em Visual Basic, que pode colar posições de xadrez coloridas no BBS de várias universidades;
(10) Gerador de imagens de tabuleiro de xadrez (FEN2BMP): uma ferramenta prática que pode converter arquivos FEN de xadrez e xadrez chinês em arquivos BMP;
(11) Conversão de codificação (codec), incluindo transcodificação simplificada e tradicional, transcodificação de texto UNIX, transcodificação Base64, etc.;
(12) Outras ferramentas (MISC): incluindo comunicação de rede simples, testes de pipeline e outras ferramentas;
(13) Documento de Documentação (DOC): nomeadamente a série "Exploração da Programação de Xadrez Chinês";
(14) Registros de xadrez participantes (CCGC): Todos os registros de xadrez da ElephantEye participando do primeiro Campeonato Nacional de Jogos de Computador (CCGC).
Se quiser obter informações mais detalhadas sobre o ElephantEye, você pode fazer login no site da Enciclopédia Xiangqi:
http://www.xqbase.com/