Шахматы. Как выиграть у бота. История шахматного программирования. Интересные ключевые исторические события. Принципиальная разница мышления в шахматах человека и бота. В каких позициях человек пока еще сильнее. Показательная партия против бота.
В рамках предварительной подготовке неплохо было бы научиться играть в шахматы (и/или вспомнить-повторить некоторые сложные ключевые моменты, например: взятие на проходе, нотация, как и где играть в шахматы с ботами и людьми и т.п.).
Есть у меня инструкция по данной теме в двух форматах:
Умение выигрывать в шахматы у людей можно рассматривать, как первую ступень в развитии шахматных способностей.
К тому очень интересно наблюдать за разницей в подходе к шахматной игре между людьми и ботами.
Рассмотрим несколько примеров.
Дальняя защита пунктов с тыла неприятеля.
Ход черных
Если черными играет человек, то белые вполне могут рассчитывать на зевки типа Фd4+ или Кe3, особенно, если слон на a7 стоит в засаде давно, и черные могли "забыть" о его существовании.
Человек часто зевает такие длинные защиты пунктов с тыла. А вот бот - никогда. Ему все равно, как защищен пункт, все защиты он видит, помнит и трактует одинаково хорошо.
Самое удивительное, что я, прекрасно зная об опасности таких дальних защит (и нападений), время от времени пропускаю такие вот защиты и нападения.
Ход белых
Позиция из партии турнира:
Московский блиц • 26 окт. 2022 Октябрь 8 Этап
Черными играл Евгений Шувалов, известный шахматный блогер.
Позиция примерно равная. Мне надо было пойти, например, Фe3, ставя ловушку на ферзя (Сh7+).
Но я, на свою беду, сделал "блестящий" двойной удар Фf5, нападая на мат и на коня d7. И только после спокойной защиты g6, увидел, что коня брать нельзя. Он защищен слоном с a4.
Надо ли говорить о том, что бот на моем месте никогда бы не сделал такой ошибки!
И еще пример для демонстрации разницы между мышлением человека и бота.
Конь - животное коварное, но только для человека, не для бота!
Ход белых
Позиция из партии турнира:
Московский блиц • 16 нояб. 2022 Ноябрь 5 Этап
Белыми играл Omega_mega_ega_ga_a, черными я - sumat777.
В партии события развивались так.
В дебюте, а это было английское начало:
[Opening "English Opening: King's English Variation, Two Knights Variation"]
Я лихо пожертвовал черными пешку, чтобы смутить противника своей наглостью, в соответствии с собственными установками на игру (смотри и слушай Как выиграть у человека.)
В результате получил небольшое преимущество, затем это преимущество успешно растерял, в результате получилась такая вот примерно равная эндшпильная позиция.
Противник задумался, время было достаточно. Он залез в глубь варианта после хода 1. Л:g7, но затем его озарила "счастливая" идея, что хорошо бы предварительно прогнать коня. И он сходил 1. a3? и после 1... Кс6+ потерял чистую ладью.
Практический вывод такой. Если в партии против человека есть резоны менять слона на коня, с тем расчетом, что где-то человек коневую вилку зевнет обязательно, то в партии против бота такие надежды имеют мало шансов на реализацию.
И еще одну важную разницу между мышлением человека и бота хочется подчеркнуть на данном примере.
Человек часто тратит время на расчет глубоких вариантов, а потом неожиданно для самого себя делает первый попавшийся ход, который вообще никак не связан с предварительными расчетами.
Бот никогда так не делает. Он рассчитывает варианты и делает ходы дисциплинированно.
На следующих страницах мы отметим еще другие отличия между мышлением человека и бота.
Конечно, такие разработки нужны (прежде всего, самим разработчикам).
Но темой нашего исследования будут серьезные разработки уровня StockFish.
Да, сразу следует себя настроить на решение сложной задачи. Боты уровня StockFish стабильно выигрывают у людей (даже у ведущих мировых гроссов).
Так что, задача очень сложная, но интересная. И пока что, какие-то шансы у человека есть. Мы попытаемся нащупать слабые места ботов.
Зачем вообще нужно стараться выиграть у бота? Чтобы повысить свои уровни игрока-шахматиста и профессионала-программиста.
Шахматы - это прекрасная во всех смыслах тренировочная площадка для подготовки к решению более сложных и практически более нужных задач.
Каждый уважающий себя программист должен написать свою шахматную программу (для тренировки). Ну, или, хотя бы, игру "Тетрис". Или, хотя бы, игру Военного Пилота
С другой стороны, каждый уважающий себя шахматист должен выиграть у сильного бота. Или, хотя бы, постараться это сделать.
Шахматное программирование. Интересные исторические моменты.
1966 год - в СССР создана компьютерная программа, которая умеет играть в шахматы. Эта программа была создана в ИТЭФе - Институте теоретической и экспериментальной физики. Эту программу можно назвать прототипом известного бренда - знаменитой шахматной программы "Каисса".
Программисты: Арлазаров, Адельсон-Вельский, Усков, Гутер, Донской. Руководитель: А. С. Кронрод.
HardWare (железо для этой программы): M-20 — советская ламповая электронная вычислительная машина. Элементная база: 1600 электровакуумных ламп, полупроводниковые диоды. Занимаемая площадь: 170—200 кв.м.
Полезно и интересно почитать:
Статья "Вычислительные машиныи системы счисления". Автор Р. С. Гутер. Журнал "Квант" 1971 год, номер 09. Стр. 1 -
Стр. 2 -
Стр. 3 -
Стр. 4 -
Стр. 5 -
Стр. 6
Статья "Язык человека и язык машины". Автор Р. С. Гутер. Журнал "Квант" 1971 год, номер 10. Стр. 1 -
Стр. 2 -
Стр. 3 -
Стр. 4 -
Стр. 5
Все номера и статьи журнала "Квант" вы можете бесплатно почитать на ресурсе:
kvant.mccme.ru
Например:
Квант >> 1974 год >> номер 11
kvant.mccme.ru/1974/11/
И т.д.
Во время визита в Советский Союз в 1965 году профессор Джон Маккарти - John McCarthy (1927-2011) принял вызов на товарищеский матч. Указанная выше советская программа должна сыграть против американской шахматной программы Стэнфордского университета (программисты Коток и Маккарти, Kotok-McCarthy).
Результат этого исторического матча, состояшегося в 1967 году, 3:1 в пользу советской программы (2 победы, 2 ничьи).
Полезно и интересно почитать:
Статья "Машина играет в шахматы". Авторы Р. С. Гутер, М. В. Донской. Журнал "Квант" 1974 год, номер 11. Стр. 17 -
Стр. 18 -
Стр. 19 -
Стр. 20 -
Стр. 21 -
Стр. 22
Некоторые ключевые теоретические моменты из этой статьи.
Выбор хода.
Довольно просто "научить машину" делать ход, т.е. проверить его возможность и внести соответствующие изменения в записи позиции.
Неизмеримо сложнее научить ее выбирать ход, предпочтя из нескольких возможных в данной позиции один "наилучший". Для этого надо уметь сравнивать различные ходы.
Одним из способов может служить перебор вариантов. Но перебор "до конца", т.е. до позиции, в которой известен результат, невозможен из-за необозримых размеров требуемого числа вариантов. Приходится ограничиваться рассмотрением некоторого определенного количества ходов. Но тогда нужно уметь сравнивать позиции и отвечать на вопрос, какая из них лучше. После этого мы можем считать, что лучшим ходом является тот, который ведет к лучшей позиции.
Наиболее простой оценкой может служить разница материальных ресурсов белых и черных. При этом каждая фигура оценивается определенным количеством очков (баллов). Для оценки позиции достаточно подсчитать сумму баллов, соответствующих находящимся на доске белым и черным фигурам, и найти их разность.
Конечно, такая оценка является слишком грубой: известно, что часто приходится жертвовать материалом ради приобретения позиционных или тактических преимуществ. Поэтому более тонкие оценки включают также и тактические факторы: возможность форсированного выигрыша материала, наличие сдвоенных пешек у себя или у противника, возможность рокировки, занятие ладьей или ферзем открытой линии и т.п.
...
Выбор хода осуществляется при помощи минимаксной процедуры, которую мы проиллюстрируем на примере перебора на 1 ход. Пусть из позиции A (ход наш) возможны ходы, приводящие к позициям B1, B2, B3 ... (рис. 2).
Из полученных позиций возможны ходы противника, приводящие к позициям C1, C2, C3, C4, ..., оценки которых нам известны.
Поскольку в позиции, скажем, B1, противник выберет, скорее всего, самый сильный возможный ход, то за оценку B1 следует принять минимальную из оценок позиций C1, C2, C3.
Так же определяются оценки остальных позиций B2, B3, ..., получающихся после различных наших ходов.
Зная оценки позиций B1, B2, B3, мы можем выбрать из них наибольшую. Ход, ведущий в позицию с этой максимальной оценкой, и будет лучшим при выбранной глубине перебора.
Аналогичная стратегия выбора хода применяется и при любой другой глубине перебора: из данной позиции делается заданное число ходов, и полученная позиция оценивается с помощью выбранной оценочной функции.
Затем изменяется последний ход и оценивается новая полученная позиция. После того как проверены все возможные последние ходы, изменяется предпоследний и т.д., чтобы в конечном счете были оценены все позиции, которые могут получиться из исходной.
Полученные на "нижнем уровне" оценки переносятся "вверх", причем для позиций с ходом противника выбирается минимальная, а для позиций с нашим ходом - максимальная из оценок "ниже расположенных позиций".
Т.о., свой ход и ход противника следует рассматривать по-разному. В дальнейшем мы будем называть их полуходами. Пример схемы выбора хода при переборе на 3 полухода приведен на рис. 3.
Здесь кружки означают позиции, красные отрезки - свои ходы, синие - ходы противника.
Цифры в кружках означают оценки позиций, полученные описанным выше путем (для "нижних" позиций с помощью оценочной функции, для "вышестоящих" - по минимаксной процедуре).
Цифры возле отрезков показывают последовательность рассмотрения соответствующих ходов при переборе.
Двойными линиями отмечены лучшие ходы для каждой позиции.
Позже, мы используем эти идеи в нашей работе, а пока...
Давайте, посмотрим, одну из партий этого матча, которая приведена в данной статье.
Текст партии в формате PGN:
Нажмите кнопку выше, чтобы "запомнить текст шахматной партии", другими словами, "поместить в буфер обмена".
Нажмите на эту ссылку: Шахматы. Смотреть. ➳, чтобы открыть страничку с шахматным вьювером (откроется в новой вкладке).
Ткните в поле "Текст партии" (внизу), нажмите CTRL-V. Текст партии будет скопирован из буфера обмена в это окно.
Нажмите кнопку "Просмотр игры". Текст партии подготовлен к просмотру.
Нажмите кнопку "Playing all moves" во вьювере.
Стокгольм, 1974. Первый чемпионат мира среди шахматных программ.
Во время конгресса ИФИП в Стокгольме состоялся I чемпионат мира среди шахматных программ.
СССР представляла программа "Каисса", созданная в институте проблем управления Г. М. Адельсон-Вельским, В. Л. Арлазаровым, М. В. Донским и другими.
Партии проходили в концертном зале отеля "Биргер Ярл". Директор турнира международный мастер Д. Леви все время комментировал партии.
"Каисса" заняла первое место, победив программы "Франц", "Теч-2", "Хаос", "Острич".
Полезно и интересно почитать:
Статья "Чемпионат мира среди шахматных программ". Автор М. В. Донской. Журнал "Квант" 1974 год, номер 12. Стр. 34 -
Стр. 35 -
Стр. 36 -
Стр. 37 -
Стр. 38
Некоторые интересные моменты из этой статьи.
Неожиданности и курьезы.
В первой партии против австрийской программы "Франц" "Каисса" после 30 хода стала подолгу думать, и если бы не поставила мат на 34-м ходу, то наверняка просрочила бы время.
Это объясняется тем, что на 30-м ходу "Каиссы" в Москве наступила полночь, а "Каисса" не разобравшись с часами, решила, что ей остается на обдумывание больше 24 часов. Может быть, именно такая неторопливость и позволила ей найти матующую комбинацию.
Неожиданности продолжались и во втором туре в партии против "Теч-2".
По правилам турнира в случае технических неполадок можно было взять получасовой перерыв на их исправление.
Автор "Теча", утомившись затяжной партией 1-го тура (она продолжалась до 3-х часов ночи), попросту проспал начало тура и опоздал ровно на полчаса. Это ему было засчитано как перерыв на технические неполадки, и потом в течение партии он не имел право останавливать часы.
Неаккуратность автора "Теча" сказалась и в партии - он сделал не тот ход, который сообщила ему машина, и слишком поздно заметил это.
Ход был возвращен назад, но это сбило с толку "Каиссу" и привело ее к ошибке.
В конце концов пришлось ввести эту позицию в машину заново и переиграть партию
Технические ошибки наших противников стали недоброй традицией.
В третьем туре, уже после того, как в партии "Каиссы" с "Хаосом" была объявлена победа "Каиссы", авторы "Хаоса" заявили, что они ошиблись при вводе в свою машину предпоследнего хода "Каиссы".
Они попросили разрешения переиграть партию с этого хода, но никто всерьез не рассчитывал, что мы примем это предложение, особенно после того, как Леви сказал, что если при переигровке у "Каиссы" сломается машина, то никакого прощения ей не будет.
Тем не менее, после консультации с Арлазаровым мы решили продолжать эту партию, что было очень высоко оценено американскими программистами.
Несмотря на то, что "Каисса" довольно быстро поставила мат, это было существенно для наших противников, потому что в случае равенства очков предпочтение оказывалось той программе, которая быстрее выигрывала и дольше проигрывала.
Внимание местных газет к турниру ослабевало по мере того, как становилось понятнее, что "Каисса" будет чемпионом. Поздравления начались уже в третьем туре, но в четвертом мы имели много неприятностей от "Острича".
Столик, за которым игралась наша партия, был вынесен на авансцену.
Автор "Острича" - М. Ньюборн (зная, что "Каисса" хорошо разбирается в индийской защите) в последнюю минуту внес коррективы в свою дебютную справочную, заменив первый ход d4 на Кf3. Когда он увидел, что "Каисса" знает и этот дебют, он в буквальном смысле схватился за голову, поскульку "Острич" не имел в своей библиотеке ни одного продолжения.
Тем не менее, в этой партии, как и в других, сказался основной недостаток нашей программы - несовместимость идей, заложенных в дебютную справочную, и идей, заложенных в игровую часть программы. В итоге "Каисса" начала с проигрыша качества. Когда, поддавшись панике, я посчитал, что для переигровке за первое место нам надо продержаться 48 ходов, из Москвы твердый голос Арлазарова заявил: "Все равно мы эту партию выиграем", хотя для победы в турнире хватило бы ничьей. И действительно, к 12-ти часам ночи дело приблизилось к развязке. "Каисса", отыграв 2 пешки, повела свои пешки в ферзи и закончила, как всегда, элегантным матом.
"Каиссе" была вручена золотая медаль чемпиона мира вреди шахматных программ. Медаль вручали президент ИФИП австралийский ученый Земанек и английский издатель Максвелл, на чьи деньги была сделана из чистого золота 110-граммовая медаль. Вручая медаль, Максвелл назвал нас первыми обладателями этой медали, из-за чего все корреспонденты сочли этот трофей переходящим. Однако потом Земанек официально объявил, что медаль вручена советским ученым навечно.
Организаторы турнира остались недовольны только тем, что лучшие программы турнира - "Каисса" и "Чесс-4.0" не сыграли друг с другом.
Поэтому мы решили сыграть товарищескую партию. На этот раз соперник вышел из дебюта не только с преимуществом, а просто в выигранной позиции - эндшпиль с двумя лишними проходными пешками. Уже поступило предложение в случае быстрого проиграша "Каиссы" сыграть еще одну партию, поменявшись цветом фигур, но "Каисса" снова всех удивила - она сумела не только отыграть пешки, но и выиграть фигуру. Однако для победы этого преимущества не хватило.
После каждого тура участники собирались в "мирном" уголке зала и спокойно обсуждали научные результаты турнира и перспективы развития шахматного программирования. Эти обсуждения были очень полезны для участников.
Расставаясь, мы договорились встретиться на следующем конгрессе ИФИП в 1977 году в Канадском городе Торонто.
Торонто, 1977. Второй чемпионат мира среди шахматных программ.
Решающей и самой интересной оказалась партия из первого тура, которую "Каисса" играла черными против "Duchess".
Позиция из партии:
"Duchess" - "Каисса", Торонто, 1977. Тур: 1.
Ход белых
После 34.Фa8+ все, программисты и зрители ожидали от Каиссы естественного хода 34. ... Крg7.
Однако, Каисса неожиданно отдала ладью: 34. ... Лe8. Затем после 35.Ф:e8+ Каисса постепенно проиграла без каких-либо контршансов.
Полный текст партии "Duchess" - "Каисса" в формате PGN:
Специалисты, среди них были гроссмейстеры Ботвинник, Эдуард Ласкер, Ганс Берлинер, канадский международный мастер Леон Пиасетский эту комбинацию не обнаружили и объясняли народу этот заскок Каиссы "несовершенством шахматных программ".
В конечном результате турнира Каисса разделила 2—3 места с программой Duchess. Победила в чемпионате программа Chess 4.
До сих пор идут диспуты, а увидела бы программа Duchess во время партии этот выигрывающий ход 35.Фf8+
Далеко не факт, учитывая, ограниченность времени на обдумывание в турнирной партии.
В любом случае, если ход 34. ... Лe8 объективно сильнее (т.к. затягивал поражение на много ходов), то никто не будет спорить, что практических шансов больше у скромного хода 34. ... Крg7
Такие тонкие моменты не понимали шахматные программы в 1977-м году, не понимают их они и сейчас, в 2022-м.
Возьмем этот факт на заметку, он нам пригодится для дальнейших побед над ботами.
Как сделать шахматного бота (программу, которая играет в шахматы).
Как и любой сложный проект, проблему создания шахматного бота было бы полезно разбить на логические подзадачи и решить их по отдельности.
Здесь задача красиво делится на 2 подзадачи.
Программа, которая знает правила шахматной игры
Программа, которая умеет находить сильнейший ход в любой позиции
Программа, которая знает правила шахматной игры
Таких программ, начиная с 1971-го года и по наше время сделано уже тысячи и тысячи.
Нужно ли вам попытаться с целью тренировки изобрести новый лисопет и сделать еще одну такую программу?
Может быть, почему нет, если есть время и желание.
На практике вам может пригодится умение поддерживать и допиливать эту и подобные программы.
Вот пример. Допустим, есть у нас программа, которая понимает правила шахматной игры, она прошла многолетнюю промышленную эксплуатацию в онлайн-турнирах.
Теперь появилась идея создания похожей программы, но которая знает правила другой игры, похожей на стандартные шахматы. Это т.н. "варианты" ("variants"). Например: "поддавки" ("antichess"), "король на крыше" ("king on hill") и т.п.
Вообще, это общая современная тенденция. Нужны не столько программисты, которые могут что-то там сделать с нуля. Все понимают, что это сложно и дорого. Нужны люди, погруженные в какой-то проект, и которые могут его поддерживать, при необходимости внося какие-то небольшие изменения.
Здесь мы ограничимся просмотром реализации функционала соблюдения правил шахматной игры.
Обращаем внимание, что эта программа весьма старательно сама соблюдает правила игры и требует этого от партнера.
Играет, конечно, не очень хорошо, хода выбираются случайным образом. За это я и называю это программу мастером Рандомайзером.
Дело за малым, сделать так, чтобы программа по-прежнему выбирала легальные хода, но так, чтобы эти хода были наилучшими.
Давайте, попробуем.
Программа, которая умеет находить сильнейший ход в любой позиции
Кстати, обратили внимание, что процесс обучения шахматной игре программы похож на процесс обучения человека? Сначала мы просто обучаем его соблюдать правила игры. Затем учим играть хорошо.
Статья хоть и очень старая, но написана так качественно, что за эти годы концептуально мало что поменялось.
Из статьи становится ясно, что тут есть 2 принципиальных краеугольных камня.
Функция, которая оценивает позицию (оценочная функция).
Функция, которая как-то умеет определять максимальную глубину просмотра.
Функция, которая оценивает позицию.
Для простоты пока сделаем глубину просмотра равную одному полуходу и анализировать будем начальную позицию.
Ход белых
Опять же для простоты, чтобы не перенапрягать мозг, возьмем для оценки позиции следующие факторы (первые, которые пришли в голову).
Материал.
Количество пробиваемых полей (ударов по свободным полям).
Премия за очередь хода.
Проверка: нет ли кому-то вообще мата (пата) в данной позиции?
Материал Белые = 2Л*4.5+2К*3.0+2С*3.1+1Ф*9.0+8п*1.0=9+6+6.2+9+8=38.2
Материал Черные = 2Л*4.5+2К*3.0+2С*3.1+1Ф*9.0+8п*1.0=9+6+6.2+9+8=38.2
Количество пробиваемых полей Белые = 14 (пешки) + 4 (кони) = 18 (1.8 баллов)
Количество пробиваемых полей Черные = 14 + 4 = 18 (1.8 баллов)
Примечание. Пусть будет 0.1 балл за одно свободное поле под атакой.
Премия за очередь хода. Пусть пока будет 0. Не уверен, что это вообще хорошая идея.
Проверку на мат проводим. Вообще, вряд ли кому-то будет мат в начальной позиции или после первого полухода. Но проверять надо.
Оценка позиции = Белые - Черные = (38.2+18)-(38.2+18) = 56.2-56.2 = 0
Теперь нам надо подобным образом оценить все позиции после всех возможных ходов.
Оценка позиции после 1-го хода белых
Ход
Баллы
a3
0.0
a4
0.2
b3
0.2
b4
0.2
c3
0.2
c4
0.3
d3
0.6
d4
0.7
e3
0.9
e4
0.9
f3
0.0
f4
0.1
g3
0.2
g4
0.2
h3
0.0
h4
0.2
Кa3
0.1
Кc3
0.3
Кf3
0.3
Кh3
0.1
Получается следующий результат. Если применять данную оценочную функцию и использовать глубину расчета на 1 полуход, то в данной позиции получаются лучшие ходы: e3 или е4.
Теперь мы можем уточнить оценку начальной позиции. Если изначально она была равна 0, то после первого полухода стала равной 0.9.
Разумеется, если мы посмотрим чуть глубже (т.е. оценим все позиции после всех возможных 2-х полуходов), то оценка начальной позиции опять изменится. Наверное, она опять станет равной 0, например, после 1. e4 e6.
А если посмотреть немного глубже, хотя бы на 20 полуходов? Все это, конечно, можно сделать, но это уже все сделано до нас.
Работа в компаниях, которые занимаются шахматным программированием (и/или похожими разработками) во многом заключается в улучшение и модернизации текущей версии оценочной функции.
Вот пример процесса совещания в такой компании.
Петр. Давайте сделаем премию за шах! Например, 3 балла за шах.
Светлана. Чушь. От шаха никто не умирал.
Петр. Ну, шах, все-таки активный темповой ход.
Иван (руководитель проекта). Попробуем. Пусть будет 2 балла за шах. Пробуем в новой версии на тестовом стенде. У тебя, Светлана, есть предложения?
Светлана. Предлагаю премию за продвижение пешки. Например, если пешка на e2 - 0 баллов, если на e3 - 1 балл и т.д.
Иван (руководитель проекта). Неплохая идея. Попробуем, но позже. Сначала посмотрим, если польза от шахов Петра.
Да, примерно так все и работает.
Сначала, оценочные функции были крайне слабые, вроде той, которую мы тут с вами набросали на коленках. На за 51 год методом научного тыка эти функции становились все лучше и лучше, а компьютеры все быстрее и быстрее.
Но по-прежнему, мощности компьютеров не хватает, чтобы просчитать позицию насквозь на достаточную глубину, поэтому высоко ценятся "специалисты по обрезанию".
Как правильно и аккуратно обрезать дерево вариантов
Казалось бы, простая проблема - обрезать дерево.
Например, запретить явно глупые варианты типа таких:
1. e4 e5 2. Крe2
или
1. e4 e5 2. Фh5 Кf6 3. Ф:f7+
Человеку, даже начинающему шахматисту, это объяснить просто. Но как это объяснить компьютерной программе?
Можно, конечно, сделать так, что при больших материальных потерях (как во втором случае) беспощадно резать всю ветку и дальше не тратить время на анализ. Но вдруг это не глупая потеря ферзя, а гениальная жертва и положительный эффект скажется только через 5 или 10 полуходов? А мы заранее зарезали гениальную идею?
Человек, конечно, сразу интуитивно понимает, что тут ничего не может быть хорошего для белых, ни через 5, ни через 10 или 30 ходов.
Но компьютер изначально отвергает такие понятия как "интуиция" и твердо требует четких доказательств.
Позиция из партии:
Бронштейн - Геллер, Чемпионат СССР, 1961. Тур: 1.
Ход белых
Начнем с простого частного вопроса от которого попытаемся оттолкнуться к общим выводам.
Нужно ли сразу срезать ход 1. Фh7+ ?
Хочется срезать, но ведь после него возможен такой вариант:
1. Фh7+ Кр:h7 2. Л:f7 e2 3. Л:g7+ Крh8 4. Кg6X
Все-таки, ход 1. Фh7+ плохой, т.к. черные на втором ходу могут сыграть 2. ... Лg8, опровергая комбинацию белых.
Да, но поняли мы это не сразу, на базе оценке позиции после 1. Фh7+, а копнув чуть глубже.
К тому же у белых есть несколько красивых ходов с жертвами, которые все-таки приводят к их победе.
1. Л:f7
Не только оставляем под боем ферзя, но еще и ладью предлагаем в жертву.
Ферзя нельзя брать из-за 2. Л:g7+ и 3. Кg6X
Ладью нельзя брать из-за 2. Фg6+ и 3. Фg7X
Бронштейн нашел в этой позиции еще более красивый и точный путь к победе 1. Фg6
А перед нами вопрос, как сделать так, чтобы программа могла различать "красивые правильные жертвы" (типа 1. Л:f7 и 1. Фg6) и просто глупости с потерей материала без компенсации (типа 1. Фh7+) - ?
Возникает такая идея. Резать все глупые ходы не сразу, а, например, после их анализа на 6 (например) полуходов.
Т.е. если после жертвы мы в течение 6 полуходов не ставим мат, не восстанавливаем материал, то режем этот первичный ход (например, 1. Фh7+ в нашем примере).
На данной позиции эта идея работает, давайте, посмотрим чуть более сложную позицию.
Позиция из партии:
Авербах - Котов, Международный турнир гроссмейстеров, Нейгаузен-Цюрих, 1953. Тур: 14.
Ход черных
Здесь, благодаря нашему правилу "6 полуходов" мы успешно (и, главное, экономично) срежем такие глупости как:
1. ... Фb5
1. ... Фc6
1. ... Фe6
Но возникает вопрос: не срежем ли мы заодно и гениальный ход Котова 1. ... Ф:h3+ - ?
Ведь после ходов:
1. ... Ф:h3+ 2. Кр:h3 Лh6+ 3. Крg4 Kf6+ 4. Крf5
Лимит на 6 полуходов исчерпан, мата нет, материал в недостатке.
Надо резать ход 1. ... Ф:h3+
Но, с другой стороны, банальная человеческая интуиция говорит о том, что позиция черных лучше (если не выиграна), например, после ходов 4. ... Кd7 (как пошел Котов), или 4. ... Кg4, или 4. ... Кh5.
Что же нам делать? Как вместе с грязной водой не выплеснуть ребенка?
Может, увеличить глубину просмотра "сомнительных" ходов от 6 до 30 - ?
Может быть, может быть. Это и есть одна из основных проблем, которые решают разработчики шахматных игровых программ.
Режьте, братцы, режьте,
Но режьте осторожно!
Режьте так, чтоб понял,
Программист тревожный...
Мы срезали ненужное,
А нужное оставили
И в конечном счете
Мат крутой поставили!
Как Незнайка играл в шахматы против ИИ (Искусственного Интеллекта).
В книге Николая Носова "Незнайка в Солнечном городе" (1958 год) есть интересная сюжетная линия о том, как Незнайка увлекся игрой в шахматы, причем играл в основном с ботами.
... Незнайка принялся играть с автоматом в шахматы. Не успел он сделать и десяти ходов, как получил шах и мат. Он решил сыграть ещё партию и проиграл ее, сделав всего лишь пять или шесть ходов. Следующий мат он получил в три хода. Автомат как бы подметил, какую ошибку допускал в игре Незнайка, и нашёл способ обыгрывать его в самое короткое время.
Всегда интересно читать таких гениальных писателей, как Николай Носов и сравнивать, насколько их предсказания сбылись с реальностью.
Шахматный автомат, о котором идет речь в этой книге, явно является самообучающейся системой, а это в свою очередь является признаком ИИ (Искусственного Интеллекта).
Если мы пороемся в архивах 1950-1990 годов, будь то фантастическая литература (как тот же "Незнайка") или научно-популярные статьи (как, например, статьи в журнале "Квант"), то мы четко увидим доминирующее мнение, что шахматная программа будет в нашем веке явным ИИ с мышлением, похожим на человеческое мышление, но только "очень быстрое".
Получилось в результате все-таки немного не так, все современные шахматные боты, это просто программы с несколькими основными функционалами (правила игры, функция оценки позиции, система обрезания).
Система обрезания - это сложный творческий функционал, но на ИИ, все-таки, не тянет.
Раз уж мы вспомнили Незнайку, давайте, обратим на некоторые психологические моменты, затронутые в этой книге.
Ниточка познакомила Незнайку со всеми автоматами, и Незнайка сыграл с каждым по партии, но выиграть сумел только у одного «Барбосика».
- Вот видите, вы уже делаете успехи! - сказала Ниточка.
- Вам надо почаще приходить сюда и тренироваться.
...
Незнайка по целым дням пропадал в Шахматном городке. Здесь он встречался с Ниточкой и вёл с ней беседы на разные темы. Но главное для них было то, что они играли в шахматы.
Ниточка была заядлая шахматистка, и ей нравилось, что Незнайка тоже увлёкся игрой в шахматы, или, как принято было говорить в Солнечном городе, заболел шахматной горячкой.
Тут, возможно, у вас возникнет вопрос.
А хорошо ли это, когда человек "заболевает шахматной горячкой" и целыми днями режется в шахматы, забыв обо всем на свете?
Это сложный деликатный вопрос и ответ зависит от конкретного индивидуума.
Если этот человек - гроссмейстер и зарабатывает тем, что выигрывает призы в разных турнирах, то, наверное, это нормально (хотя, возможно, с некоторыми оговорками).
Если это просто времяпровождение без финансовой составляющей, то надо или полностью завязывать, или ограничить себя до какого-то разумного минимума.
Что же касается, нашего Незнайки, то это еще тот тип.
Вспомним, что он до "шахматной горячки" вытворял, это же ужос-ужос.
Занимался ужасной вивисекцией - из одного человека сделал осла, а из трех ослов сделал трех людей. Разрушил здание милиции. Одного милиционера свел с ума. В результате тот вообразил себя другим человеком и поселился жить в чужой квартире без согласия владельца.
Короче говоря, пусть уж лучше Незнайка целыми днями в шахматы катает с ботами. И другим спокойнее, и сам, может быть, поумнеет.
Примеры позиций, в которых бот ориентируется хуже, чем человек
Несмотря на то, что сегодня любой более-менее прилично сделанный бот легко выигрывает у ведущих гроссмейстеров, даже у чемпионов мира, все-таки, есть еще позиции, в которых человек чувствует себя увереннее.
Позиция:
Пример заблокированной позиции без возможности прорыва.
Ход белых
Если предложить эту позицию для оценки человеку, то любой шахматист от новичка до гроссмейстера сразу скажет: "Позиция равная, ничья".
Для ботов эта позиция сложнее. Хороший бот сообразит, что здесь ничья, возможно, подумав какое-то время.
Эту позицию можно использовать как тест бота.
Если бот сразу определил, что здесь ничья, то можно предложить ему позицию посложнее.
Позиция:
Пример заблокированной позиции с возможностью прорыва.
Ход белых
Здесь есть возможность прорыва путем жертвы ладьи на b6.
Но черные держат ничью, разместив короля на полях a8 и b8, приняв жертву ладьи именно пешкой a.
В этом случае белые никак не смогут пробить эту крепость.
Но бот (lichess.org) эту позицию оценивает +9, т.е. не понимает, что здесь изначально ничья.
Позиция:
Пример заблокированной позиции с возможностью прорыва.
Ход белых
FEN: 3k4/p1p1p1p1/PpPpPpPp/1P3P1P/8/8/3P4/5RK1 w - - 0 1
Это позиция является клоном от предыдущего примера с тем небольшим отличием, что в ней легкий для понимания человеком выигрыш для белых.
Аналогично тому, как мы это делали в предыдущем примере, жертвуем ладью на d6. В отличии от предыдущего примера, здесь у белых больше пространства для маневра, что обеспечивает им победу.
На этой позиции я протестировал бот на lichess.org - Stockfish level 8 - здесь это максимальный уровень по силе игры.
Я разыграл эту позицию против бота 2 раза - за белых и за черных. Результат был совершенно неожиданным.
Черными бот проиграл. Это неудивительно - позиция выиграна за белых, тут человеку надо просто играть аккуратно.
Удивительно другое. Бот не смог выиграть эту позицию белыми. Бот, который уверенно побеждает гроссмейстеров из начальной позиции, не смог разобраться в позиции совершенно простой и ясной.
Возьмем это научное открытие на заметку.
Справедливости ради, замечу, что я попробовал эту позицию на, скажем так, более профессиональной версии бота, там бот довольно уверенно нашел выигрыш за белых.
Позиция:
Трудный для бота "дальний план". Автор: Михаил Шерешевский.
Ход белых
FEN: 8/R4pk1/P5p1/3p3p/7P/4P1P1/5PK1/r7 w - - 0 1
Позиция выиграна для белых.
Для нас она интересна тем, что человеку нетрудно придумать (и объяснить другому человеку!) план победы.
Ставим белую ладью на a8, пешку на a7. Этим мы заставляем черную ладью сторожить линию a, а черного короля заставляем находится на полях g7 и h7 (если черная пешка двинется вперед.
Отправляем белого короля в длинный поход атаковать черную пешку. Вот этот пункт может оказаться сложным для бота, т.к. эта часть плана довольно многоходовая, и бот может устать считать все эти варианты или неаккуратно срезать дерево расчета не там, где надо.
Организуем новую проходную пешку по линии е или h.
Я обкатал эту позицию за белых против того же бота (см выше) и стабильно выигрывал.
Но и бот, в свою очередь, в этой позиции за белых оказался на высоте, стабильно и четко выигрывал.
Делаем вывод: против бота желательно использовать не просто "дальние планы", а "дальние планы" в загроможденных пешечными цепями позициями.
Практика. Вооруженные полученными знаниями, идем бить ботов! Beat the bot!
Резюмируем полученные знания.
Боты играют очень сильно, они стабильно выигрывают у сильнейших гроссмейстеров.
Пока еще у ботов есть слабые точки: позиции с "длинным планом" + пешечные цепи с минимальными возможностями прорыва.
Играть против бота надо аккуратно, не зевать, не ввязываться в тактические осложнения, стремиться к позициям, которые являются относительно простыми для человека и сложными для ботов.
Примечание. Здесь Ваш спарринг партнер - шахматный киборг StockFish версия 10, уровни от 1 (минимальный) до 20 (максимальный).
Также вы можете попробовать свои силы на любом другом доступном, боте, например, на ресурсе:
lichess.org
Успехов!
PS А на десерт...
Дружеская ремейк-пародия на замечательных Спарксов для поднятия боевого духа
Найду я верный точный ход,
Уверен я - победа ждет,
Побит бот, Побит бот...
Коварный враг тут не пройдет,
Побитый бот, побитый бот...
Побит бот, Побит бот...
Битый бот, битый бот!
Битый бот, битый бот!
"Sparks". "Beat the Clock" 1979. Отрывок для презентации по теме: Beat the Clock and Beat the Bot!
I was born a little premature
Mom just couldn't take no more
Had no time to learn to cry
Goodbye, Mama, got to fly
Bye, bye, bye, bye, bye, bye, bye
Entered school when I was two
Phd's that afternoon
Never entered any sports
Didn't look too good in shorts
Got divorced when I was four
[Chorus:]
I've seen everything there is
I've done everything there is
I've met everyone but Liz
Now I've even met ol' Liz
No time for relationship
Skip the foreplay, let 'er rip
You gotta beat the clock, beat the clock,
Beat the clock, beat the clock
I did lots of traveling
Parts of me unraveling
The Army then rejected me
Said I had two flat feet
Wore them out when I was three
Too bad there ain't ten of you
Then I'd show you what I'd do
I could cheat on five of you
And be faithful to you too
But there's only one of you