Przepisałem tę odpowiedź, aby spróbować odnieść się do komentarzy na temat poprzedniej wersji.
Zakładam, że przeczytałeś definicję Wikipedii dotyczącą kompletności NP, która tak naprawdę nie koncentruje się na grach. Rozetrę trochę znaczenie dokładności NP i teorii gier i wyjaśnię istotę gry NP-Complete.
Rozważmy grę dla dwóch graczy z naprzemiennymi ruchami, bardziej restrykcyjnie dotyczy to głównie gier kombinatorycznych . Zasadniczo gra, w której masz pewną liczbę ruchów, które można wykonać i musisz wybrać jeden z nich. Chciałbyś grać „idealnie”, co oznacza, że nigdy nie zrobiłbyś „złego” ruchu. Więc spośród dozwolonych ruchów chcesz wybrać najlepszy. (Oczywiście twój przeciwnik ma ten sam cel ...)
Pamiętaj, że idealna gra nie oznacza, że zawsze wygrasz. Zasady gry mogą być takie, że pierwszy lub drugi gracz powinien wygrać. Również niektóre gry, takie jak kółko i krzyżyk, powinny zakończyć się remisem. Zatem „idealna gra” oznacza w tej dyskusji:
(1) Że nigdy nie będziesz na wygranej pozycji, a następnie przegrasz grę, ponieważ wykonałeś „zły” ruch
(2) Nigdy nie przegapisz okazji, aby zdobyć do zwycięskiej pozycji, jeśli pojawi się taka możliwość.
Biorąc pod uwagę obecny stan gry, chciałbyś użyć „wydajnego algorytmu” do obliczenia najlepszego ruchu. Z drugiej strony zauważmy, że algorytm, który musi przeszukiwać całe drzewo gry, jest „nieefektywnym algorytmem”.
dobnT.
T.A a Bza+ b B.α - 1+ c B.α - 2+ . . . + h B.0
α
T.A a Bn
n
Ważną kwestią jest to, że nie można mieć wydajnego algorytmu, czasu wielomianowego, który doskonale sprawdza się w grze, która jest kompletna NP. Aby grać doskonale, problem NP-zupełny musi być z definicji rozwiązany przez nieefektywny algorytm działający w czasie niepolarnym.
Należy pamiętać, że czas wykonywania zależy od wewnętrznej liczby obliczeń, a nie czasu reakcji postrzeganego przez człowieka. W przypadku małej gry, takiej jak kółko i krzyżyk, komputer może odtwarzać wszystkie możliwe przyszłe ruchy i nadal szybko reagować w sposób postrzegany przez człowieka.
Dla Nima możliwe jest utworzenie algorytmu wielomianowego czasu. W dowolnym momencie gry algorytm może obliczyć, który gracz ma zwycięski ruch i jaki powinien być ten ruch.
Z drugiej strony weźmy grę Qubic . (Próbujesz utworzyć linię 4 na siatce 3D. Więc jest to zasadniczo kółko i krzyżyk na siatce 4x4x4). Qubic jest NP-kompletny, więc nie ma algorytmu wielomianu czasowego do obliczenia następnego idealnego ruchu. Jedynym sposobem, aby dowiedzieć się, czy obecnie wygrywasz, jest wypróbowanie wszystkich możliwych ruchów obu graczy, aby sprawdzić, czy dany ruch jest zwycięzcą, a przynajmniej przegranym.
Prawdę mówiąc, całe drzewo gry w Qubic jest na tyle małe, że można je zakodować w programie komputerowym, który może grać doskonale. Kodowanie oznacza, że całe drzewo gry zostało zbadane, a wszystkie ruchy opracowane wcześniej. Tak więc program może zasadniczo wykonać szybkie wywołanie bazy danych przy użyciu bieżącego stanu tablicy i odzyskać najlepszy ruch dla tego stanu tablicy bez konieczności wyszukiwania drzewa za każdym razem, gdy ma zostać wykonany ruch. To jest naprawdę „oszustwo” dla naszych celów tutaj.
Porozmawiajmy teraz o szachach, aby omówić funkcję oceny, ignorując niektóre inne funkcje programów do gry w szachy. Szachy to wciąż nierozwiązana gra . Nie wiadomo, czy pierwszy lub drugi gracz powinien wygrać. Niemożliwe jest przyznanie żadnej pozycji na planszy i przewidzenie z pewnością, kto wygra. W rzeczywistości szachy mają tak duże drzewo gry, że przeszukiwanie całego drzewa gry jest po prostu niemożliwe. Potrzebujesz komputerów, które są nie tylko 10 lub 100 razy szybsze, ale miliardy miliardów czasu szybciej niż jakikolwiek inny komputer. (Istnieje nadzieja, że obliczenia kwantowe mogłyby przeciąć ten węzeł gordyjski).
Pomyśl o funkcji oceny szachowej, która daje każdemu możliwemu następnemu ruchowi prawdopodobieństwo bycia najlepszym ruchem. Program szachowy polega na połączeniu perspektyw z funkcją oceny. W ten sposób program analizuje wszystkie możliwe przyszłe ruchy, aż dojdzie do punktu, w którym „dobry” wynik może zostać przyznany pozycji tablicy. Komputer ocenia w ten sposób wszystkie możliwe ścieżki przez drzewo, a następnie wybiera ścieżkę z najlepszym wynikiem. Ponieważ wyszukiwanie nigdy nie zakończyło się oceną wszystkich ocenianych ścieżek, wszystkie programy szachowe ostatecznie używają niedoskonałej funkcji oceny. (Jeśli zbliżasz się do końca gry, komputer może być w stanie spojrzeć na wszystkie możliwe przyszłe ruchy.) Oznacza to, że można pokonać program, nawet jeśli program miał kiedyś wygraną.