Каковы хорошие ресурсы для написания шахматного движка?

Мне интересно писать шахматный движок (в основном как учебное упражнение), и он будет интересоваться любыми ресурсами, которые люди знают об этом, может быть интересным или полезным, что-то действительно: документы, книги, теория, учебники, что угодно это может быть полезно.

Ответ 1

Из моих архивов:

Ответ 2

Создавая мой шахматный движок, я потратил месяцы, пытаясь собрать хорошие ресурсы, которые описывают некоторые более сложные аспекты создания шахматной игры. Вот список тех, которые я нашел наиболее полезными:

Шахматное программирование Франсуа Доминика Лараме

Это статья, которая превратила меня в компьютерные шахматы. Это отличный обзор того, как компьютеры играют в шахматы. Это очень легко читать, и он познакомит вас со всеми условиями и ключевыми словами.

http://www.gamedev.net/page/resources/_/technical/artificial-intelligence/chess-programming-part-i-getting-started-r1014

Компьютерная шахматная wiki, это действительно расширилось за последние несколько месяцев. Это отличный ресурс для справочного материала.

http://chessprogramming.wikispaces.com/

Компьютерные шахматные ссылки Луи Кесслера

Как только вы пройдете через указанные выше ресурсы, остаток можно найти на следующей странице ссылок.

http://www.lkessler.com/cclinks.shtml

И последнее, но не менее важное: я пишу Компьютерный шахматный блог, в котором вы можете пройти все шаги по написанию шахматного движка на С# с нуля, в нем есть раздел компьютерных шахматных ссылок и стартовый комплект шахматной игры.

http://www.chessbin.com

Адам Берент

Ответ 3

Обзор многих алгоритмов, полезных в шахматах - http://www.frayn.net/beowulf/theory.html - должен стать хорошей отправной точкой для понимания меры проблемы, и несколько способы упрощения вычислительной работы.

-Adam

Ответ 4

Вы всегда можете заглянуть в код GNU Chess.

Ответ 5

Клод Шеннон 1949 г. (предупреждение: PDF) по этому вопросу является хорошим отправным местом

Ответ 6

Лучшее учебное пособие по шахматам для начинающих - GameDev. Это очень легко понять, в то время как оно очень детализировано.

Ответ 7

Это в основном в области Искусственный интеллект (AI).

Самый распространенный способ заставить компьютер "думать" в шахматной игре использовать метод mini-max, где компьютер" думает" по анализируя результаты от того, чтобы сделать разные шаги загодя из текущего состояния.

"Хоровость" результатов от разных ходов может определяться по многим критериям, таким как оценка, количество врагов, оставшихся, состояние победы, например. Например, если вы переместите игрока вправо, и вы выиграете игру, это очень хорошее состояние. Но если вы переместите его влево, вы ничего не получите. Разумно двигаться вправо. Эта функция, которая определяет "доброту", обычно называется эвристической функцией.

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

пс. Есть несколько деталей алгоритма mini-max, который я здесь не объяснил, но это должно охватывать основную идею.

Ответ 8

Я присоединился к той же лиге Пола Викса (выше), я тоже хочу написать шахматный движок для моего собственного обучения, только ограничение - это моя дневная работа (которая должна работать на скучных веб-сервисах и т.д.). но его стоит боль.

Я решил построить его, используя поэтапный подход. Я почти прошел через многопользовательскую часть, то есть (HUMAN vs HUMAN).

Как только я покончу с этим, я хотел бы включить уровень AI для поддержки схемы (COMPUTER vs HUMAN). Это та часть, с которой меня больше всего волнует, я нашел очень полезные подсказки здесь, в этот поток, большое спасибо всем вам.

В настоящее время язык, с которым я хорошо разбираюсь, - это Java, если есть производительность то я могу перенести его на С++.