Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Введение
Однажды я решил научиться шахматам, взял в библиотеке книгу, купил маленькую шахматную и начал изучать. Научился ходить фигурами, разыграл один гамбит сам с собой, а потом решил сыграть против приложения на телефоне. Естественно проигрывал независимо от уровня сложности, но это не самое страшное: даже если я выигрывал у компьютера, я не очень то понимал смысл ходов. То есть мой уровень игры оставался одним и тем же, независимо от того как я играю.
Тогда я прочёл парочку журналов, где указывалось на победу компьютера над человеком в шахматах, то насколько он делает неочевидные для человека ходы. В итоге я решил, что компьютер не обыграть, а если обыграть, то ты не поймёшь сути ходов и это ничего тебе не даст. Тогда я бросил шахматы и больше к ним не возвращался.
И вот одним вечером, я наткнулся на статью в хабре, где было сказано, что ИИ победил тупой перебор вариантов. Я заинтересовался, как ИИ это сделал, и там рассказывалось, что некий Alphazero использует метод Монте-Карло и оценку позиции нейросетью. И я примерно представлял как нейросеть оценивает позицию, какие методы использует.
Метод Монте-Карло и Нейросеть
Для начала поймём, как выбираются ходы. Этот метод благодаря которому следующие ходы выбираются... Рандомно! Именно так выбирал ходы я в попытках обыграть приложение: судорожно метался, перебирая случайные варианты. Осталось понять по каким критериям Нейросеть выбирает лучшие ходы.
О тут всё тоже очень просто! Метод называется нравится-не нравится. Нейросеть смотрит на позицию и выдаёт оценку, а потом выбирается наилучшая позиция на следующем ходу. Оценка позиции меняется, если ход оказывается не самым лучшим и из этой позиции можно проиграть.
Всё что надо делать, это натаскать нейросеть на множество позиций. Ну и не забывать об алгоритме поиска наилучших путей.
Выводы
Исходя из найденного, я осознал, что новейшие шахматные движки думаю как люди. И за счёт этого побеждают обычный перебор вариантов. Это меня невероятно сильно вдохновило. То есть вся человеческая теория шахмат не является пустым звуком. Есть смысл учить человеческие методы игры в шахматы.
Чем больше я читал, тем больше в этом убеждался. Один шахматный блогер упомянул, что новейший Stockfish с нейросетью оценивают игру старых мастеров выше, чем это оценивает старый Stockfish. Потом я посмотрел за игрой гроссмейстера, где тот разрывал других гроссмейстеров за десять минут и причитал: о, эта позиция мне нравится. И да там был мат в восемь и более ходов. Мат гроссмейстер упустил, и потом долго думал, где ошибся, но ошибки не было, просто надо было перебирать слишком много вариантов и играть с компьютерной точностью. Однако даже так гроссмейстер просто продавил оппотента, потихоньку улучшая свою позицию.
Но ещё сильнее мне понравилась игра, где нейросеть жертвует материалом, позицией, делает всё, на что не пойдёт нормальный человек и старый движок, чтобы победить и побеждает. Я задался целью повторить подобное хотя бы раз в жизни.
Тренировки
Первым делом я начал тренироваться. Скачал программу и начал тренировать мат в один ход. Также зашёл на старую учётную запись и начал намеренно снижать рецтинг ELO со стартовых 400 до 100, ниже не получилось. Меня чуть за это не забанили, но мне нужен был чистый результат игры с самого низкого рейтинга.
В день я решал около ста задач на мат в один ход. Также я опускал своё ELO играя рандомно. Я выбирал случайные ходы и смотрел, как на них реагируют мои соперники. Также я немного учился перебирать ходы как компьютер.
Минимакс
Компьютер перебирает ходы по очень простой схеме. У каждой фигуры есть ценность. Думаю о ценности фигур подробнее вы сможете узнать в других статьях. Выбирает ход, делает его. Выбирает ход противника. А потом смотрит результат. Например, я сходил пешкой, враг сходит пешкой. Нулевой результат. Потом я снова хожу пешкой, враг выбирает ферзя. Снова нулевой результат. Потом я снова хожу пешкой и враг съедает мою пешку ферзём. Минус один. Я съедаю ферзя пешкой плюс восемь. Из этого делается вывод, что враг не будет есть пешку на этом ходу, ведь тогда потеряет ферзя. Значит он сделает другой ход.
Я перебирал варианты медленно. Очень медленно. Поэтому вместо обычного перебора всех вариантов я выбирал несколько и смотрел на результат. Но даже так я перебирал варианты очень медленно. Надо было ускорять игру и я тренировался.
Матуя в один ход, я научился быстро перебирать ходы одной фигурой. Если компьютер в начале партии на пешку тратил 2 такта, то есть сначала выбирал ход e2-e3, а потом e4, то я тратил на ход один мозговой такт: я сразу видел все варианты куда может ходить пешка. Я сразу видел все два варианта. Уже сейчас я чувствовал как превосхожу компьютер в вычислительной мощи. Однопоточный <-важное уточнение.
Я начал наседать на решение задач в мат в один ход. Меня начало тошнить. Мне начали мерещиться ходы фигурами в обыденных вещах. Например, просматривая сериал, я видел на месте главного персонажа ферзя и как он защищает фигур рядом с ним. Я осознавал, что нейросеть в моём мозгу учится, ещё с первых двух задач нейросеть обучилась мату в один ход, проблема в человеческих мозгов в том, что они очень быстро учатся, но плохо закрепляют и улучшают изученное. То есть я сначала сыграл в две игры сделал рывок в 50%, а потом застопорился и сыграл сотни задач, прежде чем закрепить изученное на минимально приемлемом уровне.
Тем временем я научился в шахматах бегать по кругу избегая мата королём. Было забавно, на низких рейтингах не умеют ставить мат и получалась ничья повторением ходов или пат. Также я понял основы дебюта, вроде захвата центра и конртигры.
Я не учил дебют механически. Я просто ходил рандомно и подмечал сильные первые ходы. Так я отыграл несколько дебютов, даже не зная их. Из смешных моментов могу подметить, как меня не раз ловили в дебютные ловушки, дело в том, что я тогда видел ходы на один шаг вперёд и часто попадался на ловушки людей, которые заучили дебют по мемам.
Наконец-то мой рейтинг начал расти. Опыт тоже стал увеличиваться. И однажды играя в полную силу я сыграл с точностью выше 90%. Это сравнение игры с сильнешим шахматным движком.
Тем не менее рандом меня подводил. И иногда игра получалась хаотичной.
Мат в два хода
Когда шахматы начали сниться мне во сне, а это означает, что мой мозг начал более глубокий анализ моего шахматного опыта, я начал тренировать мат в два хода. Я начал более-менее чувствовать шахматы и очень быстро видеть все угрозы и нападения в один полуход. И тренируя мат в два хода, я также тренировал анализ игры в два полухода, мой и врага. Конечно тот факт, что ход я выбирал я рандомно сказывался на том, что иногда я зевал фигуру и проигрывал партию, просто потому что не увидел этого варианта, поскольку не просчитывал, но ощущение позиции со временем усиливалось и я начинал видеть больше. Для ускорения обучения я начал смотреть шахматные партии сильных игроков.
Чтобы разгрузить мозги я смотрел смешные ролики. По шахматам. Вроде типичных шахматистов такого-то рейтинга с показом ошибок. С анимацией револьверов, когда фигура делает вилку.
Обыграл компьютер
Меня завораживала жертва всего ради победы. Даже гроссмейстер в одной из партии пожертвовал фигуру с полной компенсацией в дальнейшем. Уже сейчас мой мозг оценивал позицию более гибко. Ферзь мог иметь нулевую ценность, и я легко им мог жертвовать, матуя в два хода, а в зависимости от того, где вражеский король, в какую сторону тот рокировался, цена коней на правом и левом фланге менялась. В интернете я наткнулся на партию, где человек обыгрывает шахматную программу. Я решил повторить его ходы, и у меня получилось. Вот только у меня возникли проблемы со Stockfish.
Он учится. Stockfish учится и больше не повторяет ошибок с жадным поеданием материала. Придётся очищать память, чтобы повторить трюк.
© мысли автора
Важно другое, я научился играть как компьютер с плохим ИИ на два шага вперёд. Самое главное я отошёл от рандомного перебора вариантов. Теперь выбираю следующий ход я сам, точнее нейросеть в моей голове. И пусть я думаю всего на ход вперёд, и не очень хорошо, но я могу красиво обыграть новичка.
Жертвуя всем
Я примерно знал как играют новички. Я поднял свой рейтинг с нуля до четырёхсот. На этот раз это был чистый рейтинг наработанный мною. Я имел стратегию и тактику. Я играю чёрными.
1. e4 e5
Довольно стандартное начало.
2. Nf3 h6
А вот здесь на ход коня я двигаю пешку на h6, чтобы конь не занял поле g5. Естественно вражеский конь съедает незащищённую пешку по центру. Я полностью ломаю дебют, теперь у новичка нет теории как играть дальше. Нет тиктоков, нет ютубов и книги.
3. Nxe5 Qh4
Я нападаю на королевский фланг. Там нет коня. Я блокирую пешку f2 и она не может двигаться, так как защищает короля. Естественно моего ферзя отгоняют ходо g3. Но я также аиаковал не только короля, но и центр. Съедаю пешку по центре и атакую короля.
4. g3 Qxe4+ 5. Be2 Qxh1+ 6. Bf1 Qxh2
Не желая терять в начале игры ферзя, белые защищаются слоном. Если я съем ферзём слона, логично, что я потеряю своего ферзя, поскольку тот будет съеден ферзём белых. Тем более, какой нормальный человек ходит ферзём в начале игры? Ням-ням, я съедаю ладью и даю королю шах. А потом подъедаю пешечку. Но самое главное атакую пешку на f2.
7. Bc4 Bc5
Белые хотят сделать вилку конём. Атакуя ладью и... Пустое место. Знаете, это очень опасно терять ладью. Не все решатся ходить как-то иначе чем ладьёй.
8. Nxf7 Bxf2+
Спокойно атакую короля и подъедаю пешечку. Играя в шахматы, я крепко осознал, что иногда последовательность ходов важна. И в одном порядке я смогу получить больше, вынуждая соперника сделать ход, нежели в другом
9. Ke2 d6
Хладнокровно отдаю ладью. Ход d6 позволяет мне вывести слона. А конь стоит на краю доски и никак мне не мешает.
10. Nxh8 Bg4+
Вывожу слона и атакую короля. Белые попадают под неприятную связку и теряют ферзя.
11. Kd3 Bxd1 12. Bf7+ 0-1
Белые атаковали и я хотел увести короля, чтобы не попадать под "вечные шахи" с компенсацией фигур. Конечно никаких вечных шахов нет, но ощущается позиция именно так. Я увожу короля - попадаю под коня, снова увожу - попадаю под слона. А потом и под вилочку коня с потерей ферзя. У меня было странное ощущение, что если сделаю неверный ход так и будет.
Один, два, много...
На самом деле у коня только два поля для отступления и попав под шах коня, я съедаю слона белых в любом случае. Размениваться нельзя, поэтому белые отступают слоном на поле c4. А дальше мат в "много ходов". Дальше одного хода я считать не умею, а два хода только при сильной концентрации и то слабо. Поэтому мат в много ходов. Однако белые тоже умеют считать до "много" отчего сдались и мне была засчитана победа.
Итоги
Я старался максимально понятным способом объяснить алогритм Минимакс, а также другие термины. После прочтения этой статьи у вас должно появиться хотя бы минимальное понимание некоторых вещей. Например, что современные шахматные движки играют как люди, то как они выбирают ходы. Пусть я играл не идеально, и делал грубые ошибки, мой соперник делал грубые ошибки, но я и мой соперник считаем на глубину один ход. Я намеренно играл плохо, словно вижу на один ход вперёд, и словно мой соперник также видит на один ход вперёд. Самое главное то, что я могу сделать ловушку в дебюте и мне не надо учить ловушки наизусть, чтобы потом теряться, если противник сделает не тот ход, что я ожидаю. Я просто сделаю новую ловушку.
Я играл творчески с полным пониманием происходящего на доске. Пусть и на уровне новичка. Собственно шахматы из этого и состоят. И я рад, что хотя бы раз в жизни сыграл такую красивую для новичка партию.
А ещё я понимаю дебюты, и даже не зная как они называются и какие там ходы, однажды я со 100% аккуратностью разыграл дебют, узнав об этом постфактум. Но самое главное я не растраиваюсь из-за того, что не могу обыграть компьютер и он считает мои ходы ошибкой. На самом деле ошибок на том уровне игры, который есть у меня, нет. Всё, что мне остаётся это доводить точность (Accuracy) игры до 100%, то есть тренировать органическую нейросеть на несколько миллионов позиций и может быть однажды я буду играть на уровне мощных шахматных программ. Также я понял, что человеческие методы игры не бесполезны.
Я сыграл красивую партию полноую неиочностей. Моя мечта исполнилась, желаю вам того же!