Читать нас в Telegram

Шахматы и развитие искусственного интеллекта во второй половине прошлого века имели общую историю. Создание шахматных программ в 1972 году было провозглашено одной из основных задач ИИ. Это очень понятно: шахматы хорошо формализуемая игра, и, как казалось, подходила для тренировки новых технологий перед тем, как те выйдут на простор более серьезных, неигровых задач.

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

И сейчас я помню карикатуру из тогдашней «Комсомолки» со стихотворной подписью:

Мне бы шашку и коня
Да на линию огня
А вот эти микросхемы — 
Это всё не про меня

Речь, конечно, идет о знаменитом матче между Гарри Каспаровым и Deep Blue в 1990-х. Но на самом деле это еще не был конец борьбы: уже только после матча между Владимиром Крамником и машиной в 2000-х стало понятно, что компьютеры в шахматах заведомо сильнее.

Теперь интерес шахматистов к компьютерам гораздо больше, чем инженеров к шахматам. У разработчиков появилось много новых возможностей для тренировки ИИ, а формализованной среды шахмат уже не хватает, чтобы пробовать в ней новые сложные алгоритмы машинного обучения. Зато скорость, с которой шахматные программы (так называемые движки) просчитывают варианты развития партии, очень привлекательна для подготовки живых игроков к партиям, поиска дебютных новинок и оценки позиции. Иначе говоря, компьютер может оценить, насколько каждый из игроков ближе к победе. Эта функция полезна не только профессиональным игрокам, но и любителям: комментаторы шахматных трансляций часто включают ее для зрителей, которые могут наблюдать, как черная и белая полоски меняют свою длину после каждого хода, высвечивая интригу на клетчатой доске.

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

И да, это еще одно упражнение на тему шахмат и цифры, про прошлое (Chess Bead Game) я когда-то писал тут.

Итак, главная идея в том, чтобы объединить шахматы и го в одну игру. Зачем? У этих игр есть явное взаимное притяжение такой силы, что в переводе (английском и русском) фильма «Герой» дом для игры в го называют шахматным домом. Сделано это для того, чтобы не знающие реалий западные зрители не почувствовали дискомфорта. Тем не менее, переводчики не просто так сопоставили эти две игры, в них действительно есть много общего: две соперничающие стороны, черный и белый цвет игровых элементов, клетчатая структура квадратного игрового поля, борьба за пространство как стержневая идея.

Кадр из фильма «Герой», на заднем плане отчетливо видна доска для игры в го размером 9×9

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

В го играют на досках разной размерности. Кажется, сейчас наиболее популярен формат 19×19. Это значит, что на доске будет 18×18 клеток. Но бывает и формат 9×9, не слишком популярный, однако допустимый. 9×9 линий образуют 8×8 клеток, для го бесполезных, но зато как раз нужных для игры в шахматы. Если эти клетки понятным образом раскрасить, то получится шахматная доска, которая при этом не перестанет быть доской для игры в го.

На такой доске можно играть в шахматы и в го одновременно.

В чем интерес?

Во-первых, он спортивный. Спорт показывает заинтересованность в объединении нескольких видов состязаний в одно, достаточно посмотреть на разного рода двоеборья, троеборья и многоборья. Один из самых популярных видов спорта — биатлон, в котором нужно соревноваться в лыжной гонке и в точности стрельбы. Победа зависит от успешности выступления в обоих жанрах. Только название у него лингвистически слишком пестрое: би из латыни, а атлон из греческого. Лучше взять компоненты из одного языка, так стройнее и последовательнее. Пусть будет греческий: дуатлон.

Во-вторых, он геймплейный. Как разнообразить шахматы, не меняя шахмат? Современная игра требует не только хорошего чувства позиции, но и памяти для зазубривания дебютных вариантов. Чтобы исключить этот фактор и уравнять шансы соперников с дебютной подготовкой и без дебютной подготовки, шахматы давно пытаются модифицировать. Самый известный вариант — «шахматы Фишера», в которых фигуры расставляются на своих горизонталях случайным образом. Но бывают и квантовые шахматы, и трехмерные шахматы. Недостаток у всего этого многообразия ровно один — эстетический. Есть ощущение, что при этом теряется что-то главное, самый дух шахмат, то, что делало эту игру великой. Соединив шахматы с го, сделав обе игры одинаково значимыми для выигрыша, мы уравняем шансы соперников, которые имеют разный уровень в шахматах и в го, но при этом не разрушим эстетическую целостность шахмат. Кстати, попытки сломать го, превратив их в шахматы, или сломать шахматы, превратив их в го, уже были. Шурик, это не наш метод. У нас все правила шахмат и все правила го остаются классическими.

Средняя шахматная партия длится 37 ходов (спасибо за подсказку Г. А. Морозу), партия в го на доске 9×9 — ориентировочно 40–45 ходов, цифры в целом сопоставимые.

Как организовать соединенную игру?

В шахматах преимуществом первого хода владеют белые, а в го — черные. Еще одно удачное обстоятельство, способное уравнять шансы игроков. Пусть будет так: сначала игрок, играющий белыми, делает ход в шахматах, затем игрок, играющий черными, ставит на доску камень го, затем он же делает ответный ход черными в шахматах, и только после этого на доску ставится белый камень го. Подробнее тут.

Шахматный дуатлон. Каждый из игроков сделал по одному ходу в шахматы и в го.

Единственное правило, отличающее дуатлон от обычных шахмат и го, — если партия в одну из игр заканчивается, то заканчивается и вторая игра. Как теперь определить победителя? И вот тут мы снова возвращаемся к цифре.

Для го в порядке вещей, что победитель определяется количеством заработанных за доской очков. Так что тут все понятно. Очевидно, к ним нужно прибавить очки, в которые конвертируются шахматные успехи. Положим, за проигрыш 0, за победу — много. Точные коэффициенты я озвучить не решусь. Высчитать их нужно будет исходя из конкретной игровой практики. Ничья бессмысленна, за нее определенно будет даваться равное число очков, а значит, что победитель будет определяться только партией в го. Кстати, это один из стимулов не играть на ничью, а рисковать и стараться провести результативную партию: мотивация избавиться от проклятья ничьих. Возможно также, что стратегия дуатлона не будет позволять игроку сдаться даже в безнадежной позиции.

Но обо всем этом можно говорить только если партия в шахматы закончилась раньше партии в го. А если случилось наоборот? Положим, все камни уже расставлены на свои перекрестья, игра в го завершилась, а в шахматах дело далеко до финала: мат не поставлен и на ничью соперники не соглашаются. Но ведь мы как раз и говорили выше, что шахматные движки умеют количественно оценивать позицию, высчитывая преимущество. Эту оценку и следует пересчитать в очки и добавить к очкам, выигранным в го. Возможно, они смогут повлиять на результат.

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

И под конец попробуем запустить код на питоне. В дуатлон по-настоящему пока никто не играл, так что мы можем только его смоделировать, соединив уже состоявшиеся когда-то раздельные игры.

Возьмем шахматную партию Веселина Топалова и Алексея Широва из 2002 года и совместим ее с партией в го между Хирофуми Охаси и Ияма Юта из 2003 года. С помощью скрипта визуализируем ходы:

python generate_game.py 02G1PO.pgn 2.sgf duo_img

Это наш случай. Последним на доску поставлен белый камень. Партия в шахматы еще может продолжиться (в 2002 году она продолжалась еще 2 хода):

Партия в го уже закончилась, партия в шахматы еще нет. Позиция на момент 36 хода во встрече Топалов-Широв (2002)

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

Для наглядности сделаем гифку, анимирующую ход партии:

import os
import imageio

images = []
for filename in sorted(os.listdir('duo_img')):
    if not filename.endswith(".png"):
        continue
    images.append(imageio.imread(os.path.join('duo_img', filename)))
imageio.mimsave(
    'chego.gif',
    images,
    format="GIF",
    duration=3,
)

Теперь можно посмотреть на игру последовательно:

GIF-анимация партии

Homepage шахматного дуатлона здесь.