Введение

Алгоритм поиска в дереве игры альфа-бета с нулевым окном. MTD(f) — это модифицированный алгоритм поиска в дереве игры альфа-бета, использующий начальные границы поиска с нулевым окном и память (обычно таблицу транспозиций) для повторного использования промежуточных результатов поиска. MTD(f) является сокращенной формой MTD(n,f), обозначающей Memory enhanced Test Driver с узлом ‘n’ и значением ‘f’. Эффективность данной парадигмы зависит от точного начального предположения и предположения о том, что окончательное значение минимакса находится в узком интервале вокруг этого предположения (которое становится верхней и нижней границей для поиска от корня). Структура памяти используется для сохранения начального предположения, определенного другим способом. MTD(f) был представлен в 1994 году и во многом заменил NegaScout (PVS), ранее доминировавшую парадигму поиска для шахмат, шашек, Othello и других игровых программ.

Происхождение

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).