Я переписав цю відповідь, щоб спробувати вирішити деякі коментарі до попередньої версії.
Я припускаю, що ви прочитали визначення Вікіпедії для NP-повноти, яка насправді не зосереджена на іграх. Я трохи заношу точний зміст NP-повноти та теорії ігор та поясню суть гри NP-Complete.
Розглянемо гру з двома гравцями з альтернативними рухами, більш обмежено це стосується комбінаторних ігор . В основному це гра, яка має певну кількість рухів, яку можна зробити, і ви повинні вибрати один з них. Ви хотіли б грати "ідеально", це означає, що ви ніколи не зробили б "поганий" крок. Отже, з допустимих кроків, які ви хочете вибрати найкращий. (Звичайно, ваш противник має ту саму мету ...)
Зауважте, що ідеальна гра не означає, що ви завжди будете вигравати. Правила гри можуть бути такими, що перший чи другий гравець повинен виграти. Також деякі ігри, такі як Tic-Tac-Toe, повинні закінчитися внічию. Таким чином, що означає «ідеальна гра» в цій дискусії, це:
(1) що ви ніколи не будете в виграшному становищі, а потім програєте, тому що зробили «поганий» крок
(2) Ви ніколи не пропустите можливість отримати у виграшну позицію, якщо виникає така можливість.
Враховуючи поточний стан гри, ви хочете, щоб ви могли використовувати "ефективний алгоритм" для обчислення найкращого ходу. З іншого боку, зазначимо, що алгоритм, який повинен здійснювати пошук по всьому дереву ігор, є "неефективним алгоритмом".
СБнТ
Т∝ a Bа+ b Bα - 1+ c Bα - 2+ . . . + год Б0
α
Т∝ a Bн
н
Тепер важливим моментом є те, що неможливо мати ефективний алгоритм, поліноміальний час, який ідеально підходить для гри, яка завершує NP. Щоб відтворити ідеально повну NP-задачу, за визначенням, слід вирішувати неефективний алгоритм, який працює в неполіноміальний час.
Зауважте, що час роботи - це невід'ємна кількість обчислень, а не час відгуку, сприйняте людиною. Для такої маленької гри, як Tic-Tac-Toe, комп'ютер міг грати всі можливі майбутні кроки і все ще швидко реагувати так, як сприймається людиною.
Для Німа можна створити алгоритм багаточленного часу. У будь-який момент гри алгоритм може обчислити, який гравець має виграшний хід і яким повинен бути цей хід.
З іншого боку, давайте візьмемо гру Qubic . (Ви намагаєтеся створити лінію 3D у 3D-сітці. Отже, це по суті tic-tac-toe на сітці 4x4x4.) Qubic є NP-завершеним, тому немає поліноміального алгоритму часу для обчислення наступного ідеального ходу. Єдиний спосіб дізнатися, чи є у вас виграшний хід - спробувати всі можливі ходи обох гравців, щоб переконатися, що певна хода є переможцем або, принаймні, не програв.
По правді, все ігрове дерево для Qubic досить мало, щоб його можна було закодувати в комп'ютерну програму, яка може грати ідеально. Що означає кодування, це те, що все ігрове дерево було вивчено і всі рухи відпрацьовані заздалегідь. Таким чином, програма по суті може зробити швидкий дзвінок до бази даних, використовуючи поточний стан плати, і отримати найкращий хід для цього стану плати, не вимагаючи пошуку дерева щоразу, коли буде зроблено переміщення. Це справді "обман" для наших цілей тут.
Тепер давайте обговоримо шахи, щоб обговорити функцію оцінювання, ігноруючи деякі інші особливості програм шахової гри. Шахи все ще залишаються невирішеною грою . Невідомо, чи повинен виграти перший чи другий гравець. Неможливо отримати будь-яку позицію правління і з упевненістю передбачити, хто виграє. Насправді в шахах є таке велике ігрове дерево, що шукати все ігрове дерево просто неможливо. Вам знадобляться комп'ютери, які не просто в 10 чи 100 разів швидші, але мільярди мільярдів часу швидші, ніж будь-який сучасний комп'ютер. (Є надія, що квантові обчислення могли прорізати цей Гордіїв вузол.)
Подумайте про функцію оцінювання шахів як про надання кожному можливому наступному кроку ймовірності бути найкращим кроком. Програма з шахів - це поєднувати зовнішні очі з функцією оцінювання. Таким чином, програма розглядає всі можливі майбутні кроки до тих пір, поки не дістанеться до точки, в якій "хороший" бал може бути наданий позиції дошки. Комп'ютер оцінює всі можливі шляхи через дерево таким чином, а потім вибирає шлях з найкращим балом. Оскільки пошук ніколи не доходив до кінця гри для всіх оцінюваних контурів, усі шахові програми в кінцевому підсумку використовують недосконалу функцію оцінювання. (Якщо ви вже в кінці гри, то комп'ютер може переглядати всі можливі майбутні кроки.) Це означає, що можливо було б обіграти програму, навіть якщо програма в певний момент мала виграшну позицію.