Каково современное состояние поиска компьютерного шахматного дерева?

Меня не интересуют крошечные оптимизации, дающие несколько процентов скорости. Меня интересуют самые важные эвристики для альфа-бета-поиска. И наиболее важные компоненты для функции оценки.

Меня особенно интересуют алгоритмы с наибольшим соотношением (улучшение/код_размер). (НЕ (улучшение/сложность)).

Спасибо.

PS Эвристика для убийцы - идеальный пример - простой в использовании и мощный. База данных эвристик слишком сложна.

Ответы

Ответ 1

Не уверен, что вы уже знаете об этом, но посмотрите Chess Programming Wiki - это отличный ресурс, который охватывает практически все Аспект современного шахматного AI. В частности, в отношении вашего вопроса см. Разделы "Поиск и оценка" (в разделе "Основные темы" ) на главной странице. Вы также можете обнаружить некоторые интересные методы, используемые в некоторых из перечисленных программ здесь. Если на ваши вопросы по-прежнему не отвечают, я определенно рекомендую вам спросить в Chess Programming Forums, где, вероятно, будет много специалистов отвечать. (Не то, что вы не обязательно получите хорошие ответы здесь, просто что это скорее более вероятно на тематических форумах экспертов).

Ответ 2

MTD (f) или один из варианты MTD является большим улучшением по сравнению со стандартным alpha-beta, предоставляя вам не очень тонкие детали в вашей оценочной функции и предполагая, что вы используя эвристика киллера. история эвристики также полезна.

Самая рейтинговая шахматная программа Rybka, по-видимому, отказалась от MDT (f) в пользу PVS с окном нулевой аспирации на не-PV узлах.

Расширенная обрезка ненужности, которая включает в себя как обычную обрезку, так и глубокое бритвы, теоретически необоснованна, но на практике эффективна.

Итеративное углубление - еще один полезный метод. И я перечислил много хороших ссылок на шахматы здесь.

Ответ 3

Несмотря на то, что многие оптимизации на основе эвристики (я имею в виду способы увеличения глубины дерева без фактического поиска), обсуждаемые в литературе по программированию в шахматы, я думаю, что большинство из них редко используются. Причина в том, что они являются хорошими ускорителями производительности в теории, но не на практике.

Иногда эти эвристики могут возвращать плохой (я имею в виду не лучший) ход тоже.

Люди, с которыми я говорил, всегда рекомендуют оптимизировать альфа-бета-поиск и внедрять итеративное углубление в код, а не пытаться добавить другие эвристики.

Основная причина заключается в том, что компьютеры растут в вычислительной мощности, и исследование [требует цитаты, я полагаю], показало, что программы, которые используют свое полное время процессора для перебора, альфа-бета-дерево на максимальную глубину всегда опережали программы, которые разделяют свое время между определенными уровнями альфа-бета, а затем некоторой эвристикой.

Несмотря на то, что использование некоторых эвристик для расширения глубины дерева может нанести больше вреда, чем пользы, есть много ускорителей производительности, которые вы можете добавить к алгоритму поиска альфа-бета.

Я уверен, что вы знаете, что для того, чтобы альфа-бета работала точно так, как она предназначена для работы, вы должны иметь механизм сортировки перемещения (итеративное углубление). Итеративное углубление может дать вам повышение на 10%.

Добавление технологии Принципиальная вариация h в альфа-бета может дать вам дополнительный 10-процентный импульс.

Попробуйте использовать алгоритм MTD (f). Он также может увеличить производительность вашего двигателя.

Ответ 4

Одна эвристика, о которой не упоминалось, Нулевая обрезка.

Кроме того, у Ed Schröder есть отличная страница, объясняющая ряд трюков, которые он использовал в своем двигателе Rebel, и насколько каждый из них способствовал скорости/производительности: Inside Rebel

Ответ 5

Использование таблицы транспозиций с zobrist hash

Требуется очень мало кода для реализации [одного XOR при каждом перемещении или unmove и оператора if перед рекурсированием в дереве игр], а преимущества довольно хороши, особенно если вы уже используете итерационное углубление, и это довольно (используйте таблицу большего размера, таблицу меньшего размера, стратегии замены и т.д.)

Ответ 6

Движения убийцы - хороший пример небольшого размера кода и большого улучшения в перемещении перемещения.

Ответ 7

Большинство алгоритмов AI для настольных игр основаны на http://en.wikipedia.org/wiki/Minmax MinMax. Цель состоит в том, чтобы свести к минимуму их варианты и максимизировать ваши возможности. Хотя с шахматами это очень большая и дорогостоящая проблема времени выполнения. Чтобы уменьшить это, вы можете комбинировать minmax с базой данных ранее играемых игр. Любая игра, которая имеет аналогичную позицию на доске и имеет шаблон, установленный в отношении того, как этот макет был выигран для вашего цвета, может использоваться для "анализа", куда двигаться дальше.

Я немного смущен тем, что вы подразумеваете под улучшением /code _size. Вы действительно имеете в виду анализ улучшения/времени выполнения (большой O (n) против o (n))? Если это так, поговорите с IBM и синим цветом или с командой Microsoft Parallels. В PDC я разговаривал с парнем (чье имя ускользает от меня сейчас), который демонстрировал маджонг, используя 8 ядер на одного противника, и они заняли первое место в конкурсе дизайна игрового алгоритма (чье имя также ускользает от меня).

Я не думаю, что есть какие-то "консервированные" алгоритмы, чтобы всегда выигрывать шахматы и делать это очень быстро. Путь, который вам нужно сделать, - это КАЖДЫЙ возможный ранее воспроизведенный игровой процесс, индексированный в очень большой базе данных на основе словаря и предварительно кэшированный анализ каждой игры. Это был бы очень сложный алгоритм и, по моему мнению, был бы очень плохой проблемой улучшения/сложности.

Ответ 8

Я мог бы немного отвлечься, но "современные" шахматные программы используют MPI, такие как Deep Blue для массивной параллельной власти.

Просто подумайте, что параллельная обработка играет большую роль в современных шахматах