Думаю, было бы полезно подумать о более широком теоретико-игровом c аспекте игры - это начинается с алгоритма минимакса, который я кратко опишу.
Обычно игрок следующий игрок считается «максимальным» игроком, а другой игрок - «минимальным» игроком. Когда у вас есть игра с идеальной информацией (ничего не скрывается) с нулевой суммой для двух игроков (в этом случае все конечные результаты - выигрыш / проигрыш / ничья), существует довольно простая модель того, как играть - построение полного дерева game.
Итак, максимальный игрок считает все свои ходы и выбирает ход, который возвращает максимальное значение. Но, с учетом здесь на самом деле просит минимального игрока сделать то же самое, за исключением того, что минимальный игрок принимает минимальное значение (а затем просит максимального игрока сделать это рекурсивно и так далее). Если вы продолжите это до конца игры, в шашках вы получите все выигрыши, проигрыши и dr aws, которым могут быть присвоены 100, -100 и 0. (Точные значения не имеют значения, только порядок следования. Значения.) Имея достаточно времени, вы можете перебирать все дерево и играть идеально.
На практике у нас недостаточно времени, поэтому мы должны создать функцию оценки, которая может отрезать дерево в какой-то момент. глубину и оценить это, пытаясь предсказать окончательный исход игры. Предварительный просмотр дает нам много информации о том, что может произойти, и поэтому даже с помощью простой функции оценки он все равно может привести к разумной игре. Итак, это примерно то, что вы предлагаете - функция оценки. Если вы поместите это в конец минимаксного поиска и сопоставите значения с окончательными значениями выигрышей / проигрышей / ничьей, то у вас будет игрок, который играет прилично в шашки.
Это только верхушка Айсберг, но да, вы на правильном пути. Когда это заработает, вы можете изучить следующие моменты:
- Альфа-бета-обрезка сохраняет результат, но делает дерево намного меньше.
- Реальные игры больше похожи на графики что деревья. Таблицы транспонирования обнаруживают транспозиции в повторяющиеся состояния и избегают повторного поиска в одном и том же дереве дважды.
- Итеративное углубление помогает вам перебирать дерево, чтобы настроить, насколько глубоко вы ищете. с самого начала, экономя много вычислений и значительно увеличивая мощность программы.
- Машинное обучение можно использовать для настройки значений, которые вы настраиваете вручную, или для всего процесса (ala AlphaZero )
- Поиск по дереву Монте-Карло предлагает образцы возможных строк воспроизведения в дереве, что может помочь в дорогостоящей работе по настройке оценочной функции.
Наконец, я бы порекомендовал почитать книгу One Jump Ahead Джонатана Шеффера, в котором рассказывается увлекательная история о том, как он создал программу для чемпионов мира по шашкам, а затем в конце концов решил эту игру.
Редактировать: Обратите внимание, что хороший подход к разработке программного обеспечения было бы заставить минимаксный поиск работать с очень простой оценкой fu nction (например, посчитать разницу в материалах и разницу между королем). Когда это сработает, вы можете искать слабые места в игре. Более обширная функция оценки поможет исправить эти недостатки. Затем вы можете повторить этот процесс.
Если вы потратите слишком много времени на разработку функций, прежде чем у вас будет работать остальная часть программы, вы можете обнаружить, что функции, которые, как вы думали, вам нужны, слишком дороги для вычисления / программирования на практике .