ССС*
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2010 г. ) |
SSS* — это алгоритм поиска , представленный Джорджем Стокманом в 1979 году, который выполняет поиск в пространстве состояний, проходя по дереву игры в порядке «наилучшего первого», аналогично алгоритму поиска A* .
SSS* основан на понятии деревьев решений . Неформально дерево решений можно сформировать из любого произвольного игрового дерева, сократив количество ветвей в каждом узле MAX до одной. Такое дерево представляет собой полную стратегию MAX, поскольку оно определяет ровно одно MAX-действие для каждой возможной последовательности ходов, сделанных противником. Учитывая дерево игры, SSS* просматривает пространство частичных деревьев решений, постепенно анализируя все большие и большие поддеревья, в конечном итоге создавая единственное дерево решений с тем же корнем и минимаксным значением, что и исходное дерево игры. SSS* никогда не проверяет узел, который будет удален при альфа-бета-обрезке , и может обрезать некоторые ветви, которые не будут удалены при альфа-бета-обрезке. Стокман предположил, что SSS* может быть лучшим общим алгоритмом, чем альфа-бета. Однако Игорь Ройзен и Джудея Перл показали [1] что экономия количества позиций, которые SSS* оценивает по сравнению с альфа/бета, ограничена и, как правило, недостаточна, чтобы компенсировать увеличение других ресурсов (например, хранение и сортировка списка узлов, необходимые в соответствии с принципом «лучший — первый») суть алгоритма). Однако Аске Плаат , Джонатан Шеффер , Вим Пейлс и Ари де Брюин показали, что последовательность альфа-бета-вызовов с нулевым окном эквивалентна SSS* (т. е. она расширяет одни и те же узлы в том же порядке), когда альфа-бета использовался с таблицей транспонирования , как и во всех игровых программах для шахмат, шашек и т.п. Теперь хранение и сортировка ОТКРЫТОГО списка отпала необходимость. Это позволило реализовать (алгоритм, эквивалентный) SSS* в игровых программах турнирного качества. Эксперименты показали, что на практике он действительно работал лучше, чем Alpha-Beta , но не превосходил NegaScout . [2]
Переформулировка алгоритма «сначала лучшее» как последовательности вызовов «сначала в глубину» привела к формулировке класса альфа-бета-алгоритмов с нулевым окном, MTD(f) наиболее известным примером которых является .
Алгоритм
[ редактировать ]Существует очередь приоритетов OPEN, в которой хранятся состояния. или узлы, где - идентификатор узла ( десятичная запись , для идентификации узлов используется является корнем), - состояние узла (L – узел активен, что означает, что он еще не решен и S – узел решен), - значение решенного узла. Элементы в очереди OPEN сортируются по убыванию их ценить. Если более одного узла имеют одинаковое значение , выбирается самый левый узел дерева.
OPEN := { (e, L, inf) } while true do // repeat until stopped pop an element p=(J, s, h) from the head of the OPEN queue if J = e and s = S then STOP the algorithm and return h as a result else apply Gamma operator for p
оператор для определяется следующим образом:
if s = L then if J is a terminal node then (1.) add (J, S, min(h, value(J))) to OPEN else if J is a MIN node then (2.) add (J.1, L, h) to OPEN else (3.) for j=1..number_of_children(J) add (J.j, L, h) to OPEN else if J is a MIN node then (4.) add (parent(J), S, h) to OPEN remove from OPEN all the states that are associated with the children of parent(J) else if is_last_child(J) then // if J is the last child of parent(J) (5.) add (parent(J), S, h) to OPEN else (6.) add (parent(J).(k+1), L, h) to OPEN // add state associated with the next child of parent(J) to OPEN
Ссылки
[ редактировать ]- ^ Ройзен, Игорь; Иудея Перл (март 1983 г.). «Минимаксный алгоритм лучше, чем альфа-бета?: Да и нет». Искусственный интеллект . 21 (1–2): 199–220. дои : 10.1016/s0004-3702(83)80010-1 .
- ^ Плаат, Аске; Джонатан Шеффер; Вим Пейлс; Арье де Брюэн (ноябрь 1996 г.). «Минимаксные алгоритмы с фиксированной глубиной и лучшими первыми» . Искусственный интеллект . 87 (1–2): 255–293. дои : 10.1016/0004-3702(95)00126-3 .