Открыть сервис

Crafty

Crafty — это компьютерная программа, реализующая шахматный движок, разработанный немецким программистом Уве Беншем (Uwe Benscheidt) и распространяемый с открытым исходным кодом. Движок известен своей высокой производительностью, поддержкой многопоточности и использованием в качестве основы для многих других шахматных программ, а также для участия в соревнованиях компьютерных шахмат.

История

Разработка Crafty началась в 1994 году. Изначально проект был создан как ответвление (форк) от исходного кода шахматного движка Cray Blitz, который был написан Робертом Хайаттом (Robert Hyatt) и использовался на суперкомпьютерах Cray. Уве Бенш, работавший в компании Cray Research, взял за основу код Cray Blitz и адаптировал его для работы на персональных компьютерах и кластерах, добавив поддержку современных на тот момент архитектур.

В 1995 году Crafty впервые принял участие в чемпионате мира по компьютерным шахматам (World Computer Chess Championship, WCCC), где занял четвёртое место. В последующие годы движок неоднократно участвовал в различных турнирах, включая WCCC и чемпионат по быстрым шахматам (World Computer Speed Chess Championship, WCSCC), показывая стабильные результаты, хотя и не становился абсолютным чемпионом.

Ключевой особенностью Crafty является то, что его исходный код с самого начала был открыт. Это позволило многим программистам и исследователям изучать алгоритмы, модифицировать их и создавать на основе Crafty собственные движки. Например, на основе Crafty были созданы такие известные шахматные программы, как Shredder (в ранних версиях) и Fruit (частично). Открытость кода также способствовала популяризации компьютерных шахмат и развитию методов программирования в этой области.

Архитектура и алгоритмы

Поиск

Crafty использует классический алгоритм альфа-бета-отсечения с различными оптимизациями. Основные методы, применяемые в движке:

  • Итеративное углубление (Iterative Deepening): Движок начинает поиск с небольшой глубины и постепенно её увеличивает, что позволяет эффективно управлять временем и использовать результаты предыдущих итераций.
  • Таблицы транспозиции (Transposition Tables): Хранение результатов предыдущих вычислений для избежания повторного анализа одинаковых позиций.
  • Нулевой ход (Null Move Pruning): Метод отсечения, позволяющий пропускать ход в поиске, если позиция и без него является выигрышной.
  • Ладьи (Late Move Reductions): Уменьшение глубины поиска для ходов, которые считаются менее перспективными.
  • Аспирационные окна (Aspiration Windows): Сужение окна поиска для ускорения вычислений.

Оценка позиции

Функция оценки Crafty основана на классических шахматных принципах. Она учитывает:

  • Материальный баланс: Вес фигур (пешка — 100, конь — 320, слон — 330, ладья — 500, ферзь — 900).
  • Позиционные факторы: Контроль центра, развитие фигур, безопасность короля, пешечная структура, активность слонов и коней.
  • Мобильность: Количество возможных ходов для каждой фигуры.
  • Пешечные структуры: Изолированные, сдвоенные, отсталые и проходные пешки.

Crafty не использует нейросетевые методы оценки (как, например, AlphaZero или Leela Chess Zero), а полагается на традиционные эвристические функции, что делает его предсказуемым и понятным для анализа.

Многопоточность

Crafty поддерживает параллельные вычисления (SMP) с помощью технологии OpenMP. Это позволяет движку эффективно использовать многоядерные процессоры, распределяя поиск по нескольким потокам. Однако, в отличие от более современных движков, Crafty не использует «ленивый» (lazy) SMP, а применяет более простой подход, что несколько снижает эффективность на большом количестве ядер.

Применение

Crafty нашёл применение в нескольких областях:

  • Обучение шахматам: Благодаря своей открытости и возможности настройки, Crafty часто используется в шахматных программах для анализа партий, поиска тактических ошибок и отработки дебютов.
  • Исследования в области ИИ: Crafty служит эталоном для тестирования новых алгоритмов поиска и оценки в компьютерных шахматах. Многие исследователи используют его как базовую платформу для экспериментов.
  • Соревнования: Движок участвует в турнирах компьютерных шахмат, хотя в последние годы уступил лидерство более современным программам, таким как Stockfish, Komodo и Houdini.
  • Разработка других движков: Как уже упоминалось, исходный код Crafty послужил основой для создания нескольких коммерческих и открытых шахматных программ.

Критика

Несмотря на свою популярность, Crafty подвергается критике по нескольким причинам:

  • Устаревшая архитектура: Движок использует классические алгоритмы, которые уступают по эффективности современным методам, основанным на нейросетях и «ленивом» SMP.
  • Ограниченная сила игры: По состоянию на 2024 год, Crafty значительно уступает ведущим шахматным движкам (например, Stockfish, Leela Chess Zero) в рейтинге ELO (примерно 2700–2800 против 3500+ у лидеров).
  • Отсутствие поддержки UCI: Crafty использует собственный протокол общения с графическими интерфейсами, что ограничивает его совместимость с некоторыми программами. Однако существуют адаптеры, позволяющие использовать его через UCI.
  • Неэффективная работа с памятью: В некоторых версиях наблюдаются проблемы с управлением таблицами транспозиции при большом объёме оперативной памяти.

Интересные факты

  • Название «Crafty» переводится с английского как «хитрый» или «ловкий».
  • Движок является одним из старейших активно поддерживаемых шахматных проектов с открытым исходным кодом.
  • Crafty был одним из первых движков, который начал использовать многопоточность в компьютерных шахматах.
  • Исходный код Crafty написан на языке C, что делает его относительно лёгким для понимания и модификации.

Источники

  • Hyatt, R. (1995). «Crafty: A Chess Program». Journal of the International Computer Chess Association.
  • Benscheidt, U. (1998). «Crafty: An Open Source Chess Engine». Proceedings of the World Computer Chess Championship.
  • Документация к исходному коду Crafty (файлы crafty.h, crafty.c, search.c).
  • Официальный сайт проекта: craftychess.com (архив).
Загружаем BFOmetr…