SoFCheck
38 subscribers
64 links
Заметки по поводу разработки шахматного движка SoFCheck

Репозитории:
https://github.com/alex65536/sofcheck
https://github.com/alex65536/sofcheck-engine-tester
https://github.com/alex65536/sofcheck-weights-tuning
Download Telegram
Channel created
Channel photo updated
/ ^---^ \
/ / @ @ \ \
|| \ v / ||
|| / \ ||
|| / / \ \ ||
|| \/\___/\/ ||
\ | | /
\ ^ ^ /
__ ___ __
/ \ | / \ | |
\__ __ |__ / |__ __ __ |
\ / \ | \ | | /__\ / |_/
\__/ \__/ | \__/ | | \__ \__ | \
Жаль, что я этот канал начал, когда уже много кода написано, но все же

Коротко опишу все, что уже существует в самом движке и в проектах вокруг него. Начну с самого движка:
- быстрые правила с использованием Magic Bitboards и PEXT Bitboards (для новых CPU)
- проверка правил на корректность путем сравнения их с моей более старой реализацией, Dodecahedron
- почти полноценная реализация протокола UCI со стороны движка
- альфа-бета поиск с PVS
- сортировка ходов с MVV/LVA, киллерами и эвристикой истории
- хэш-таблица
- простая многопоточность: потоки обмениваются информацией только через хэш-таблицу, т. е. если поток видит, что позиция уже была просчитана, то он просто берет результат
- поиск взятий в конце для устранения эффекта горизонта
- простой Futility Pruning
- проверки для рекурсивного поиска: проверяют, что все инварианты в коде соблюдены, включаются отдельным флагом
- простая оценка позиций на основе таблиц фигура-поле + немного дополнительных факторов
- автоматический подбор коэффициентов оценки (об этом позже)
- немного бенчмарков и тестов ко всему этому
Для тестирования проекта используется программа Battlefield, которая может гонять партии движков друг с другом и оценивать статистическую значимость результатов. Эта программа написана на языке Pascal, потому что использует куски кода из моего более старого проекта, Chess256. Здесь правила реализованы практически «в лоб», поэтому Battlefield работает не очень быстро, что может быть заметно на ультракоротких партиях, а в остальном проблем не доставляет (т.к. все равно большую часть времени CPU уходит на обдумывание ходов движками)

Эта штука используется для проверки гипотез и оценки качества: если новая версия может статистически значимо победить предыдущую, то мы ее принимаем. К сожалению, так можно обнаружить только большие изменения в силе игры (на ~30-70 Эло). Чтобы обнаружить небольшое изменение, придется гонять очень много партий, а это долго