Supra chess engine

O primeiro motor de xadrez Português

Introdução

Supra Chess é o primeiro motor de xadrez português. O código fonte é totalmente original, aberto, escrito em c++ e está disponível para download no final da página. ↓

 Criador e desenvolvedor: Pedro Mourão Soares Correia. 

Novidades

Supra 29.1 disponível para download em baixo na página


  • Executável mais eficiente devido a utilização de  compilador com melhores características.


Supra 29.0 disponível para download em baixo na página


Entre as melhorias destacam-se:

  • Melhoria substancial do algoritmo de Shashin, através da implementação nos nodos finais do processo de decisão em função dos critérios posicionais específicos do algoritmo, tal como é executado no nível 0 e 1.
  • Desbloqueio da imposição de valor máximo de um peão para avaliação posicional nos nodos finais, o que significa que a avaliação posicional pode assumir valores superiores a um peão, levando a sacrifícios materiais efetivos nos nodos finais em benefício de critérios posicionais nomeadamente os graus de liberdade, compactação e critérios de defesa de rei, entre outros. 
  • Uma real conceção dos graus de liberdade nos níveis 0 e 1 de deeph. Através de uma função de verifica_rei sobre todos os movimentos possíveis. 
  • Compreensão aprimorada dos finais com peças menores com ou sem peões. 
  • Melhoria substancial do algoritmo Late move reductions e aplicação em todos os níveis de profundidade. Implementação de um novo algoritmo chamado early move reductions.

Ficha Técnica

Tipo: Motor de xadrez UCI (ou seja, um programa totalmente lógico, sem estrutura gráfica própria, necessitando de um programa de xadrez gráfico para poder interferir e visualizar. Pode ser conectado com qualquer programa de xadrez gráfico, como fritz, light chessbase , hiarcs, entre outros). 

Linguagem: C++ 

Tamanho: Cerca de 15 000 linhas de código na versão 1.0. Executável com aproximadamente 1,5 MB. Cerca de 330 000 linhas de código na presente versão. Executável com aproximadamente 6,5 MB.

Idealizador e implementador: Pedro Mourão Correia. 

Ano de criação: 2010. 

 

Algoritmos usados:  

Algoritmo Principal:

  • *Algoritmo base (equivalente a minimax): Algoritmo recursivo que para cada nó, encontra o filho mais forte (min ou max) de acordo com a perspetiva do lado a ser jogado. Este algoritmo Base foi desenhado por mim em 2011 na Ver#são Supra 2.0. Mais tarde percebi que já havia sido descoberto muito antes!


Algoritmos relacionados ao algoritmo base: 

  • Algoritmo alfa beta: quando Supra analisa os filhos de um determinado nó, ele interrompe a pesquisa sempre que beta <= alfa, pois mesmo que beta ainda possa diminuir mais, não importa, porque não será relevante para crescer alfa. Quando este corte ocorre, significa que o nó em questão não é melhor que o nó mais forte neste nível de profundidade e secção da árvore.
  • *wormhole: ​​Este algoritmo aplica a mesma condição que o algoritmo alfa beta, mas a estende a todos os níveis anteriores: Por exemplo, no nível deph=5: a condição em vez de "if (beta5 <= alfa4)" é "if (beta5) <= alfa4 || beta5 <= alfa2 || beta5 <= alfa0)". O ganho é avassalador!


Algoritmos de ordenação de dados para acelerar cortes no algoritmo alfa beta: 

  • Internal Iterative Deepening: Este algoritmo faz varreduras completas sucessivas com profundidade crescente a cada varredura. Isso permite agrupar melhor os nós em ordem (aprimorando o corte alfa beta) e gerenciar melhor o tempo gasto em pesquisa. 
  • Killer moves: Permite que Supra analise sempre primeiro o movimento que fez o corte alfa beta na seção anterior no mesmo nível de profundidade. Muitas vezes, mesmo em posições diferentes, o mesmo movimento da peça produz corte alfa beta, se anteriormente também produzia. 


Algoritmos de filtragem por condição: 

  • *filtro vertical: Filtro poderoso de variantes francamente ruins de deph>=3. 
  • *Filtro turbo: Permite que Supra use um método de pesquisa um pouco mais rápido por incrementos escalonados de alfa. 


Algoritmos de filtragem com pré-pesquisa com menor nível de profundidade: 


  • Null move pruning: O lado a mover não se move e deixa o adversário jogar: se o resultado desta análise (com deph = deph-2) ainda for ruim para o adversário existe um corte total neste nó. 
  • Late move reductions: Este algoritmo faz com que Supra  analise os primeiros filhos de um nó com profundidade normal. Se após a análise destes primeiros (cerca de 5) nós não houver corte alfa beta a pesquisa continua mas agora com uma profundidade menor. Este procedimento economiza muito tempo na pesquisa, pois o corte alfa beta normalmente não é produzido a não ser nos primeiros nós. Se um corte for produzido, Supra terá que reanalisar os nós restantes com profundidade normal. Supra usa uma versão mais radical deste algoritmo e só  varre novamente esse nó com deph normal se esse nó produziu corte alfa beta e não todos os nós indiscriminadamente. Em outras palavras, se o corte alfa beta com menor deph for produzido em um determinado nó (após o 5 inicial), então supra analisa esse nó com deph normal. Se não for confirmado o corte alfa beta, Supra analisa o próximo nó com menor deph e executa o mesmo procedimento. 
  • Principal Variation Search: Supra para cada nó começa com uma varredura com janela de tamanho muito reduzido (<1) se o valor beta não sair da janela a pesquisa com janela ilimitada não é realizada e Supra economiza muito tempo varrendo o ramo desse nó. 


*: algoritmos descobertos por mim ou descobertos independentemente por mim.

Feedback