Já se perguntou como funciona o computador LocalChess decide o que jogar? Não é mágica e não está conectado a um servidor — todo o oponente roda na aba do seu navegador, no seu próprio processador, em cerca de 43 KB de JavaScript.

A maioria dos artigos sobre "como funcionam os motores de xadrez" descreve o Stockfish, um programa com redes neurais e uma avaliação de mil linhas. Este descreve um pequeno mecanismo sobre o qual você pode raciocinar de ponta a ponta, com os números reais que ele usa. Tudo abaixo é o que o código enviado faz, não uma simplificação.

As quatro etapas de um movimento

Cada vez que é a vez do computador, o mecanismo executa o mesmo pipeline:

  1. Gerar cada movimento legal na posição.
  2. Pesquisar à frente pelas posições resultantes, alternando os lados.
  3. Avaliar as posições tranquilas que alcança, marcando-os em centipeões.
  4. Escolha o movimento que leva à melhor pontuação que pode garantir.

As partes interessantes são como ele mantém os estágios 2 e 3 rápidos o suficiente para serem executados entre os movimentos sem congelar a página.

Etapa 1: Gerando movimentos legais

Antes de escolher, o motor precisa de suas opções: cada avanço de peão, salto de cavalo, captura, promoção, en passant e roque mover as regras permitem. Esta é a mesma lógica de regra que impede você fazendo um movimento ilegal, para que o motor nunca possa trapacear - ele está jogando exatamente de acordo com as restrições que você está.

Uma posição típica de meio-jogo tem 30-40 movimentos legais. Esse número é o motivo pelo qual pesquisar antecipadamente fica caro tão rapidamente: olhar quatro movimentos com 35 opções cada equivale a aproximadamente 1,5 milhão de posições se você verificar cada uma delas. As próximas duas seções são sobre não fazer isso.

Etapa 2: Avaliação — transformar uma posição em um número

O motor ganha posições em centipeões, onde 100 = um peão. A base é material:

Pawn   = 100      Rook  = 500
Knight = 320      Queen = 900
Bishop = 330      King  = not counted

Dois detalhes dignos de nota. O bispo vale 330 contra 320 do cavaleiro — uma vantagem deliberada de 10 centavos refletindo o alcance mais longo do bispo em posições abertas. É pequeno o suficiente para que o motor ainda troque um bispo por um cavalo quando a posição exigir, mas sem mais nada para separar duas opções, ele prefere manter o bispo. E o rei não tem nenhum valor material, porque nunca é capturado: perdê-lo é tratado separadamente como xeque-mate, marcado em 1.000.000, um número escolhido para diminuir qualquer total de material, de modo que nenhuma quantidade de material supere o mate.

Porém, o material por si só produziria um motor muito estúpido. Felizmente, deixaria os cavaleiros na borda e o seu rei no centro, porque isso não custa nada materialmente. Então, além do material, o motor adiciona um mesa quadrada - uma grade por peça de 64 pequenos bônus e penalidades que codifica o bom senso posicional:

  • Cavaleiros pontuação −50 nos cantos e +20 nos quatro quadrados centrais – um valor de 70 pontos

swing, quase um peão. Um cavaleiro na borda atinge quatro casas; um no centro chega a oito, e a mesa precifica exatamente isso.

  • Peões ficam mais valiosos à medida que avançam: +25 por ocupar d4 ou e4, aumentando para +50

em toda a sétima classificação, onde a promoção está a um passo de distância. Os quadrados d2 e e2 carregam um −20 penalidade, que é a maneira da máquina ser instruída a jogar com seus peões centrais em vez de deixá-los em casa.

  • Torres obtenha +10 na sétima fileira, codificando o antigo princípio de que uma torre na

o sétimo vale mais do que o material nele contido sugere.

  • O rei obtém +30 em b1 e g1 – os quadrados em que cai depois

roque - e penalidades de até -50 por subir no tabuleiro. É por isso que o motor trava cedo sem ser solicitado.

Há uma limitação honesta nessa última tabela. O motor usa a mesma mesa de rei no final do jogo e no meio do jogo, sem detecção de fase. Mas num final de jogo o conselho inverte-se: sem as damas, o rei é uma peça de combate e deve marchar em direção ao centro, o que é precisamente o que uma penalidade de -50 em d5 desencoraja. Assim, o motor mantém seu rei escondido muito depois de tê-lo ativado. Se você quiser vencer o Hard, atividade do rei no final do jogo é o lugar mais confiável para encontrar uma vantagem que não pode ver.

O resultado é um número único, positivo se o lado a ser movimentado for melhor. Esse número é exatamente o que impulsiona o barra de avaliação ao lado do tabuleiro.

Xeque-mate, impasse, repetição tripla e posições empatadas são casos especiais antes de qualquer uma dessas corridas: mate retorna a pontuação extrema e todo tipo de empate retorna exatamente 0.

Estágio 3: Avançando com negamax e alfa-beta

Avaliar apenas a posição atual é míope – isso pegaria um peão livre e daria mate no próximo movimento. Então o motor olha para frente usando negamax, uma forma compacta de minimax que explora uma simetria nítida: uma posição que pontua +3 para mim pontua -3 para você. Portanto, em vez de escrever lógicas "maximizar" e "minimizar" separadas, você escreve uma função e inverte o sinal em cada nível.

Por si só, isso ainda significa visitar todas as filiais. O motor evita a maioria deles com poda alfa-beta, que rastreia a melhor pontuação que cada lado já pode forçar. No momento em que um galho se mostra pior do que algo já garantido, o resto desse galho é irrelevante – o oponente nunca permitiria isso – então ele é abandonado sem ser revistado. Na prática, isso corta enormemente a árvore sem alterar o movimento escolhido: a resposta é idêntica a pesquisar tudo, só que muito mais rápido.

Quiescência: não parar no meio da negociação

Há uma armadilha clássica aqui chamada efeito horizonte. Se a busca parar exatamente em quatro movimentos e o movimento quatro for sua rainha captura um peão defendido, o motor vê "+1 peão" e considera a posição boa - sem nunca perceber que no lance cinco a rainha é recapturada.

A correção é pesquisa de quiescência. Quando a busca principal fica sem profundidade, ela não para de repente; continua, mas olha para captura apenas, até atingir uma posição tranquila onde nada esteja pendurado. É por isso que o mecanismo não deixa peças penduradas na borda da janela de pesquisa e é o único recurso que mais separa um bot que parece competente de outro que parece aleatório.

Aprofundamento iterativo e orçamento de tempo

O motor não salta direto para toda a sua profundidade. Ele pesquisa a profundidade 1, depois a profundidade 2 e depois a 3, mantendo o melhor movimento encontrado até o momento. Isso parece um desperdício - você refaz o trabalho a cada passagem - mas passagens rasas são muito mais baratas que as profundas que a sobrecarga é pequena e compra algo valioso: o motor sempre tem um movimento legal e sensato pronto.

Isso é importante porque cada movimento também tem um prazo limite. Se uma busca explodir – uma posição tática com longas cadeias de captura é a causa usual – o prazo é acionado, a busca parcial é descartada e o mecanismo executa o melhor movimento a partir da última profundidade finalizada. A página nunca congela esperando pelo bot, e é por isso que existe o prazo.

O que realmente muda entre Fácil, Médio e Difícil

É aqui que a maioria dos sites é vaga. As configurações exatas:

| Nível | Profundidade de pesquisa | Orçamento de tempo por movimento | Chance de movimento aleatório | | --- | --- | --- | --- | | Fácil | 2 camadas | 250ms | 35% | | Médio | 3 camadas | 500ms | nenhum | | Difícil | 4 camadas | 1100m | nenhum |

Uma "dobra" é o movimento de um lado, então a profundidade 4 do Hard significa que ele vê dois de seus próprios movimentos e dois dos seus - além das cadeias de captura que a quiescência segue após esse ponto.

Vale a pena insistir na coluna Fácil. 35% das vezes, Easy ignora totalmente sua busca e executa um movimento legal aleatório. Não se trata de uma avaliação enfraquecida ou de um plano mais superficial; é uma jogada genuinamente boa cerca de dois terços das vezes e um cara ou coroa no resto. Essa é uma escolha de design deliberada para iniciantes: significa que o Easy pendurará as peças de uma forma que um mecanismo meramente superficial nunca faria, dando ao novo jogador chances reais de punir um erro.

Também significa uma coisa que vale a pena saber: se Easy tocar algo desconcertante, pode não haver nenhuma ideia por trás disso. Não gaste cinco minutos procurando o plano. Contra Médio e Difícil, cada movimento é o resultado de uma busca real, então um movimento de aparência estranha geralmente tem sentido.

Por que funciona dessa maneira

Conhecer os detalhes internos lhe dirá como jogar, e esse é realmente o ponto:

  • Não executa movimentos de livro. Existe uma pequena tabela de aberturas no código, mas ela existe

apenas para nome a abertura que você jogou e rotular os primeiros movimentos como "livro" na análise - o mecanismo nunca a consulta ao escolher. Cada movimento do movimento um é pesquisado do zero, de modo que ele reproduz aberturas razoáveis, mas pouco livrescas, e abandona a teoria quase imediatamente.

  • É melhor tático do que estrategista. Quatro camadas mais quiescência pegam mais curto

táticas, mas um plano que compensa em dez movimentos é totalmente invisível para ele. As posições fechadas e lentas são onde ele é mais fraco.

  • Não cairá em armadilhas profundas, mas entrará em dificuldades de longo prazo. Se a sua ideia

precisa de três movimentos para funcionar, ele verá. Se precisar de doze, não vai.

Há um tratamento estratégico mais completo disso em como jogar xadrez contra o computador.

O mesmo mecanismo analisa seu jogo

Quando você bate Analisar jogo após uma correspondência, é o mesmo código sendo executado novamente - não um analisador diferente e mais forte. Para cada posição, ele procura duas vezes: uma vez pelo movimento que você realmente fez, uma vez pelo melhor movimento que pode encontrar, ambos na mesma profundidade e ambos usando quiescência nas folhas. A diferença entre essas duas pontuações é a perda de centipeões nesse movimento.

Como ambas as pesquisas ocorrem na mesma profundidade real, os números são internamente consistentes – você está comparando iguais com iguais. Eles não são julgamentos absolutos do tipo Stockfish, mas para detectar onde um jogo virou, eles são confiáveis. Se a pesquisa for interrompida dentro do prazo, o resultado parcial será descartado em vez de relatado, de modo que a análise se degradará para uma profundidade mais rasa, mas ainda exata, em vez de silenciosamente gerar ruído.

Experimente você mesmo

Jogue a mesma abertura contra Fácil e depois Difícil e observe como as respostas ficam mais nítidas. Então corra Analisar jogo em ambos e compare as curvas de avaliação - o jogo Fácil mostrará penhascos repentinos onde o dado de movimento aleatório falhou, enquanto o jogo Difícil mostra uma linha mais suave com perdas concentradas em momentos táticos genuínos.

Tudo isso roda no seu dispositivo, e é também por isso que continua trabalhando sem conexão com a internet.