Хочется написать программу, которая играет в gomoku. (как крестики-нолики только 5 в ряд и роле не огранниченное)
В тот вариант игры
Тема уже обсуждалась в форуме.
Недостатки большенства реализаций в том, что они не учаться на своих ошибках.
Целевая функция в них статическая.
Есть две возможности обойти это ограничение.
Первая — анализировать игру с начала.
Вторая — анализировать с конца.
С первым всё просто. Строим дерево по всем с играным играм.
В узлах ход и количество выигранных, количество проигранных партий.
Пока партия развивается по известным ходам, эта даёт возможность довольно точно
определить вероятность выиграша.
Со вторым сложнее.
Предположим изначально у нас нет никакой целевой функции, есть только правила.
По мере своего развития прога должна отбирать выиграшные варианты.
Будем аналищировать только эндшпиь в районе развития гарантированного выиграша,
чтобы отсеить случайные проиграшы.
Гарантированый выиграш легко определить — если с какого-то момента противник может проиграть только за меньшее
число ходов.
Таким образом цену хода всегда можно определить как количество ходов, необходимых для победы.
Вопрос.
Как можно определить зависимые от ситуции клетки?
Я думал определять это как клетки на которые сделаны последнии ходы.
Например.
???????
?XXXX ?
???????
Но это не всегда так.
Например, когда ставиться вилка. Часть вилки может существовать за долго до эндшпиля.
Есть какие-то идеи?
Второй вопрос, как потом эффективно искать по множеству готовых решений?