Os mecanismos de xadrez para computador melhoraram desde que o Deep Blue venceu Kasparov em 1997.
Os algoritmos melhoraram ou as melhorias foram principalmente devido aos mesmos algoritmos que rodavam mais rapidamente, graças ao hardware mais rápido, etc.?
No primeiro caso, essas melhorias algorítmicas são públicas?
E se sim, quais foram as melhorias? Onde posso ler sobre eles?
Respostas:
Talvez você possa dar uma olhada no TalkChess , um fórum dedicado ao xadrez do computador. Encontrei um tópico recente que pode ser interessante para você: Progresso em 30 anos em quatro intervalos de 7-8 anos
Algumas partidas entre os (antigos) principais mecanismos são disputadas no mesmo hardware . O teste sugere que, nos últimos anos (2002-2017), o ganho é obtido principalmente por melhorias de software. No teste, Stockfish (2017) marcou impressionante 94/100 contra RobboLito (2009), enquanto RobboLito, por sua vez, esmagou Shredder (2002) com 92/100.
Uma observação importante: como a computação paralela não é implementada nos mecanismos mais antigos, o teste foi realizado em um único núcleo. Como resultado, o ganho de hardware por máquinas paralelas não é medido. Por outro lado, você poderia argumentar que a computação paralela também é um ganho de software: não é fácil projetar e implementar uma paralelização eficiente e bem dimensionada para o algoritmo de pesquisa.
O mecanismo do Stockfish é de código aberto, portanto as melhorias algorítmicas são públicas. Muita documentação pode ser encontrada em https://chessprogramming.wikispaces.com
fonte
Não posso falar pelo algoritmo usado para o Deep Blue, mas vou tentar explicar as melhorias na programação do xadrez. A velocidade é a maior melhoria. A Deep Blue usou computadores dedicados com vários processadores, portanto, uma comparação não é realmente possível.
https://chessprogramming.wikispaces.com/ é uma ótima fonte, mas é difícil de navegar.
Existem três funções principais que são aprimoradas para melhorar um mecanismo de xadrez: as funções de avaliação, geração de movimento e pesquisa.
A avaliação é a mais difícil de programar, pois há muitas exceções às regras. Com o espaço do disco rígido ficando mais barato, a função eval permite que mais exceções sejam avaliadas.
A geração de movimentos, juntamente com a realização e a remoção de movimentos, consome muita memória porque ela precisa ser pré-formada tantas vezes. As funções de geração mais comuns são caixa de correio, painel de bits, 0x88, 8x8, placas estendidas (10x10, 10x12) e uma matriz / tabela de movimentação predeterminada (* eu uso uma tabela de movimentação indexada). A opinião atual é de que os painéis de bit são mais rápidos e o uso de bitboards mágicos acelera isso em até 30%. O Dr. Robert Hyatt, professor e criador do mecanismo de xadrez cratfy, afirma que não há aumento significativo de velocidade.
A função de pesquisa inicial eram as funções min-max primitivas. Basicamente, você tentava maximizar a pontuação do lado para se mover e minimizar a pontuação do oponente. Alpha-Beta foi a primeira melhoria. Eles reduziram o número de movimentos pesquisados pela tabela de transposição, valores de corte, janelas de aspiração e heurísticas do histórico. Essas são pesquisas profundas. Há também a busca de aprofundamento iterativo interno, que tenta buscar os "melhores" movimentos, a mais profunda esperança de que a busca por outros movimentos seja infrutífera.
NOTA: Minha tabela de índice. GNUChess e Jester usam uma matriz de índice para gerar seus movimentos. Eles inicializam o mecanismo preenchendo a matriz com possíveis movimentos. Pegue as seis peças e calcule as jogadas legais disponíveis em cada quadrado. Então cada peça tinha uma matriz [64] [8]. Eu peguei essa ideia e a comprimi em dois índices e uma tabela. A tabela contém um valor que informa se os 16 movimentos são possíveis, um índice mantém o deslocamento do movimento e o outro mantém a máscara.
deslocamento [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};
mask [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ...};
Então, a geração de um movimento deslizante é tão fácil quanto procurar a validade de sua máscara em suas compensações permitidas contra a tabela de movimentos.
fonte
Every time that a new eval concept in included into a chess engine, more code, and therefore more HD space is required.
As funções de avaliação da placa geralmente são projetadas para caber no cache da CPU. Cache da CPU << RAM << HD. O tamanho HD não faz diferença.Obviamente, sim um pouco.
Menor nit: se os algoritmos melhoraram, então o software está melhorando, então não há "ou".
A Lei de Moore nos diz que a velocidade do processador dobrará aproximadamente a cada 18 meses. Isso significa que dobrou cerca de 13 vezes em 20 anos. Isso torna os processadores modernos em algum lugar na região 8.000 vezes mais rápidos. Portanto, de longe, a maior melhoria no desempenho do motor se deve ao hardware mais rápido.
Bem, não foi o primeiro, foi o último. No entanto, as melhorias são principalmente de código aberto e visíveis livremente, baixando as fontes de mecanismos como o Stockfish . Talvez também valha a pena fornecer o link geral de download do Stockfish, pois o link do código-fonte específico provavelmente expirará quando a versão 9 for lançada.
fonte
That means it has doubled roughly 13 times in 20 years.
Eu acho que você está citando mal a Lei de Moore. Não diz nada sobre a velocidade do processador. De fato, não dobrou há um tempo.hardware and software
Eu quis dizer software como na implementação do algoritmo (ASM vs C ++), mas posso ver como é confuso. Fixo.É tudo sobre algoritmos.
fonte
Isenção de responsabilidade: não é um especialista.
Os algoritmos ficaram melhores e os melhores mecanismos atuais de 1995 (lembre-se que o Deep Blue era 1999) venceram Kasparov com facilidade. Pelo que entendi, existem dois aspectos dos algoritmos:
Pesquisar . Se, por exemplo, eu levar sua rainha com minha rainha, um oponente humano automaticamente procurará primeiro se recuperar. Para um computador, no entanto, ele avaliará todas as respostas possíveis ao QxQ. Na maioria das vezes, isso desperdiça poder de processamento. Um bom algoritmo de pesquisa reduz todos esses "ramos", pois eles são irrelevantes de qualquer maneira.
O algoritmo de pesquisa padrão é a poda alfa-beta e foi usado nos primeiros computadores de xadrez. Não sei se o Deep Blue usou poda alfa-beta, mas os motores modernos não. Como resultado, suas buscas são "inseguras" - elas podem perder, por exemplo, que alguns movimentos além de recuperar a rainha teriam vencido o jogo. No entanto, é raro que isso aconteça e, em troca, eles aumentam muito a profundidade. ("Profundidade" é um termo técnico para a profundidade em que o mecanismo pesquisa, por exemplo, um mecanismo que pesquisa em profundidade 30 provavelmente supera um que somente busca em profundidade 20, sendo todas as outras coisas iguais.
Avaliação . Este é o outro ponto do código do mecanismo. Dada uma posição específica, é melhor para branco, preto ou igual? Isso pode envolver todos os tipos de funções, por exemplo
Os motores de hoje avaliam posições muito melhores que o Deep Blue.
Quanto ao fato de os algoritmos serem públicos, o Stockfish é atualmente o mecanismo mais forte do mundo e é de código aberto. Você pode fazer o download do código você mesmo no Github .
fonte