O que é o Pikafish?
O Pikafish é um motor de Xiangqi gratuito e de código aberto: um programa que recebe uma posição e devolve o lance que considera melhor, acompanhado de uma avaliação numérica sobre quem está melhor. Não tem interface própria. É um núcleo de cálculo que dialoga com um programa gráfico através de comandos de texto, tal como um motor fica debaixo do capô de um carro. Essa separação é deliberada: ao separar motor e interface, o mesmo núcleo pode alimentar um tabuleiro de análise no computador, uma aplicação de celular ou um site. O Pikafish tornou-se o motor de referência do mundo do Xiangqi pelas mesmas razões que o Stockfish no xadrez: é mais forte do que as alternativas comerciais, não custa nada e o código-fonte é público, portanto qualquer pessoa pode verificar o que ele faz. Se procura o panorama de como os computadores passaram a dominar o Xiangqi, a nossa visão geral dos motores de IA no Xiangqi conta a história completa; este artigo concentra-se no Pikafish.
De onde vem o Pikafish? A linhagem Stockfish
O Pikafish é um derivado do Stockfish, o motor de xadrez de código aberto que domina o xadrez informático há mais de uma década. Em vez de reconstruir um algoritmo de pesquisa de raiz, os autores pegaram na pesquisa já comprovada do Stockfish — a parte que decide que ramos da árvore de lances vale a pena explorar e quais podem ser podados sem risco — e adaptaram-na a um jogo com tabuleiro 9x10, rio, palácio e peças que não se comportam em nada como as suas equivalentes do xadrez. A avaliação, essa, teve de ser refeita por completo: saber que uma torre é potente numa coluna aberta nada diz sobre quanto vale um canhão que precisa de um anteparo para capturar. Essa herança explica muita coisa: a linguagem de comandos, as opções de configuração, as convenções de publicação e a licença vêm todas da família Stockfish. É distribuído sob GPL v3, ou seja, livre de usar e modificar, mas qualquer trabalho derivado tem de ser publicado nos mesmos termos.
Qual é a força real do Pikafish?
Enorme — tanta que a pergunta sobre como vencê-lo já não tem resposta séria. Em hardware moderno comum e com alguns segundos por lance, o Pikafish joga muito acima do nível dos Grandes Mestres humanos mais fortes. Não comete erros grosseiros, nunca se cansa, calcula sequências forçadas mais fundo do que qualquer pessoa consegue segurar na cabeça e avalia posições calmas com uma constância que ninguém mantém ao longo de uma partida longa. A comparação interessante não é humano contra motor, mas para que serve o motor. A um jogador de 1400 não adianta nada ouvir que a posição está dois pontos pior; o que lhe adianta é perceber que lance criou o problema. Por isso a força bruta conta muito menos do que o uso que se lhe dá. O nosso artigo sobre o Elo no Xiangqi põe as escalas humanas em perspetiva e mostra que a distância entre um jogador de clube e um Grande Mestre é menor do que a que separa o Grande Mestre do motor.
O que é o NNUE e porque é que o Pikafish precisa de um arquivo à parte?
NNUE designa uma rede neuronal de atualização eficiente, e é a parte do Pikafish que julga as posições. Os motores clássicos avaliavam com regras escritas à mão: uma torre vale tanto, um soldado protegido depois do rio vale tanto, um general exposto desconta pontos. O NNUE substitui essa tabela manual por uma pequena rede neuronal treinada em milhões de posições, capaz de captar subtilezas que ninguém conseguiu formular como regra. A chave está na palavra eficiente: a rede é desenhada para que, quando uma única peça se move, apenas uma pequena parte do cálculo tenha de ser refeita — é isso que a torna rápida o suficiente para correr milhões de vezes por segundo. Na prática, essa rede vive num arquivo separado, normalmente com um nome do género pikafish.nnue. O executável do motor, por si só, não a contém. É de longe a maior fonte de confusão para quem começa, e o tema da secção seguinte.
Como descarregar e executar o Pikafish?
O Pikafish é distribuído como binário compilado no seu repositório público, github.com/official-pikafish/Pikafish, com versões para Windows, Linux, macOS e Android. As publicações costumam oferecer várias variantes da mesma versão, nomeadas segundo conjuntos de instruções do processador — avx2, bmi2, vnni e afins. Não são motores diferentes: é o mesmo programa compilado para aproveitar funcionalidades de processador mais ou menos recentes. Escolha a mais recente que a sua máquina suporte; se recusar arrancar com um erro de instrução ilegal, desça para uma compilação mais conservadora. O arquivo da publicação já inclui a rede NNUE, portanto um descarregamento normal não exige nenhum passo extra. Só precisa de ir buscar a rede se compilar a partir do código-fonte: nesse caso ela vive no repositório Networks e fica ao lado do binário. A falha também não é subtil: um motor que não consegue carregar a sua rede imprime o caminho que tentou e o URL de descarregamento, e termina — nunca continua a jogar mal. E lembre-se de que o binário não tem janela nem tabuleiro: precisa de uma interface gráfica que fale o mesmo protocolo para o usar de verdade.
Como configurar bem o Pikafish?
Três definições concentram quase toda a diferença prática. Threads indica quantos núcleos do processador o motor deve usar. Mais threads significam mais posições examinadas por segundo, mas deixar pelo menos um núcleo livre mantém a máquina responsiva; definir acima do número real de núcleos apenas abranda tudo. Hash é a memória que o motor dedica a recordar posições já avaliadas, em megabytes. A menos, recalcula as mesmas coisas indefinidamente; a mais, compete com o resto do sistema. Algumas centenas de megabytes são confortáveis para analisar num computador normal. A terceira definição não é bem uma definição: é quanto tempo o deixa pensar. A força cresce com o tempo, mas com rendimentos decrescentes — o salto de um segundo para dez é enorme, o de dez para cem bem menor. Para estudar as suas próprias partidas, alguns segundos por posição chegam e sobram. Os mesmos compromissos, aplicados a adversários em vez de análise, são os que descrevemos em como equilibramos a dificuldade dos bots.
Como ler o que o Pikafish diz?
O motor produz um fluxo contínuo de linhas, e três números interessam. A avaliação é expressa em equivalentes de peão do ponto de vista de quem tem o lance: um valor positivo significa que quem joga está melhor, e um valor próximo de zero indica equilíbrio. Algo como +1 corresponde grosso modo à vantagem de um soldado são a mais, não a uma partida ganha. A profundidade é o número de meios-lances já pesquisados; uma avaliação alta a pouca profundidade merece muito menos confiança do que uma modesta a grande profundidade. A variante principal é a sequência de lances que o motor considera melhor para ambos os lados, e é de longe a parte mais instrutiva: a avaliação diz-lhe que algo está mal, a variante diz-lhe porquê. Os principiantes leem só o número; quem progride lê a linha. Se a notação dessas linhas lhe for estranha, o nosso guia da notação no Xiangqi explica os sistemas em uso.
Usar um motor para evoluir — e onde está o limite
Um motor é uma máquina de respostas implacável, o que faz dele simultaneamente o melhor e o pior parceiro de estudo. O método produtivo é analisar as suas próprias partidas depois de as jogar, e pensar antes de espreitar: forme o seu próprio juízo sobre onde a partida virou e só depois confirme. Quando o motor discorda de si, a discordância é a lição. O método improdutivo é percorrer a partida a ver a barra de avaliação oscilar: parece estudo e não ensina nada. Abaixo de cerca de 2000, a maioria das derrotas vem de táticas que consegue encontrar sozinho com mais disciplina, e não de subtilezas que só um motor revela — o nosso guia de progressão no Xiangqi propõe um caminho mais eficaz. E o óbvio, que mesmo assim convém dizer: usar assistência de motor durante uma partida ao vivo contra outra pessoa é batota, em qualquer plataforma séria e em qualquer federação. Os motores são para depois da partida, ou para posições que ninguém está a jogar.
Usar o Pikafish sem instalar nada
Se tudo o que quer é um motor forte a analisar as suas posições, não precisa de instalar rigorosamente nada. O Xiangqi One corre o Pikafish diretamente, de forma nativa nas aplicações móveis e compilado para WebAssembly no navegador, pelo que a análise acontece no seu próprio dispositivo, sem instalação, sem arquivo de rede para descarregar e sem configuração. Abre um tabuleiro, percorre uma partida e obtém o mesmo juízo do motor descrito acima, à profundidade que a sua paciência permitir. Os bots contra os quais joga usam o mesmo núcleo, deliberadamente contido para produzir adversários num nível que valha mesmo a pena enfrentar — o raciocínio está em como equilibramos a dificuldade dos bots. Para analisar uma posição ou jogar contra um adversário calibrado agora mesmo, abra o Xiangqi One. Para o panorama mais amplo dos motores e de como os computadores mudaram o jogo, continue com a nossa visão geral dos motores de IA no Xiangqi ou percorra a categoria motores.



