реализация временной разницы в шахматах

10

Я занимаюсь разработкой шахматной программы, в которой используется алгоритм обрезки альфа-бета и функция оценки, которая оценивает позиции с использованием следующих функций, а именно: материал, безопасность короля, мобильность, структура пешки и захваченные фигуры и т. Д. ..... Моя функция оценки полученный из

f(p)=w1material+w2kingsafety+w3mobility+w4pawn-structure+w5trapped pieces

где - вес, назначенный каждой функции. На этом этапе я хочу настроить вес моей функции оценки, используя временную разницу, когда агент играет против самого себя и в процессе собирает данные обучения из своего окружения (что является формой обучения с подкреплением). Я прочитал несколько книг и статей, чтобы понять, как реализовать это на Java, но они кажутся скорее теоретическими, чем практическими. Мне нужно подробное объяснение и псевдокоды о том, как автоматически настраивать вес моей функции оценки на основе предыдущих игр.w

user2890137
источник

Ответы:

4

Я рекомендую всем, кто интересуется этой темой, взглянуть на статью, в которой сочетаются TDL и углубленное изучение.

Грубо говоря, вам нужно заставить движок играть в игры друг против друга. Запишите оценку mini-max для каждой позиции. В конце игры вы получите вознаграждение, равное {0,1, -1} для шахмат. Затем вам нужно настроить параметры с помощью:

введите описание изображения здесь

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

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

Несколько замечаний:

  1. В статье, которую я цитирую, применяется коэффициент дисконтирования. Это сделано для алгоритма обратной пропорции для нейронной сети. Тебе это не нужно.
  2. Вам нужно будет поэкспериментировать с оптимальной скоростью обучения (альфа в уравнении). Слишком большое значение сделает ваше обучение нестабильным, слишком мало займет больше времени, чтобы сойтись. Я видел людей, использующих 0,70. Бумага, которую я цитирую, использовала 1.0.
Привет мир
источник
Привет, мне нравится ваш ответ, но не могли бы вы исправить ссылку на статью?
падура
@padura Исправлено. Пожалуйста, прочитайте. Это было хорошее чтение для науки о данных.
HelloWorld
(+1) Отличный ответ. Бумага тоже очень
понравилась
Это отличная статья, позор, что я не знал об этом в то время, когда работал над своим собственным шахматным движком;) Интересно, сможем ли мы улучшить, комбинируя с этой техникой: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
падура
2

Первое замечание: вы должны смотреть «Wargames», чтобы знать, во что вы ввязываетесь.

То, что вы хотите, это f (p) так, чтобы f (p) было как можно ближе к силе позиции.

Очень простым решением с использованием генетического алгоритма было бы настроить 10000 игроков с разным весом и посмотреть, какие выигрыши. Затем сохраните вес 1000 лучших победителей, скопируйте их 10 раз, слегка измените их, чтобы изучить вес, и снова запустите симуляцию. Это стандартная GA, учитывая функциональную форму, каковы лучшие коэффициенты для него.

Другое решение состоит в том, чтобы извлечь позиции, поэтому у вас есть таблица «(материал, безопасность королей, мобильность, структура пешки, пойманные в ловушку) -> добротность позиции», где добротность позиции - это некоторый объективный фактор (результат выигрыш / проигрыш вычислен с использованием моделирования выше) или известные совпадения, глубина доступного дерева, количество ходов под деревом, где один из 5 факторов улучшается. Затем вы можете попробовать различные функциональные формы для вашего f (p), регрессии, svm.

user3053
источник
Это не имеет никакого смысла.
HelloWorld