Я занимаюсь разработкой шахматной программы, в которой используется алгоритм обрезки альфа-бета и функция оценки, которая оценивает позиции с использованием следующих функций, а именно: материал, безопасность короля, мобильность, структура пешки и захваченные фигуры и т. Д. ..... Моя функция оценки полученный из
где - вес, назначенный каждой функции. На этом этапе я хочу настроить вес моей функции оценки, используя временную разницу, когда агент играет против самого себя и в процессе собирает данные обучения из своего окружения (что является формой обучения с подкреплением). Я прочитал несколько книг и статей, чтобы понять, как реализовать это на Java, но они кажутся скорее теоретическими, чем практическими. Мне нужно подробное объяснение и псевдокоды о том, как автоматически настраивать вес моей функции оценки на основе предыдущих игр.
источник
Первое замечание: вы должны смотреть «Wargames», чтобы знать, во что вы ввязываетесь.
То, что вы хотите, это f (p) так, чтобы f (p) было как можно ближе к силе позиции.
Очень простым решением с использованием генетического алгоритма было бы настроить 10000 игроков с разным весом и посмотреть, какие выигрыши. Затем сохраните вес 1000 лучших победителей, скопируйте их 10 раз, слегка измените их, чтобы изучить вес, и снова запустите симуляцию. Это стандартная GA, учитывая функциональную форму, каковы лучшие коэффициенты для него.
Другое решение состоит в том, чтобы извлечь позиции, поэтому у вас есть таблица «(материал, безопасность королей, мобильность, структура пешки, пойманные в ловушку) -> добротность позиции», где добротность позиции - это некоторый объективный фактор (результат выигрыш / проигрыш вычислен с использованием моделирования выше) или известные совпадения, глубина доступного дерева, количество ходов под деревом, где один из 5 факторов улучшается. Затем вы можете попробовать различные функциональные формы для вашего f (p), регрессии, svm.
источник