- Não existe nenhuma posição com mais lances possíveis do que a posição de xadrez de 218 lances publicada por Nenad Petrović em 1964
- Como é inviável, na prática, explorar todas as posições, o limite foi provado com otimização matemática e técnicas de modelagem por computador
- O espaço de busca foi reduzido de forma eficaz com a remoção de peças desnecessárias, a permissão de posicionamento parcial de peças e a simplificação do roque, entre outros recursos
- Por fim, foi confirmado com a ferramenta de otimização Gurobi que 218 lances é o máximo, além de validar adicionalmente recordes como 144 lances (sem promoções)
- Com este estudo, desenvolvedores de engines de xadrez e de compressão podem eliminar a incerteza sobre o limite máximo de lances
Introdução: a controvérsia da posição de xadrez de 218 lances
Desde que o grande mestre de composição de xadrez Nenad Petrović publicou, em 1964, uma posição com 218 lances possíveis, várias tentativas buscaram quebrar esse recorde. O autor, como cientista da computação, quis encerrar essa questão analisando as posições por meio de computador. Existem cerca de 4,8 × 10^44 posições de xadrez alcançáveis, mas uma busca dessa escala é inviável na prática.
Introdução da otimização matemática
Minimização de peças e combinações desnecessárias
- Há poucos casos em que peças pretas adicionais aumentam o número de lances possíveis
- Como quando permitem captura por um peão branco ou evitam uma situação de xeque ao rei adversário
- A maior parte das peças pretas pode ser removida sem afetar o número máximo de lances
- Desde que a quantidade de peças permitida seja respeitada, é possível substituir peças pretas por peças mais fracas ou ajustar o posicionamento sob algumas restrições, como cravadas
- No caso das peças brancas, ocorre o contrário: substituir tudo por peças fortes como rainhas pode gerar posições ilegais, então é necessário um ajuste cuidadoso
Situações de xeque e limite de lances
- Como uma posição em que o rei preto está em xeque não é legal, ela não precisa ser considerada
- Quando o rei branco está em xeque, seus movimentos ficam severamente limitados (no máximo 120 lances), tornando impossível chegar a 218
- Portanto, a busca pode se restringir a posições sem xeque
Posicionamento parcial de peças e modelagem matemática
Para reduzir a complexidade combinatória, a abordagem usa um modelo com posicionamento parcial (fractional) de peças, movimentos e algumas regras de xadrez relaxadas
- Por exemplo, uma peça pode existir com 27,3% de probabilidade em e4 e com 72,7% em outra casa
- Dessa forma, o problema foi implementado como programação linear inteira (ILP, Integer Linear Programming) em ferramentas modernas de otimização, como o Gurobi
- No início, surgiram limites de memória e tempo (falta de memória após cerca de 55 mil segundos)
- Para simplificar o espaço de busca, foram aplicadas medidas adicionais, como simplificação das regras de roque, ignorar xeque, ignorar cravadas e simplificar as condições de en passant
Otimização e conclusão
Por fim, após melhorar o modelo com a introdução de restrições auxiliares para bloquear buscas combinatórias desnecessárias, a otimização foi concluída com o programa Gurobi
- O limite superior foi sendo reduzido de 305 lances → 271,67 lances → 218 lances
- Foi confirmado que apenas 12 posições representativas com 218 lances possíveis são alcançáveis
- Também foi demonstrado, por meio de proof games, que essas posições são legais e podem ser alcançadas sem dificuldade
Além disso, também foram validados o máximo de 144 lances sem promoção, 288 lances em posições ilegais e o recorde de 271 lances em posições legais inalcançáveis
Resultados e significado
- Graças a este estudo, desenvolvedores de engines de xadrez e pesquisadores de algoritmos de compressão passaram a ter confiança de que um limite de 256 lances é suficiente para projeto de memória e afins
- Foi provado matematicamente que não existe posição com caminho legal que permita mais de 218 lances possíveis
Resumo do FAQ
- Uma partida de xadrez pode ser mais longa do que 218 lances, mas este estudo trata do número máximo de escolhas possíveis em um único turno
- Se algumas posições parecerem inalcançáveis, menciona-se que há vários caminhos possíveis, como casos em que o lance anterior termina em captura
- O método aplica uma técnica de oráculo matemático que elimina rapidamente combinações absolutamente impossíveis em um espaço combinatório gigantesco
- O código usado e até a validade matemática das evidências produzidas foram publicados para garantir confiabilidade
Próximas tarefas e sugestões de pesquisa adicional
Aplicando essa técnica, é possível atacar diversos outros problemas de xadrez, como máximo de capturas, máximo de stalemates, máximo de xeques, máximo de xeque-mates e máximo de mates em 2 lances. Ainda assim, em alguns casos, pode ser necessário um algoritmo de otimização criativo separado.
Conclusão
- 218 lances é o máximo oficial de lances possíveis em um único turno em uma posição de xadrez
- Em termos práticos, softwares de xadrez e pesquisadores podem projetar suas estruturas com base em 218 (ou 256)
- O código relacionado e os resultados da otimização foram publicados no GitHub
Referência
- Inclui links para proof games e posições, como a posição de 218 lances de Nenad Petrović e a de 144 lances (sem promoção) de Jenő Bán
- Mais detalhes e o código estão disponíveis no repositório no GitHub
1 comentários
Comentários no Hacker News
No Lichess, o nível de jogo em variantes como 960 ou Crazyhouse é muito mais alto do que no Chess.com
É literalmente absurdamente bom. Recomendo apoiar, se puder
O interessante é que solucionadores de programação linear inteira mista (MILP) já dão suporte a esse tipo de tratamento. Em termos técnicos, isso é chamado de
row generation, normalmente usado quando se escreve o problema em forma de matriz, na qual as linhas são restrições e as colunas são variáveisAdicionar novas linhas (dinamicamente) é o mesmo que introduzir restrições apenas quando houver violação
Esse método é usado principalmente para resolver o problema do caixeiro-viajante (Traveling Salesman Problem)
(Por sinal, a Wikipédia tem Column generation, mas não
row generation)Relaxar ou omitir regras do xadrez também afetou a escolha das variáveis. Antes de entrar na modelagem matemática, tentei coisas como
lazy constraints, mas não houve melhora significativa de velocidade. Por exemplo, só de deixar de considerar se o rei branco estava em xeque já houve muita simplificaçãolazy constraints(explicação relacionada)(Premissa da discussão: o Gurobi não tem bugs, e também não há bugs na definição do problema nem na implementação do autor)
Quero entender se há alguma possibilidade de o Gurobi estar preso em um máximo local, ou se ele realmente provou uma solução ótima global
Se o Gurobi e meu código estiverem funcionando como pretendido, e não houver erros lógicos no processo de simplificação do modelo de xadrez, então o meu resultado prova que "o valor máximo de lances legais possíveis em posições de xadrez alcançáveis a partir da posição inicial por uma sequência legal de lances é 218 como limite superior e inferior". Em outras palavras, o Gurobi provou, por meio de limites sobre todo o espaço de busca, que "não existe caso melhor que esse"
Do ponto de vista computacional, o espaço completo do problema é mais importante, porque todos os casos precisam ser "computados" antes mesmo de se determinar se são legais ou não. Não existe uma maneira simples de percorrer apenas posições legais
Um conhecido me avisou que meu artigo estava sendo discutido aqui
Peço desculpas por ter escolhido um título menos claro; espero que agora esteja mais claro. Obrigado pelo feedback e pelas palavras gentis
Se alguém tiver perguntas sobre provas de fatos semelhantes no xadrez, também posso responder ^^
Obrigado
Tobi
Atualização: o artigo diz que existem cerca de 8.7x10^45 posições de xadrez alcançáveis, e https://github.com/lechmazur/ChessCounter usa esse número como limite superior
(isso corresponde a cerca de 153 bits)
log2(4.8x10^44)dá 149 bitsMas, para decodificar de forma eficiente, seriam necessários 153 bits, usando o teto de
log2do número recomendado pelo projeto ChessPositionRanking (8726713169886222032347729969256422370854716254). O ChessCounter não fornece código de decodificação eficienteO mesmo vale para torre/rainha/cavalo, mas como podem ter sido capturados, são necessários 65 estados possíveis para cada uma dessas 5 peças
Os bispos só podem estar em metade dessas casas, então são 33 estados para cada
Peões têm 4 promoções possíveis, podem ter sido capturados e, dependendo do caso, ficam em algo como 20 a 30 posições; no geral, cerca de 290 estados por peão
Isso dá cerca de 112 bits para representar o estado do tabuleiro de uma cor de peças; arredondando, 224 bits para ambos os lados
En passant e restrições de roque (como roque indisponível) não exigem bits extras depois do arredondamento, pois isso só adiciona alguns estados a certas peças
Esse provavelmente é o formato fixo mais comprimido para representar um tabuleiro
Em uma representação esparsa, como os dois reis sempre existem, você poderia representar as peças vivas com um número decimal de n dígitos e posições com n+2 números de 64 bits, acrescentando um pouco de informação extra para roque, en passant etc. Em média, se metade das peças tiver desaparecido, isso dá cerca de 180 bits para representar o estado do tabuleiro
O histórico de lances também exigiria cerca de 10 bits por lance (um par preto/branco; um ply são 5 bits), então daria para guardar algo como 18 lances. Isso é um pouco menor do que o ponto médio da duração média de uma partida de xadrez
Para comprimir mais, provavelmente só implementando um dicionário gigantesco
Então, uma codificação de tamanho fixo para o tabuleiro inteiro seria
64*4=256bits = 32 bytesOu, em uma representação de tamanho variável apenas para as peças, usando 6 bits para o índice de cada uma das 64 casas, seriam
quantidade*10bitsPor exemplo, a posição inicial seria
32*10=320bits = 40 bytesrestrictedde8.7e45no GitHub restringe alguns padrões de promoção de peões5.68e50emgeneralé o verdadeiro limite superior e permite todas as promoções possíveisEsse peão só tem uma jogada possível (capturar o cavalo ao lado). Se ele não estivesse lá, quatro rainhas brancas e um cavalo poderiam entrar em b2. Só que, na verdade, esses lances não podem existir porque o rei preto já estaria em xeque-mate
É tentador mover a rainha em e5 para outro lugar, de forma que não seja xeque-mate imediato, e assim liberar mais a casa b2
P.S.: parece que esse peão precisa sobreviver ali para evitar stalemate
Se fosse a vez das pretas, ele também não poderia se mover, porque o rei está pinado pela rainha branca em e5. Sem esse pin, ele poderia fazer 4 lances. Promoção menor também seria possível
A posição é White to move. Mesmo que o peão em b2 não estivesse pinando o rei por causa da rainha branca, o peão preto ainda não poderia se mover
O peão em b2 é necessário para proteger o rei preto contra xeque. Caso contrário, a própria posição não seria legal
Eu realmente conferi tudo com muito cuidado, então podem ficar tranquilos: não foi possível construir mais de 218 lances para as brancas. Ainda assim, estou surpreso e grato por tanta gente ter se interessado pelo meu artigo, haha ^^
Parece que daria para aumentar o número de lances trocando um dos peões pretos por um cavalo branco, mas os dois cavalos já existem, e todos os peões já foram promovidos, então isso não é possível. (Se trocar os dois peões, as pretas não conseguem mais alcançar esse estado no turno anterior)
Você leu o artigo inteiro?
Não é 271, e sim 271.666... :) Esse valor vem de um modelo em que todas as decisões (0 ou 1) são relaxadas para valores contínuos (
0.0~1.0e qualquer valor intermediário). Ou seja, você pode assumir que uma peça existe em quantidade 0.23. A chance de um determinado lance ser possível também pode ser tratada como 0.843 etc.Usando esse tipo de "mágica negra", o cálculo fica muito mais rápido e pode produzir um número de lances maior do que o realmente existente.
Assim, esse método serve para descartar rapidamente subespaços ruins entre as possibilidades. Sem esse tipo de técnica, seria impossível examinar exaustivamente todo o espaço de busca
Aliás, acho que você entendeu errado ao achar que os peões pretos estão em suas posições iniciais. Na verdade, o peão preto avançou até o outro lado do tabuleiro (campo das brancas)