Algorytm wyszukiwania minimax

Teraz, gdy możemy obliczyć MINIMAX(y), możemy przekształcić to w algorytm wyszukiwania, który znajduje najlepszy ruch dla MAX, próbując wszystkie działania i wybierając to, którego wynikowy stan ma najwyższą wartość MINIMAX. Rysunek przedstawia algorytm. Jest to algorytm rekurencyjny, który przechodzi aż do liści drzewa, a następnie tworzy kopię zapasową wartości minimax w drzewie, gdy rekurencja się rozwija. Na przykład na rysunku wcześniej algorytm najpierw przechodzi w dół do trzech dolnych lewych węzłów i używa na nich funkcji UTILITY, aby odkryć, że ich wartości wynoszą odpowiednio 3, 12 i 8. Następnie pobiera minimalną z tych wartości, 3, i zwraca ją jako kopię zapasową wartości node . Podobny proces daje w kopii zapasowej wartości 2 dla i 2 dla C . Na koniec przyjmujemy maksymalnie 3, 2 i 2, aby uzyskać kopię zapasową wartości 3 dla węzła głównego.

Algorytm minimax wykonuje pełną eksplorację drzewa gry w głąb. Jeżeli maksymalna głębokość drzewa wynosi m i w każdym punkcie są dozwolone ruchy, to złożoność czasowa algorytmu minimax wynosi O(bm) . Złożoność przestrzeni wynosi O(bm) dla algorytmu, który generuje wszystkie akcje na raz, lub O(m) dla algorytmu, który generuje akcje pojedynczo. Wykładnicza złożoność sprawia, że MINIMAX jest niepraktyczny dla złożonych gier; na przykład szachy mają współczynnik rozgałęzienia około 35, a średnia gra ma głębokość około 80 warstw i nie jest możliwe przeszukanie 3580 ≈ 10123 stanów. MINIMAX służy jednak jako podstawa do matematycznej analizy gier. Aproksymując analizę minimaksową na różne sposoby, możemy uzyskać bardziej praktyczne algorytmy.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *