Explicação
O aprofundamento iterativo faz um buscar primeiro com um limite pequeno e depois repetir a análise com limites progressivamente maiores. No xadrez, a profundidade costuma ser medida em plies, sendo um ply um lance de apenas um dos lados.
À primeira vista, isso parece desperdiçar trabalho, porque as posições próximas do início são visitadas várias vezes. No entanto, as iterações anteriores produzem informações valiosas: um melhor lance provisório, a variante principal, ou seja, a linha considerada melhor naquele momento, resultados armazenados e dados para a . Buscar primeiro as opções promissoras na iteração seguinte costuma permitir que mais ramos sejam interrompidos mais cedo e compensa boa parte do trabalho repetido.
Seu benefício prático mais evidente é o controle do tempo. Se o relógio obrigar o motor a parar durante uma iteração mais profunda, ele ainda terá o resultado completo da iteração anterior. Não precisa arriscar tudo em uma busca que talvez fique inconclusa.
Aprofundamento iterativo não significa estender apenas uma linha favorita. Cada iteração volta a examinar a posição inicial com um limite maior, embora técnicas seletivas possam atribuir profundidades locais diferentes dentro da árvore. Ele também desloca o para mais longe, sem eliminá-lo.
Uso e contexto
As interfaces costumam exibir a profundidade da iteração atual, mas um número maior, por si só, não prova que dois motores diferentes realizaram trabalhos comparáveis.
Confusões frequentes
Repetição inútil
O trabalho anterior fornece a ordem dos lances, uma variante principal e informações de busca armazenadas, portanto a iteração seguinte não começa realmente do zero.
Aprofundamento e extensão seletiva
O aprofundamento iterativo eleva o limite global entre as passagens; uma extensão acrescenta busca local a linhas específicas.
Fontes
- 1.Depth-first iterative-deepening: An optimal admissible tree search, Artificial Intelligence / Elsevier
- 2.Iterative Deepening, Chess Programming Wiki
- 3.search.cpp, Stockfish
