Чтобы самостоятельно собрать проект, скачайте исходные файлы с github, откройте консоль в папке с проектом и выполните команду:
$ go build ./cmd/counter
Чтобы использовать инструкции процессора avx, для быстрого расчета оценочной функции (ОФ) на нейронной сети, при сборке укажите тег avx:
$ go build -tags avx ./cmd/counter
При запуске движка можно указать какая оценочная функция будет использоваться. Значение по умолчанию может измениться. Чтобы использовать нейросеть укажите следующий флаг:
$ ./counter -eval nnue
Проект состоит из множества пакетов с гибкой архитектурой. Можно реализовать свою версию перебора и/или оценочной функции. Основные пакеты:
- cmd/counter - шахматный движок, основной пакет проекта
- pkg/common - основные типы данных (ход, позиция), генератор ходов
- pkg/eval - содержит различные ОФ (fast-быстрая ОФ, linear-линейная, nnue-нейросеть и другие)
- pkg/engine - отвечает за перебор дерева
- pkg/uci - реализует UCI протокол
Counter содержит 2 вида ОФ: HCE (hand crafted eval) и NNUE (Efficiently Updatable Neural Network).
Для настройки весов первой и обучения второй понадобится обучающая выборка. Для этого будем играть партии движка самим с собой. У нас же уже есть предыдущая версия движка 😄. Ну а если нет, можно взять и другой движок. Для обучения понадобятся десятки миллионов позиций, а это сотни тысяч игр. Чтобы игры не повторялись, нужны разные дебюты, тоже желательно сотни тысяч, что очень много. Поэтому вместо дебютов можно делать несколько случайных первых ходов.
- cmd/opengen - создает базу дебютов делая несколько случайных ходов из начальной позиции. Пример запуска: scripts/opengen.sh
- scripts/play.sh - пример скрипта как с помощью утилиты cutechess-cli сыграть много партий
- cmd/fengen - позволяет по сыгранным партиям создать датасет для обучения. Пример запуска: scripts/fengen.sh
- cmd/trainhce - настраивает коэф-ты HCE. Пример запуска: scripts/trainhce.sh
- cmd/train - обучает нейросеть. Пример запуска: scripts/train.sh
Если после обучения, новая ОФ показывает прибавку в силе, то можно создать новую обучающующую выборку с использованием улучшенной ОФ и провести процесс обучения заново.