Następnym krokiem jest zmodyfikowanie funkcji ALPHA-BETA-SEARCH tak, aby wywoływała heurystyczną funkcję EVAL, gdy konieczne jest odcięcie wyszukiwania. Zamieniamy dwa wiersze na liście, które wspominają o IS-TERMINAL, następującym wierszem:
if game.IS-CUTOFF(stan, głębokość) return game.EVAL(stan, player), null
Musimy również zorganizować trochę księgowości, aby bieżąca głębokość była zwiększana przy każdym wywołaniu rekurencyjnym. Najprostsze podejście do kontrolowania ilości wyszukiwań
jest ustawienie stałego limitu głębokości, tak aby IS-CUTOFF(stan, głębokość) zwracał wartość true dla wszystkich głębokości większych niż pewna ustalona głębokość (jak również dla wszystkich stanów końcowych). Głębokość jest wybierana tak, aby ruch został wybrany w wyznaczonym czasie. Bardziej niezawodnym podejściem jest zastosowanie pogłębiania iteracyjnego. (Patrz rozdział 3 .) Gdy skończy się czas, program zwraca ruch wybrany przez najgłębsze zakończone wyszukiwanie. Jako bonus, jeśli w każdej rundzie iteracyjnego pogłębiania będziemy trzymać wpisy w tabeli transpozycji, kolejne rundy będą szybsze i możemy wykorzystać oceny do poprawy kolejności ruchów. Te proste podejścia mogą prowadzić do błędów ze względu na przybliżony charakter funkcji oceny. Rozważmy ponownie prostą funkcję oceny szachów opartą na przewadze materialnej. Załóżmy, że program szuka do granicy głębokości, osiągając pozycję na rysunku (b), gdzie czarne są przed skoczkiem i dwoma pionkami. Zgłosi to jako wartość heurystyczną stanu, tym samym oświadczając, że stan jest prawdopodobną wygraną Blacka. Ale następny ruch białych zbija hetmana czarnych bez żadnej rekompensaty. Stąd pozycja jest faktycznie korzystna dla białych, ale można to zobaczyć tylko patrząc w przyszłość. Funkcja oceny powinna być stosowana tylko do pozycji, które są spokojne, to znaczy do pozycji, w których nie ma żadnego oczekującego ruchu (takiego jak zbicie hetmana), który mógłby szalenie zmienić ocenę. Dla pozycji nie spoczynkowych IS-CUTOFF zwraca wartość fałsz, a wyszukiwanie jest kontynuowane aż do osiągnięcia pozycji spoczynkowych. To dodatkowe poszukiwanie spokoju jest czasami ograniczone do rozważenia tylko niektórych rodzajów ruchów, takich jak ruchy przechwytywania, które szybko rozwiążą niepewność pozycji. Efekt horyzontu jest trudniejszy do wyeliminowania. Pojawia się, gdy program ma do czynienia z ruchem przeciwnika, który powoduje poważne szkody i jest ostatecznie nieunikniony, ale można go tymczasowo uniknąć, stosując taktyki opóźniające. Rozważ pozycję w szachach na rysunku. Jasne jest, że czarny goniec nie ma możliwości ucieczki. Na przykład biała wieża może ją zbić, przesuwając się na h1, potem a1, potem a2; przechwytywanie na głębokości 6 warstw.
Ale czarne mają sekwencję ruchów, które przesuwają zbicie gońca „za horyzont”. Załóżmy, że Black wyszukuje do 8 warstw. Większość ruchów czarnych doprowadzi do ostatecznego zbicia gońca i tym samym zostanie oznaczona jako „złe” ruchy. Ale czarne rozważą również sekwencję ruchów, która zaczyna się od szachowania króla pionkiem i skłaniania króla do zbicia piona. Czarne mogą wtedy zrobić to samo z drugim pionkiem. Zajmuje to wystarczająco dużo ruchów, aby zbicie gońca nie zostało odkryte podczas pozostałej części poszukiwań czarnych. Czarny myśli, że linia gry uratowała gońca za cenę dwóch pionków, podczas gdy w rzeczywistości wszystko, co zrobił, to zmarnowanie pionów i przesunięcie nieuchronnego bicia gońca poza horyzont, który czarne mogą zobaczyć. Jedną ze strategii łagodzenia efektu horyzontu jest umożliwienie pojedynczych wydłużeń, ruchów, które są „wyraźnie lepsze” niż wszystkie inne ruchy w danej pozycji, nawet jeśli wyszukiwanie zostałoby normalnie przerwane w tym momencie. W naszym przykładzie przeszukanie wykazało, że trzy ruchy białej wieży z h2 na h1, potem z h1 na a1, a następnie zbicie gońca na a2 przez a1 są z kolei wyraźnie lepszymi ruchami, więc nawet jeśli sekwencja pionków ruchy wypychają nas na horyzont, te wyraźnie lepsze ruchy będą miały szansę na rozszerzenie poszukiwań. To sprawia, że drzewo jest głębsze, ale ponieważ zwykle jest niewiele pojedynczych rozszerzeń, strategia nie dodaje wielu węzłów do drzewa i okazała się skuteczna w praktyce.