Введение

Улучшение поиска в дереве игры AlphaBeta Основной поиск вариаций (иногда приравнивается к практически идентичному NegaScout) - это алгоритм negamax, который может быть быстрее, чем alphabeta обрезка. Как и alphabeta обрезка, NegaScout - это алгоритм направленного поиска для вычисления минимакса значения узла в дереве. Он доминирует над alphabeta-обрезкой в том смысле, что он никогда не будет изучать узел, который может быть обрезан alphabeta; однако, он полагается на точное упорядочение узлов, чтобы извлечь выгоду из этого преимущества. NegaScout работает лучше всего, когда есть хороший заказ на переезд. На практике порядок перемещения часто определяется предыдущими более мелкими поисками. Он производит больше отсеков, чем альфа-бета, предполагая, что первый исследованный узел является лучшим. Другими словами, предполагается, что первый узел находится в основной вариации. Затем он может проверить, верно ли это, просматривая оставшиеся узлы с помощью нулевого окна (также известного как окно разведки; когда альфа и бета равны), что быстрее, чем поиск с помощью обычного окна alphabeta. Если доказательство не удается, то первый узел не был в основной вариации, и поиск продолжается как нормальный альфабета. Поэтому NegaScout работает лучше всего, когда заказ переезда хорош. При случайном распоряжении движений NegaScout займет больше времени, чем обычная alphabeta; хотя он не будет исследовать какие-либо узлы, которые не были исследованы alphabeta, ему придется повторно искать многие узлы. Александр Райнефельд изобрёл NegaScout через несколько десятилетий после изобретения alphabeta обрезки. Он дает доказательство правильности NegaScout в своей книге. Другой алгоритм поиска, называемый SSS*, теоретически может привести к меньшему количеству поисковых узлов. Однако его первоначальная формулировка имеет практические проблемы (в частности, он в значительной степени полагается на открытый список для хранения), и в настоящее время большинство шахматных движков все еще используют форму NegaScout в своих поисках. Большинство шахматных систем используют таблицу транспонирования, в которой хранится соответствующая часть дерева поиска. Эта часть дерева имеет тот же размер, что и список OPEN SSS*. Переформулировка под названием MT SSS* позволила реализовать его как серию нулевых вызовов окна в AlphaBeta (или NegaScout), которые используют таблицу транспозиции, и можно было провести прямые сравнения с использованием игровых программ. На практике он не превзошел NegaScout. Еще один алгоритм поиска, который на практике имеет тенденцию работать лучше, чем NegaScout, - это лучший первый алгоритм, называемый MTD ((f), хотя ни один алгоритм не доминирует над другим. Есть деревья, в которых NegaScout ищет меньше узлов, чем SSS* или MTD{f}, и наоборот. NegaScout берет за основу SCOUT, изобретенный Джудией Перл в 1980 году, который был первым алгоритмом, который превосходил alphabeta и был асимптотически оптимальным. Нулевые окна с β=α+1 в негамаксной настройке были изобретены независимо J. P. Fishburn и использованы в алгоритме, похожем на SCOUT в приложении к его Ph. D. тезис, в параллельном алгоритме alphabeta, и на последнем поддереве корневого узла дерева поиска.

Идея

Большинство ходов неприемлемы для обоих игроков, поэтому нам не нужно полностью искать каждый узел, чтобы получить точный результат. Точный счет нужен только для узлов в основной вариации (оптимальная последовательность ходов для обоих игроков), где он будет распространяться до корня. В итеративном углубленном поиске предыдущая итерация уже установила кандидата для такой последовательности, которая также обычно называется основным вариантом. Для любого нелиста в этой основной вариации его дети перенастраиваются таким образом, что следующий узел из этой основной вариации является первым ребенком. Предполагается, что все остальные дети приводят к худшему или равному результату для текущего игрока (это предположение следует из предположения, что текущий кандидат в ПВ является фактическим ПВ). Чтобы проверить это, мы ищем первый ход с полным окном, чтобы установить верхнюю границу на балле других детей, для которых мы проводим поиск нулевого окна, чтобы проверить, может ли ход быть лучше. Поскольку поиск в нулевом окне намного дешевле из-за более высокой частоты бета-отрезок, это может сэкономить много усилий. Если мы обнаружим, что ход может повысить альфа, наше предположение было опровергнуто для этого хода, и мы выполняем поиск с полным окном, чтобы получить точный результат.