Написал программу решателя для игры реверси, который перебирает все возможные комбинации до указанной глубины, оценивает позицию, и с помощью минимакса определяет лучший ход.
Проблема в том, что программа работает на маленькой глубине 4-6 на финише до 12 может доходить при этом на глубине 6 программа иногда потребляет всю оперативную память компьютера 16 гигабайт.
Вопрос, как лучше всего обрезать дерево поиска?
Есть несколько идей:
Первая идея
Перебрать все комбинации на глубину 4 оценить минимаксом все ходы
начинаем обрезать.
На 1 глубине выбрать 5 лучших продолжений остальные удалить
перестроить дерево удлив первый ход и и оценить снова ходы
На 2 глубине то же выбрать 5 лучших продолжений остальные удалить
Итого мы удалили большую часть дерева.
Начинаем перебирать все комбинации дальше +2 глубины и снова обрезка дерева.
Вторая идея
Перебрать все комбинации на глубину 4.
Построить дерево оценить минимаксом.
Запомнить лучшее продолжение и удалить его из дерева.
Снова оценить минимаксом запомнить лучшее продолжение и удалить его из дерева.
И так повторить раз 1000 раз, чтобы 1000 лучших продолжений запомнить чтобы дальше их анализировать на большую глубину. Из 50000 вариантов останется 1000 .
Может у вас есть какая-нибудь идея как обрезать лучше всего дерево поиска?