Wyjaśnienie
Perft przemierza drzewo legalnych ruchów z danej pozycji i zlicza każdą sekwencję osiągającą dokładnie określoną głębokość. Głębokość jeden oznacza policzenie dostępnych teraz legalnych ruchów. Głębokość dwa obejmuje każdą legalną odpowiedź i ten sam wzorzec jest kontynuowany. Każda sekwencja jest liczona osobno, nawet jeśli dwie różne sekwencje prowadzą do tego samego stanu szachownicy. Wynik jest powtarzalną liczbą dla danej pozycji i głębokości.
Głównym celem jest sprawdzenie generatora ruchów programu. Jeśli suma różni się od zaufanego wyniku wzorcowego, błędna jest jakaś reguła albo aktualizacja pozycji. Odmiana zwana divide podaje osobną sumę częściową dla każdego ruchu początkowego, pomagając programiście znaleźć gałąź, w której zaczyna się rozbieżność.
Perft szczególnie dobrze ujawnia subtelne błędy związane z szachem, biciem w przelocie, czyli specjalnym biciem pionem, promocjami oraz , czyli szczególnym wspólnym ruchem króla i wieży. Może też wykazać, że po cofnięciu ruchu program nieprawidłowo odtwarza stronę na posunięciu, prawa do roszady albo pole docelowe bicia w przelocie.
Perft nie ocenia pozycji, nie wybiera najlepszego ruchu ani nie przycina gałęzi. Zaliczenie testu dowodzi zgodności ze sprawdzonymi liczbami legalnych ruchów, lecz nie świadczy o tym, że gra dobrze w szachy. Choć nazwa pochodzi od performance test, centralnym celem jest poprawne liczenie. Pomiar czasu jest dodatkowym testem wydajności zależnym od implementacji.
Częste nieporozumienia
Perft a siła gry
Perft sprawdza przepisy i generowanie ruchów. Nie mierzy rozumienia pozycyjnego, jakości oceny ani siły taktycznej.
Perft a haszowanie
Implementacja może używać do rozpoznawania pozycji, lecz prawidłowy klucz nie zastępuje legalnego zliczania.
Zobacz terminŹródła
- 1.Perft, Chess Programming Wiki
