Введение
Алгоритм поиска в дереве игры альфа-бета с нулевым окном. MTD(f) — это модифицированный алгоритм поиска в дереве игры альфа-бета, использующий начальные границы поиска с нулевым окном и память (обычно таблицу транспозиций) для повторного использования промежуточных результатов поиска. MTD(f) является сокращенной формой MTD(n,f), обозначающей Memory enhanced Test Driver с узлом ‘n’ и значением ‘f’. Эффективность данной парадигмы зависит от точного начального предположения и предположения о том, что окончательное значение минимакса находится в узком интервале вокруг этого предположения (которое становится верхней и нижней границей для поиска от корня). Структура памяти используется для сохранения начального предположения, определенного другим способом. MTD(f) был представлен в 1994 году и во многом заменил NegaScout (PVS), ранее доминировавшую парадигму поиска для шахмат, шашек, Othello и других игровых программ.
MTD(f) is an alpha beta game tree search algorithm modified to use ‘zero window’ initial search bounds, and memory (usually a transposition table) to reuse intermediate search results. MTD(f) is a shortened form of MTD(n,f) which stands for Memory enhanced Test Driver with node ‘n’ and value ‘f’. The efficacy of this paradigm depends on a good initial guess, and the supposition that the final minimax value lies in a narrow window around the guess (which becomes an upper/lower bound for the search from root). The memory structure is used to save an initial guess determined elsewhere. MTD(f) was introduced in 1994 and largely supplanted NegaScout (PVS), the previously dominant search paradigm for chess, checkers, othello and other game automatons.
Происхождение
MTD(f) впервые был описан в техническом отчете Университета Альберты, написанном Аске Плаатом, Джонатаном Шеффером, Вимом Пиллсом и Ари де Брюином, который впоследствии получил награду ICCA Novag как лучшая публикация по компьютерным шахматам за 1994/1995 годы. Алгоритм MTD(f) был разработан в ходе исследований, направленных на понимание алгоритма SSS*, алгоритма поиска в ширину, изобретенного Джорджем Стокманом в 1979 году. Было обнаружено, что SSS* эквивалентен серии вызовов альфа-бета отсечения, при условии использования альфа-бета с хранилищем, например, таблицей транспозиций. Название MTD(f) расшифровывается как Memory enhanced Test Driver (тестовый драйвер с расширенной памятью), отсылая к тестовому алгоритму Джудеи Перла, который выполняет поиск с нулевым окном. MTD(f) подробно описан в докторской диссертации Аске Плаата 1996 года.
Поиск в нулевом окне
Поиск "нулевого окна" — это альфа-бета поиск, у которого верхняя и нижняя границы совпадают или различаются на единицу, так что возвращаемое значение гарантированно выходит за пределы этих границ (или, в исключительно благоприятном случае, равно одной из них). MTD(f) достигает своей эффективности, выполняя только альфа-бета поиск с нулевым окном, используя ранее определенную "хорошую" границу (то есть, бета). В MTD(f) AlphaBeta либо проваливается вверх, либо вниз, возвращая соответственно верхнюю или нижнюю границу значения минимакса. Вызовы с нулевым окном приводят к большему количеству отсечений, но возвращают меньше информации – только границу значения минимакса. Чтобы найти значение минимакса, MTD(f) вызывает AlphaBeta несколько раз, постепенно сходясь к нему и в конечном итоге находя точное значение. Таблица транспозиций сохраняет и извлекает из памяти ранее исследованные части дерева, чтобы снизить накладные расходы на повторное исследование частей дерева поиска.
Описание
MTD(f) выполняет поиск в нулевом окне, начиная от корня дерева. MTD(f) полагается на таблицу транспозиций для эффективной работы. Поиск в нулевом окне достигает отсечения раньше, чем поиск в широком окне. Поэтому он более эффективен, но, в некотором смысле, менее устойчив к ошибкам, чем поиск в широком окне. Однако, более широкие окна поиска более терпимы к движкам с большими колебаниями оценки четности/нечетности и детальной функцией оценки. По этой причине некоторые шахматные движки не перешли на MTD(f). В тестах с программами турнирного уровня, такими как Chinook (шашки), Phoenix (шахматы) и Keyano (Отелло), алгоритм MTD(f) показал результаты лучше, чем все остальные алгоритмы поиска. Новые алгоритмы, такие как Best Node Search, предположительно превосходят MTD(f).