Wyjaśnienie
Pogłębianie iteracyjne sprawia, że najpierw szuka z małym limitem, a następnie powtarza analizę z coraz większymi limitami. W szachach głębokość jest zwykle mierzona w półruchach, przy czym jeden półruch to jedno posunięcie jednej strony.
Początkowo wygląda to na marnowanie pracy, ponieważ pozycje blisko początku są odwiedzane wielokrotnie. Wcześniejsze iteracje dostarczają jednak cennych informacji: tymczasowo najlepszego ruchu, wariantu głównego, czyli linii uznawanej obecnie za najlepszą, zapisanych wyników oraz danych do . Rozpoczęcie następnej iteracji od obiecujących wyborów często pozwala wcześniej zatrzymać więcej gałęzi i kompensuje znaczną część powtórzonej pracy.
Najwyraźniejszą praktyczną korzyścią jest gospodarowanie czasem. Jeśli zegar zmusza silnik do zatrzymania się podczas głębszej iteracji, nadal pozostaje mu pełny wynik poprzedniej iteracji. Nie musi ryzykować wszystkiego w przeszukiwaniu, które może nie zostać ukończone.
Pogłębianie iteracyjne nie oznacza rozszerzania tylko jednej preferowanej linii. Każda iteracja ponownie rozpatruje pozycję początkową z większym limitem, choć techniki selektywne mogą przydzielać różne lokalne głębokości wewnątrz drzewa. Przesuwa również dalej, ale go nie usuwa.
Użycie i kontekst
Interfejsy często pokazują głębokość bieżącej iteracji, lecz sama większa liczba nie dowodzi, że dwa różne silniki wykonały porównywalną pracę.
Częste nieporozumienia
Bezużyteczne powtarzanie
Wcześniejsza praca dostarcza kolejności ruchów, wariantu głównego i zapisanych informacji z przeszukiwania, więc następna iteracja naprawdę nie zaczyna od zera.
Pogłębianie a selektywne rozszerzenie
Pogłębianie iteracyjne podnosi ogólny limit między przebiegami, natomiast rozszerzenie dodaje lokalne przeszukiwanie do określonych linii.
Źródła
- 1.Depth-first iterative-deepening: An optimal admissible tree search, Artificial Intelligence / Elsevier
- 2.Iterative Deepening, Chess Programming Wiki
- 3.search.cpp, Stockfish
