15 лет назад компьютер Deep Blue обыграл человека в шахматы. Как обыграть компьютер в шахматы


Как выиграть в шахматы - 5 способов: инструкция для новичков и профи

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

c806c0as-960

Самым главным советом станет попытка разгадать замыслы соперника, заранее предугадывать его шаги и соответственно эффективно выстраивать оборону.

Начальный уровень

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

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

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

Перед тем, как читать статью дальше, предлагаем вам посетить сайт онлайн-школы “Шахматы с Жориком”.

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

>>Перейти на сайт онлайн-школы

SONY DSC

 

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

Пешки лучше направить в центр поля, таким образом, получится освободить путь другим фигурам.

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

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

Свои маневры лучше продумывать на несколько ходов вперед. Перед тем, как выиграть в шахматы у компьютера или реального соперника, с каждым ходом усложняйте свою атаку, чтобы сбить противника с толку и заставить запутаться. Очень часто в шахматной партии первый ход предопределяет дальнейшую расстановку сил на доске, давая возможность активно атаковать или отдавая части поля под ваши фигуры.  Для того, чтобы узнать как научиться выигрывать в шахматы практически у любого противника, следует запомнить хотя бы четыре дебюта;

1. Испанский вариант. Первый – испанский вариант, когда  нужно убрать слонов соперника.

2. Английский вариант. Второй вариант называется английским. Здесь надо походить пешкой на с2 и g2. Таким образом, вы предоставите свободу действий фигуре слона или коня.

3. Королевский гамбит. Третий вариант дебюта достаточно неординарный – Королевский гамбит. Теперь надо походить пешками на e2, f2 в течение первых ходов.

4. Ферзевый гамбит. И последний, однако, не менее действенный, – ферзевый гамбит. Белые фигуры начинают ход с d4 и с4. После этого вся атака концентрируется в середине поля.

Рекомендуем прочитать:

Средний уровень

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

На этом этапе игры в шахматы следует продумывать комбинацию уже на 6 шагов.

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

Гроссмейстеры играют партию в быстрые шахматы, где фигурами являются живые люди
Гроссмейстеры играют партию в быстрые шахматы, где фигурами являются живые люди

Рекомендуем для изучения

Сложный уровень

Для того, чтобы запомнить, секреты как выигрывать в шахматы не нужно снова открывать учебник. Главное – концентрация на поле, прогнозирование действий соперника и запас стандартных комбинаций. Опыт предыдущих уровней вам поможет.

Рекомендуем ознакомиться:

Читайте также:

levico.ru

Как выиграть в шахматы: основные способы для начинающих

Доброго времени суток, дорогой друг!

Полагаю, на вопрос «Как выиграть в шахматы?», вас вряд ли устроит ответ: «Поставить мат». А посему разберем эту тему чуть подробнее.

В чем загвоздка?

В том, что вопрос заголовке статьи не имеет однозначного ответа, за исключением того, который дан выше. Надеюсь, не слишком разочаровал.

kak-viigrat-v-shahmaty

Шахматы игра не азартная. В том плане, что они не относятся к азартным играм типа карточных игр или на игровых автоматах.

Причина очень проста. Элемент удачи, везения, —  в шахматах сведен к минимуму. Игра, к примеру,  на автоматах – чисто в расчете на везение.

Игра в покер, —  требует определенного мастерства, однако элемент везения также велик. За счет того, что вы изначально можете получить карты, вероятность выигрыша с которыми 80% против любого соперника (например два туза).

В шахматах все иначе. Это игра с полной информацией. У обоих соперников одинаковый комплект фигур и «скрытые карты». Если начинающий игрок садится за доску против мастера, его шансы «унести ноги» практически равны нулю.

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

  1. Хорошо играть в шахматы
  2. Хорошо играть в данной конкретной партии
  3. Хорошо играть в данной конкретной партии против данного конкретного соперника.

Шахматы игра мастерства. И все же ограничиться этим утверждением, — было бы неправильно.

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

Кавалерийский наскок

При таком подходе быстро развиваем фигуры, включая ферзя, и стремимся поставить мат.

Есть достаточно примеров, когда такая стратегия увенчалась успехом очень быстро.

за 3 хода

Мат в 3 хода – своего рода клише. На самом деле этот типовой мат, как видите, — ставится за 4 хода.

Очевидно также, что черные совсем не обязаны получать этот детский мат. Они могут сыграть к примеру, 3…g6  и на 4.Фf3 – 4… Kf6

за 5 ходов

Нетрудно сделать вывод, что без помощи белых такая картина маслом вряд ли возможна.

за 7 и 9  ходов

3...Кd4 - ход плохой, но в расчете на ошибку. Ловушка, в которую белые со всего маху и угодили.

Королевский гамбит не тот дебют, где позволительно неторопливо ходить пешками.

Кавалерийский наскок дело рискованное. Успех возможен только при совсем неправильной игре соперника или просто «зевках».

Например, широко известный «детский» мат «в три хода», который показан выше. Черные легко могут парировать наскок и получить лучшую игру (см. пример).

Совсем уж «дикий» пример мата в 2 (!) хода и также хорошо известный:

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

Игра на ловушку

«Ловушечный» стиль сродни кавалерийской атаке, хотя и не столь наивный. В шахматах существует огромное количество ловушек в начале партии. Есть даже книги на эту тему. Только в одной статье я приводил около 30 примеров.

В расчете на ошибку

По большому счету в шахматах два способа одержать победу:

  • Переиграть соперника
  • Воспользоваться ошибкой соперника

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

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

Вполне рабочая стратегия, которая может привести к неплохим практическим результатам. Важно только одно: не «зевать» самому.

Лекарство от зевков – самоконтроль. Перед тем как сделать ход, смотрим: не зеваю ли я мат, фигуру, пешку…  Даже тогда, когда уже занес руку над доской для хода, не помешает еще раз окинуть взглядом позицию на предмет зевка.

Переиграть соперника

Для этого важно, как минимум, играть «правильно». Следовать определенным принципам. Я перечислю только несколько и коротко, поскольку за каждым из них стоит не один десяток книг, написанных за несколько веков шахматной истории.

  • Быстрое развитие

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

  • Удобное размещение фигур

Слонов на поля с4, b5, d3 f4, g5 e3. Коней к центру (f3 c3). Ладьи ставит на открытые и полуоткрытые центральные вертикали.

  • Контроль над центральными полями

Фигуры и пешки следует группировать ближе к центральным полям. Центр – поля е4,d4, е5, d5. Контроль над центром – ключ к преимуществу.

  • Безопасность короля

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

В заключение

Если бы был один – два секрета победы, или универсальная победная схема, — шахматы  давно бы перестали существовать.

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

И не стоит пугаться проигрышей. Как говорил Капабланка:

Если вам поставили мат, не расстраивайтесь, у вас впереди ещё сотни проигранных партий )

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

Отсюда вывод: чтобы научиться выигрывать, вначале нужно научиться проигрывать. Таковы «законы жанра». За одного битого двух небитых дают.

Ну и само собой: Чтобы выигрывать не разово, а на постоянной основе, требуется обучение и практика. Полагаю, это вполне очевидно и развивать сегодня эту тему считаю излишним.

Учитесь шахматам и побеждайте!

Благодарю за интерес к статье.

Если вы нашли ее полезной, сделайте следующее:

  • Поделитесь с друзьями, нажав на кнопки социальных сетей.
  • Напишите комментарий (внизу страницы)
  • Подпишитесь на обновления блога (форма под кнопками соцсетей) и получайте статьи к себе на почту.

Удачного дня!

 

chessmatenok.ru

Как выигрывать в шахматы у противников?

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

Суть шахматной партии

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

Не следует рассматривать шахматный спорт как просто игру. Этот уникальный вид спорта можно назвать тренажером для разума. Следует задаваться вопросом не о том, как выиграть в шахматы, а о том, зачем это нужно!

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

Как быстро выиграть в шахматы?

Итак, предположим, вы все-таки заинтересовались интеллектуальным и творческим противостоянием, которое раскрывает перед человеком шахматная партия. Но с чего же начать? Как выигрывать в шахматы?

Как быстро выиграть в шахматы

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

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

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

Как выигрывать в шахматы у новичка?

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

Самой распространенной комбинацией против новичка является так называемый: «детский мат».

Приведем запись (за белые фигуры): 1. e4 2. Сс4 3. ФН5 4. Ф:f7×.

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

Рассмотрим еще одну запись, теперь играя за черные фигуры: 1. f3 e6 2. g4 ФН4x.

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

Как выиграть компьютер в шахматы?

Как выиграть компьютер в шахматы

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

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

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

fb.ru

Как компьютер играет в шахматы? / Хабр

Хикару Накамура, недавно бросивший вызов компьютеру

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

Если вам интересно, как же устроены шахматные движки — добро пожаловать под кат.

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

Это, несомненно, очень наивное мнение. Новую позицию в шахматах можно получить к десятому ходу. Хоть в шахматах и меньше позиций, чем в го, тем не менее, уже после 3 ходов (ход — это один ход белых и чёрных, полуход — ход только одной стороны) дерево ходов состоит из почти 120 миллионов узлов. Более того, размер дерева после 14 полуходов из начальной позиции энтузиасты считают уже больше года, продвинувшись пока что примерно на треть.

Ещё я думал, что шахматные программы, несмотря на давнюю победу в матче над чемпионом мира, все еще находятся в пределах досягаемости лучших людей. Это тоже не верно.

В недавнем мини-матче человека с машиной, Хикару Накамура, один из сильнейших шахматистов в мире, играл с Komodo, одной из (двух) сильнейших шахматных программ в мире. Программа была запущена на 24-ядерном Xeon'е. Так как на равных соревноваться с компьютером люди уже не могут, гроссмейстер получил фору в каждой из 4 партий:

  • В первой партии — пешка и ход: компьютер играл чёрными и без пешки f7
  • Во второй — только пешка: компьютер играл белыми без пешки f2
  • В третьей — качество (разница между ладьёй и лёгкой фигурой, оценивается примерно в 2 пешки): компьютер белыми без ладьи a1, человек без коня b8 и с ладьёй a8 на его месте.
  • В четвертой — четыре хода: человек играет белыми и вместо первого хода делает 4 любых хода, не пересекая середину доски.
По поводу форы были определённые споры — например, отсутствие пешки f несколько ослабляет короля, но после рокировки даёт открытую линию ладье. Отсутствие центральной пешки, возможно, даёт большее преимущество. 4 хода дают неплохой позиционный перевес, но если играть закрытый дебют вроде староиндийской защиты, то это преимущество не так уж и сложно свести на нет.

Кроме того, партии игрались с контролем 45"+15', то есть 45 минут на партию и 15 секунд добавления каждый ход. Обычно, более короткие контроли дают дополнительное преимущество компьютеру, в то время как более длинные — несколько повышают шансы человека. Компьютер даже за доли секунды успеет отмести откровенно проигрывающие ходы, в то время как из-за экспоненциального роста дерева вариантов каждое последующее улучшение анализа занимает всё больше времени.

Тем не менее, фора была и человек проиграл в матче 2.5-1.5, сведя в ничью первые 3 партии и проиграв четвёртую. Вместе с тем, слабый гроссмейстер достаточно уверенно выиграл с форой в 2 пешки. Следовательно, преимущество лучших программ над лучшими людьми на данный момент где-то между 1 и 2 пешками форы. Конечно, эта оценка очень грубая, но для точной оценки надо сыграть несколько тысяч партий между людьми и программами, а этим вряд ли кто-то будет заниматься. Обратите внимание, что рейтинг ЭЛО, нередко указываемый для программ, не имеет ничего общего с рейтингом людей.

Чтобы человек мог играть в шахматы с компьютером, кроме собственно поиска лучшего хода, нужен GUI. К счастью, был придуман универсальный интерфейс (даже два, Winboard и UCI, но большинство движков использует UCI) для связи между GUI и собственно шахматной программой (движком). Таким образом, программисты могут сосредоточиться на самом алгоритме игры в шахматы, не задумываясь об интерфейсе. Обратная сторона монеты — так как создание GUI гораздо более скучное занятие, чем написание движка, то бесплатные GUI заметно проигрывают платным. В отличии от движков, где свободный Stockfish уверенно борется за первую строчку рейтинга с платным Komodo. Итак, как же устроен современный шахматный движок?

Представление доски

Основа любого движка — представление шахматной доски. В первую очередь, надо «объяснить» компьютеру все правила шахмат и дать ему возможность хранить шахматную позицию. Без этого невозможно оценивать позицию и делать ходы.

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

Bitboards

По счастливому совпадению, на шахматной доске 64 клетки. А значит, если для каждой клетки использовать один бит, мы можем хранить всю доску в 64-битном целом числе. В одной переменной будем хранить все белые фигуры, в другой — все черные, и ещё в 6 — каждый тип фигур по отдельности (другой вариант — 12 битбордов для каждого цвета и типа фигур по отдельности).

В чем преимущество такого варианта? Во-первых, память. Как мы узнаем позже, при анализе представление доски копируется много раз, и, соответственно, отъедает оперативку. Битборды — это одно из самых компактных представлений шахматной доски. Во-вторых, скорость. Многие вычисления, например, расчёт возможных ходов, сводятся к нескольким битовым операциям. За счёт этого, например, использование инструкции POPCNT дает ~15% ускорение современным движкам. Кроме того, за время существования битбордов было придумано немало алгоритмов и оптимизаций, как, например, «магические» битборды.

Поиск

Минимакс

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

Альфа-бета

Первая оптимизация — альфа-бета. Идея альфа-беты проста — если у меня уже есть хороший ход, то можно отсечь ходы, которые заведомо хуже. Рассмотрим пример на жуткой картинке слева. Допустим, у игрока А есть 2 возможных хода — a3 и b3. Проанализировав ход a3, программа получила оценку +1.75. Начав оценивать ход b3, программа увидела, что у игрока B есть два хода — a6 и a5. Оценка хода a6 +0.5. Так как игрок B выбирает ход с минимальной оценкой, то он никак не выберет ход с оценкой выше 0.5, а значит оценка хода b3 меньше 0.5, и рассматривать его смысла нет. Таким образом, все оставшееся поддерево хода b3 отсекается.

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

Узлы в альфа-бете делятся на 3 категории:

  1. PV-Nodes — узлы, оценка которых попала в окно (между альфой и бетой). Корень и самый левый узел всегда являются узлами этого типа.
  2. Cut-Nodes (или fail-high nodes) — узлы в которых произошло отсечение по бете.
  3. All-Nodes (или fail-low nodes) — узлы, в которых ни один ход не превысил альфу по оценке.

Сортировка ходов

При использовании альфа-беты, важным становится порядок ходов. Если мы сможем поставить лучший ход первым, то оставшиеся ходы будут проанализированы гораздо быстрее за счёт отсечений по бете.

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

Для взятий может использоваться, например, простая эвристика MVV-LVA (Most Valuable Victim — Least Valuable Aggressor). Мы сортируем все взятия по убыванию ценности «жертвы», а внутри соритруем еще раз по возрастанию ценности «агрессора». Очевидно, что обычно забрать пешкой ферзя выгоднее, чем наоборот.

Для «тихих» ходов используется метод «убийственных» (killer) ходов — ходов которые вызвали отсечение по бете. Это ходы обычно проверяются сразу после ходов из хеша и взятий.

Хеш таблицы или таблицы перестановок

Несмотря на огромные размеры дерева, многие узлы в нём идентичные. Чтобы не анализировать одну и ту же позицию дважды, компьютер хранит результаты анализа в таблице и каждый раз проверяет, нет ли уже готового анализа этой позиции. Обычно в такой таблице хранится собственно хеш позиции, оценка, лучший ход и возраст оценки. Возраст необходим для замены старых позиций при заполнении таблицы.

Итерационный поиск

Как известно, если мы не можем проанализировать все дерево полностью, минимаксу необходима оценочная функция. Тогда достигнув определенной глубины, мы останавливаем поиск, оцениваем позицию и начинаем подъем по дереву. Но такой метод требует заранее заданной глубины и не предоставляет качественные промежуточные результаты.

Эти проблемы решает итерационный поиск. Для начала мы проводим анализ на глубину 1, потом на глубину 2 и т.д. Таким образом, каждый раз мы спускаемся чуть глубже, чем в прошлый раз, пока анализ не будет остановлен. Чтобы уменьшить размеры дерева поиска, результаты прошлой итерации обычно используются, чтобы отсекать заведомо плохие ходы на текущей. Этот метод называется «окно стремлений» (aspiration window) и используется повсеместно.

Поиск спокойствия(Quiescence Search)

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

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

Выборочный поиск

Идея выборочного поиска в том, чтобы дольше рассматривать «интересные» ходы и меньше — неинтересные. Для этого используются продления, которые увеличивают глубину поиска в определённых позициях, и сокращения, уменьшающие глубину поиска.

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

Отсечения и сокращения
С отсечениями и сокращениями всё гораздо интереснее. Именно они позволяют значительно сократить размер дерева.

Вкратце об отсечениях:

  • Дельта-отсечение — проверяем, может ли взятие улучшить текущую альфу. Для этого к оценке узла добавим ценность взятой фигуры и еще немного и посмотрим, больше ли получившееся значение, чем альфа. Например, если у белых не хватает ладьи, то взятие пешки вряд ли им поможет, с другой стороны, взятие слона может помочь.
  • Отсечение бесполезности — то же самое, только для не-взятий. Если текущая оценка настолько меньше альфы, что никакое позиционное преимущество не сможет это скомпенсировать, то такие узлы отсекаются. Обычно применяется на низкой глубине (1-2).
  • Историческое отсечение — для каждого хода мы храним, сколько раз данный ход спровоцировал отсечение, независимо от позиции. Ходы с высоким значением этой эвристики отсекаются. Обычно применяется начиная с определенной глубины и не применятся на PV узлы. Иногда объединяется с предыдущим методом.
  • Multi-Cut — если из первых M(например, 6) узлов хотя бы C(например, 3) являются Cut-node, то отсекаем все узлы.
  • Отсечение по null-ходу — если после null-хода (простая передача очереди хода сопернику) оценка все равно выше беты, то отсекаем узел. Проще говоря, если позиция настолько плоха, что даже сделав два хода подряд, игрок все равно не может ее улучшить, то нет смысла рассматривать эту позицию.

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

За счёт качественной сортировки ходов и отсечений, современные движки умудряются достигать коэффициента ветвления ниже 2. За счёт этого, к сожалению, они иногда не замечают нестандартные жертвы и комбинации.

NegaScout и PVS

Две очень похожие техники, которые используют тот факт, что после того как мы нашли PV-node (приусловии что наши ходы достаточно хорошо отсортированы), она скорее всего не изменится, то есть все оставшиеся узлы вернут оценку ниже, чем альфа. Поэтому вместо поиска с окном от альфа до бета, мы ищем с окном от альфа до альфа+1, что позволяет ускорить поиск. Конечно, если в каком-то узле мы получаем отсечение по бете, то его надо ценить заново, уже нормальным поиском.

Разница между двумя методами лишь в формулировке — они были разработаны примерно в одно время, но независимо, и поэтому известны под разными названиями.

Параллельный поиск

Распараллеливание альфа-беты — отдельная большая тема. Я вкратце пройдусь по ней, а кому интересно — почитайте Parallel Alpha-Beta Search on Shared Memory Multiprocessors. Сложность в том, что при параллельном поиске многие Cut-nodes анализируются до того, как другой поток найдет опровержение (установит бету), в то время как в последовательном поиске, при хорошей сортировке многие из этих узлов отсеклись бы.

Lazy SMP

Очень простой алгоритм. Мы просто запускаем все потоки одновременно с одним и тем же поиском. Коммуникация потоков происходит за счёт хеш-таблицы. Lazy SMP оказался неожиданно эффективным, настолько, что топовый Stockfish перешел на него с YBW. Правда, некоторые считают, что улучшение произошло из-за плохой реализации YBWC и слишком агрессивных отсечений, а не из-за преимущества Lazy SMP.

Young Brothers Wait Concept (YBWC)

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

Dynamic Tree Splitting (DTS)

Быстрый и сложный алгоритм. Немного о скорости: скорость поиска измеряется через ttd (time to depth), то есть время, за которое поиск достигает определенной глубины. Этот показатель обычно можно использовать для сравнения работы разных версий движка или движка, запущенного на разном количестве ядер (хотя Komodo, например, увеличивает ширину дерева при большем количестве доступных ядер). Кроме того, во время работы движок отображает скорость поиска в nps (nodes per second). Это метрика гораздо более популярная, но она не позволяет сравнивать даже движок сам с собой. Lazy SMP, в котором нет никакой синхронизации, практически линейно увеличивает nps, но из-за большого объема лишней работы, его ttd не так впечатляющ. В то время как для DTS nps и ttd изменяются практически одинаково.

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

Оценка

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

Компьютер оценивает позицию в пешках: +1.0 означает, что у белых преимущество равноценное 1 пешке, -0.5 означает, что у черных преимущество в полпешки. Мат оценивается в 300 пешек, а позиция в которой известно количество ходов до мата x — в (300-0.01x) пешек. +299.85 значит, что белые ставят мат в 15 ходов. При этом сама программа обычно оперирует целыми оценками в сантипешках (1/100 пешки).

Какие параметры компьютер учитывает при оценке позиции?

Материал и мобильность

Самое простое. Ферзь 9-12 пешек, ладья 5-6, конь и слон 2.5-4 и пешка, соответственно, одна пешка. В общем, материал — это достойная эвристика оценки позиции и любое позиционное преимущество обычно трансформируется в конце концов в материальное.

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

Таблицы позиций фигур

Конь в углу доски обычно плох, пешки ближе к вражескому тылу становятся всё ценнее и так далее. Для каждой фигуры составляется таблица бонусов и штрафов в зависимости от ее положения на доске.

Пешечная структура

  • Сдвоенные пешки — две пешки на одной вертикали. Часто их сложно защитить другими пешками, считается слабостью.
  • Отстающие пешки — пешки, соседи которых находятся впереди них. Такие пешки нельзя защитить другими пешками, и поэтому они считаются слабостью.
  • Проходные пешки — пешки, которые могут дойти до последней горизонтали без помех со стороны вражеских пешек. Сильная угроза противнику, особенно в эндшпиле
  • Изолированные пешки — пешки, у которых нет соседей. Такие пешки вообще нельзя защитить другими пешками, и поэтому они считаются серьезной слабостью.

Этапы игры

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

Поэтому многие движки имеют отдельную оценку для эндшпиля и для дебюта. Они оценивают этап игры в зависимости от оставшегося на доске материала и в соответствии с этим считают оценку — чем ближе к концу игры, тем меньше влияет дебютная оценка и тем больше — эндшпильная.

Прочее

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

Точная оценка или быстрый поиск?

Традиционный спор: что эффективнее, точно оценить позицию или достичь большей глубины поиска. Опыт показывает, что слишком «тяжелые» оценочные функции неэффективны. С другой стороны, более подробная оценка, учитывающая больше факторов, обычно приводит к более «красивой» и «агрессивной» игре.

Дебютные книги и эндшпильные таблицы

Дебютные книги

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

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

Эндшпильные таблицы

Вернемся к введению. Помните идею хранить много позиций в памяти и выбирать нужную. Вот она. Для малого (до 7) количества фигур просчитаны все существующие позиции. То есть в этих позициях компьютер начинает играть идеально, выигрывая в минимальное количество ходов. Минус — размер и время генерации. Создание этих таблиц помогло в исследовании эндшпилей.
Генерация таблиц
Сгенерируем все возможные (с учетом симметрии) позиции с определенным набором фигур. Среди них найдем и обозначим все позиции, где стоит мат. Следующим проходом обозначим все позиции, в которых можно попасть в позиции с матом — в этих позициях ставится мат в 1 ход. Таким образом находим все позиции с матом 2,3,4,549 ходов. Во всех неотмеченных позициях — ничья.
Таблицы Налимова
Первые эндшпильные таблицы, опубликованные в далёком 1998 году. Для каждой позиции хранится результат игры и количество ходов до мата при идеальной игре. Размер всех шестифигурных окончаний — 1.2 терабайта.
Таблицы Ломоносова
В 2012 году на суперкомпьютере Ломоносов в МГУ были посчитаны все семифигурные окончания (кроме 6 против 1). Эти базы доступны только за деньги и это единственные существующие полные семифигурные эндшпильные таблицы.
Syzygy
Стандарт де-факто. Эти базы гораздо компактнее баз Налимова. Они состоят из двух частей — WDL (Win Draw Lose) и DTZ (Distance to zeroing). WDL базы предназначены для использования во время поиска. Как только узел дерева найден в таблице, у нас есть точный результат игры в этой позиции. DTZ предназначены для использования в корне — они хранят количество ходов до обнуляющего счётчик ходов хода (хода пешкой или взятия). таким образом для анализа достаточно WDL баз, а DTZ базы могут пригодиться при анализе эндшпилей. Размер Syzygy гораздо меньше — 68 гигабайт для шестифигурных WDL и 83 для DTZ. Семифигурных баз не существует, так как их генерация требует примерно терабайт оперативной памяти.
Использование
Эндшпильные таблицы используются в основном для анализа, прирост силы игры движков небольшой — 20-30 пунктов ЭЛО. Тем не менее, так как глубина поиска современных движков может быть очень большой, запросы к эндшпильным базам из дерева поиска происходят еще в дебюте.

Прочие интересности

Жираф или нейронные сети играют в шахматы

Некоторые из вас возможно слышали о шахматном движке на нейронных сетях, достигшем уровня IM (что, как мы поняли во введении, не так уж и круто для движка). Его написал и выложил на Bitbucket Matthew Lai, который, к сожалению прекратил работу над ним из-за того, что начал работать в Google DeepMind.

Тюнинг параметров

Добавить новую функцию в движок несложно, но как проверить что она дала усиление? Простейший вариант — сыграть несколько партий между старой и новой версией и посмотреть кто победит. Но если улучшение небольшое, а так оно обычно и бывает после того, как все основные фичи добавлены, игр должно быть несколько тысяч, иначе достоверности не будет.

Stockfish

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

Их решение типично для опенсорса — добровольцы предоставляют свои мощности чтобы прогнать на них сотни тысяч игр.

CLOP

Программа, которая оптимизирует параметры через линейную регрессию, используя результаты игр движка с самим собой с разными параметрами. Из минусов — очень ограниченной размер задачи: оптимизировать сотню параметров (вполне адекватное число для движка) ей не под силу, по крайней мере за адекватное время.

Texel's tuning

Решает проблему предыдущего метода. Берем большое количество позиций (автор предлагал 9 миллионов позиций из 64000 игр, я брал 8 миллионов из почти 200000), для каждой сохраняем результат партии (победа белых 1, ничья 0.5, поражение 0). Теперь минимизируем ошибку, которая находится сумма квадратов разности результата и сигмоида оценки. Метод эффективный и популярный, но работает не на всех движках.

Stockfish tuning

Еще одна методика от лидера. Берем параметр равный x, и сравниваем (в нескольких десятках тысяч партий) движок с параметром равным x-sigma и x+sigma. Если победил движок с большим параметром, сдвигаем немного вверх, иначе — немного вниз, и повторяем.

Соревнования движков

Из всех проводимых тестирований соревнований хотелось бы отдельно выделить TCEC. От всех остальных он отличается мощным железом, тщательным подбором дебютов и длинным контролем. В последнем финале было сыграно 100 партий на 2 x Intel Xeon E5-2690v3 с 256 гигабайтами RAM с контролем 180'+30". В таких условиях количество ничей огромно, и результативными было всего 11 партий. Вот так вкратце в этой длинной статье я примерно рассказал об устройстве шахматных движков. Многие подробности остались не раскрытыми, о чем-то я просто не знал или забыл сказать. Если у вас остались вопросы, пишите их в комментарии. Кроме того, посоветую вам два ресурса, которые вы наверняка заметили, если тщательно открывали все ссылки, раскиданные по статье:

habr.com

Секреты игры в шахматы - 5 секретов от профессионалов

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

Секреты в шахматах

Все внимание на противника

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

Перед тем, как читать статью дальше, предлагаем вам посетить сайт онлайн-школы “Шахматы с Жориком”.

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

>>Перейти на сайт онлайн-школы

Все фигуры сдвинутся с мест

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

Безопасность короля превыше всего

Стремление “съесть” все фигуры противника есть у каждого игрока. Но в пылу партии легко забыть о главной фигуре – короле. Один неверный ход и он может быть повержен. Поэтому всегда нужно держать своего короля в поле зрения, обезопасив его от фигур оппонента.

Пешки – не второстепенные фигуры

Некоторые считают, что пешки – самые незначительные фигуры, от которых практически нет толку. Возможно их “стоимость” и ниже ладьи, коня и прочих, но ценность такая же. Опытные игроки в шахматы говорят, что пешки – едва ли не главные фигуры на поле. Умелые манипуляции с пешками могут помочь быстро и красиво одержать победу.

Контроль центра

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

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

Если вам сложно воспринимать текст и вы планируете дальше развиваться, то посмотрите видео: Секреты игры в шахматы

Читайте также:

levico.ru

Как компьютер играет в шахматы?

Как компьютер играет в шахматы? - 1Хикару Накамура, недавно бросивший вызов компьютеру

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

Если вам интересно, как же устроены шахматные движки — добро пожаловать под кат.

Введение

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

Это, несомненно, очень наивное мнение. Новую позицию в шахматах можно получить к десятому ходу. Хоть в шахматах и меньше позиций, чем в го, тем не менее, уже после 3 ходов (ход — это один ход белых и чёрных, полуход — ход только одной стороны) дерево ходов состоит из почти 120 миллионов узлов. Более того, размер дерева после 14 полуходов из начальной позиции энтузиасты считают уже больше года, продвинувшись пока что примерно на треть.

Ещё я думал, что шахматные программы, несмотря на давнюю победу в матче над чемпионом мира, все еще находятся в пределах досягаемости лучших людей. Это тоже не верно.

В недавнем мини-матче человека с машиной, Хикару Накамура, один из сильнейших шахматистов в мире, играл с Komodo, одной из (двух) сильнейших шахматных программ в мире. Программа была запущена на 24-ядерном Xeon'е. Так как на равных соревноваться с компьютером люди уже не могут, гроссмейстер получил фору в каждой из 4 партий:

  • В первой партии — пешка и ход: компьютер играл чёрными и без пешки f7
  • Во второй — только пешка: компьютер играл белыми без пешки f2
  • В третьей — качество (разница между ладьёй и лёгкой фигурой, оценивается примерно в 2 пешки): компьютер белыми без ладьи a1, человек без коня b8 и с ладьёй a8 на его месте.
  • В четвертой — четыре хода: человек играет белыми и вместо первого хода делает 4 любых хода, не пересекаю середину доски.

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

Кроме того, партии игрались с контролем 45"+15', то есть 45 минут на партию и 15 секунд добавления каждый ход. Обычно, более короткие контроли дают дополнительное преимущество компьютеру, в то время как более длинные — несколько повышают шансы человека. Компьютер даже за доли секунды успеет отмести откровенно проигрывающие ходы, в то время как из-за экспоненциального роста дерева вариантов каждое последующее улучшение анализа занимает всё больше времени.

Тем не менее, фора была и человек проиграл в матче 2.5-1.5, сведя в ничью первые 3 партии и проиграв четвёртую. Вместе с тем, слабый гроссмейстер достаточно уверенно выиграл с форой в 2 пешки. Следовательно, преимущество лучших программ над лучшими людьми на данный момент где-то между 1 и 2 пешками форы. Конечно, эта оценка очень грубая, но для точной оценки надо сыграть несколько тысяч партий между людьми и программами, а этим вряд ли кто-то будет заниматься. Обратите внимание, что рейтинг ЭЛО, нередко указываемый для программ, не имеет ничего общего с рейтингом людей.

Что такое шахматный движок?

Чтобы человек мог играть в шахматы с компьютером, кроме собственно поиска лучшего хода, нужен GUI. К счастью, был придуман универсальный интерфейс (даже два, Winboard и UCI, но большинство движков использует UCI) для связи между GUI и собственно шахматной программой (движком). Таким образом, программисты могут сосредоточиться на самом алгоритме игры в шахматы, не задумываясь об интерфейсе. Обратная сторона монеты — так как создание GUI гораздо более скучное занятие, чем написание движка, то бесплатные GUI заметно проигрывают платным. В отличии от движков, где свободный Stockfish уверенно борется за первую строчку рейтинга с платным Komodo.

Как же они все таки играют?

Итак, как же устроен современный шахматный движок?

Представление доски

Основа любого движка — представление шахматной доски. В первую очередь, надо «объяснить» компьютеру все правила шахмат и дать ему возможность хранить шахматную позицию. Без этого невозможно оценивать позицию и делать ходы.

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

Bitboards

По счастливому совпадению, на шахматной доске 64 клетки. А значит, если для каждой клетки использовать один бит, мы можем хранить всю доску в 64-битном целом числе.В одной переменной будем хранить все белые фигуры, в другой — все черные, и ещё в 6 — каждый тип фигур по отдельности (другой вариант — 12 битбордов для каждого цвета и типа фигур по отдельности).

В чем преимущество такого варианта?Во-первых, память. Как мы узнаем позже, при анализе представление доски копируется много раз, и, соответственно, отъедает оперативку. Битборды — это одно из самых компактных представлений шахматной доски.Во-вторых, скорость. Многие вычисления, например, расчёт возможных ходов, сводятся к нескольким битовым операциям. За счёт этого, например, использование инструкции POPCNT дает ~15% ускорение современным движкам. Кроме того, за время существования битбордов было придумано немало алгоритмов и оптимизаций, как, например, «магические» битборды.

Поиск

Минимакс

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

Альфа-бета

Как компьютер играет в шахматы? - 2Первая оптимизация — альфа-бета. Идея альфа-беты проста — если у меня уже есть хороший ход, то можно отсечь ходы, которые заведомо хуже. Рассмотрим пример на жуткой картинке слева. Допустим, у игрока А есть 2 возможных хода — a3 и b3. Проанализировав ход a3, программа получила оценку +1.75. Начав оценивать ход b3, программа увидела, что у игрока B есть два хода — a6 и a5. Оценка хода a6 +0.5. Так как игрок B выбирает ход с минимальной оценкой, то он никак не выберет ход с оценкой выше 0.5, а значит оценка хода b3 меньше 0.5, и рассматривать его смысла нет. Таким образом, все оставшееся поддерево хода b3 отсекается.

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

Узлы в альфа-бете делятся на 3 категории:

  1. PV-Nodes — узлы, оценка которых попала в окно (между альфой и бетой). Корень и самый левый узел всегда являются узлами этого типа.
  2. Cut-Nodes (или fail-high nodes) — узлы в которых произошло отсечение по бете.
  3. All-Nodes (или fail-low nodes) — узлы, в которых ни один ход не превысил альфу по оценке.

Сортировка ходов

При использовании альфа-беты, важным становится порядок ходов. Если мы сможем поставить лучший ход первым, то оставшиеся ходы будут проанализированы гораздо быстрее за счёт отсечений по бете.

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

Для взятий используется простая эвристика MVV-LVA (Most Valuable Victim — Least Valuable Aggressor). Мы сортируем все взятия по убыванию ценности «жертвы», а внутри соритруем еще раз по возрастанию ценности «агрессора». Очевидно, что обычно забрать пешкой ферзя выгоднее, чем наоборот.

Для «тихих» ходов используется метод «убийственных» (killer) ходов — ходов которые вызвали отсечение по бете. Это ходы обычно проверяются сразу после ходов из хеша и взятий.

Хеш таблицы или таблицы перестановок

Несмотря на огромные размеры дерева, многие узлы в нём идентичные. Чтобы не анализировать одну и ту же позицию дважды, компьютер хранит результаты анализа в таблице и каждый раз проверяет, нет ли уже готового анализа этой позиции. Обычно в такой таблице хранится собственно хеш позиции, оценка, лучший ход и возраст оценки. Возраст необходим для замены старых позиций при заполнении таблицы.

Итерационный поиск

Как известно, если мы не можем проанализировать все дерево полностью, минимаксу необходима оценочная функция. Тогда достигнув определенной глубины, мы останавливаем поиск, оцениваем позицию и начинаем подъем по дереву. Но такой метод требует заранее заданной глубины и не предоставляет качественные промежуточные результаты.

Эти проблемы решает итерационный поиск. Для начала мы проводим анализ на глубину 1, потом на глубину 2 и т.д. Таким образом, каждый раз мы спускаемся чуть глубже, чем в прошлый раз, пока анализ не будет остановлен. Чтобы уменьшить размеры дерева поиска, результаты прошлой итерации обычно используются, чтобы отсекать заведомо плохие ходы на текущей. Этот метод называется «окно стремлений» (aspiration window) и используется повсеместно.

Поиск спокойствия(Quiescence Search)

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

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

Выборочный поиск

Идея выборочного поиска в том, чтобы дольше рассматривать «интересные» ходы и меньше — неинтересные. Для этого используются продления, которые увеличивают глубину поиска в определённых позициях, и сокращения, уменьшающие глубину поиска.

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

Отсечения и сокращения

С отсечениями и сокращениями всё гораздо интереснее. Именно они позволяют значительно сократить размер дерева.

Вкратце об отсечениях:

  • Дельта-отсечение — проверяем, может ли взятие улучшить текущую альфу. Для этого к оценке узла добавим ценность взятой фигуры и еще немного и посмотрим, больше ли получившееся значение, чем альфа. Например, если у белых не хватает ладьи, то взятие пешки вряд ли им поможет, с другой стороны, взятие слона может помочь.
  • Отсечение бесполезности — то же самое, только для не-взятий. Если текущая оценка настолько меньше альфы, что никакое позиционное преимущество не сможет это скомпенсировать, то такие узлы отсекаются. Обычно применяется на низкой глубине (1-2).
  • Историческое отсечение — для каждого хода мы храним, сколько раз данный ход спровоцировал отсечение, независимо от позиции. Ходы с высоким значением этой эвристики отсекаются. Обычно применяется начиная с определенной глубины и не применятся на PV узлы. Иногда объединяется с предыдущим методом.
  • Multi-Cut — если из первых M(например, 6) узлов хотя бы C(например, 3) являются Cut-node, то отсекаем все узлы.
  • Отсечение по null-ходу — если после null-хода (простая передача очереди хода сопернику) оценка все равно выше беты, то отсекаем узел. Проще говоря, если позиция настолько плоха, что даже сделав два хода подряд, игрок все равно не может ее улучшить, то нет смысла рассматривать эту позицию.

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

За счёт качественной сортировки ходов и отсечений, современные движки умудряются достигать коэффициента ветвления ниже 2. За счёт этого, к сожалению, они иногда не замечают нестандартные жертвы и комбинации.

NegaScout и PVS

Две очень похожие техники, которые используют тот факт, что после того как мы нашли PV-node (приусловии что наши ходы достаточно хорошо отсортированы), она скорее всего не изменится, то есть все оставшиеся узлы вернут оценку ниже, чем альфа. Поэтому вместо поиска с окном от альфа до бета, мы ищем с окном от альфа до альфа+1, что позволяет ускорить поиск. Конечно, если в каком-то узле мы получаем отсечение по бете, то его надо ценить заново, уже нормальным поиском.

Разница между двумя методами лишь в формулировке — они были разработаны примерно в одно время, но независимо, и поэтому известны под разными названиями.

Параллельный поиск

Распараллеливание альфа-беты — отдельная большая тема. Я вкратце пройдусь по ней, а кому интересно — почитайте Parallel Alpha-Beta Search on Shared Memory Multiprocessors. Сложность в том, что при параллельном поиске многие Cut-nodes анализируются до того, как другой поток найдет опровержение (установит бету), в то время как в последовательном поиске, при хорошей сортировке многие из этих узлов отсеклись бы.

Lazy SMP

Очень простой алгоритм. Мы просто запускаем все потоки одновременно с одним и тем же поиском. Коммуникация потоков происходит за счёт хеш-таблицы. Lazy SMP оказался неожиданно эффективным, настолько, что топовый Stockfish перешел на него с YBW. Правда, некоторые считают, что улучшение произошло из-за плохой реализации YBWC и слишком агрессивных отсечений, а не из-за преимущества Lazy SMP.

Young Brothers Wait Concept (YBWC)

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

Dynamic Tree Splitting (DTS)

Быстрый и сложный алгоритм. Немного о скорости: скорость поиска измеряется через ttd (time to depth), то есть время, за которое поиск достигает определенной глубины. Этот показатель обычно можно использовать для сравнения работы разных версий движка или движка, запущенного на разном количестве ядер (хотя Komodo, например, увеличивает ширину дерева при большем количестве доступных ядер). Кроме того, во время работы движок отображает скорость поиска в nps (nodes per second). Это метрика гораздо более популярная, но она не позволяет сравнивать даже движок сам с собой. Lazy SMP, в котором нет никакой синхронизации, практически линейно увеличивает nps, но из-за большого объема лишней работы, его ttd не так впечатляющ. В то время как для DTS nps и ttd изменяются практически одинаково.

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

Оценка

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

Компьютер оценивает позицию в пешках: +1.0 означает, что у белых преимущество равноценное 1 пешке, -0.5 означает, что у черных преимущество в полпешки. Мат оценивается в 300 пешек, а позиция в которой известно количество ходов до мата x — в (300-0.01x) пешек. +299.85 значит, что белые ставят мат в 15 ходов. При этом сама программа обычно оперирует целыми оценками в сантипешках (1/100 пешки).

Какие параметры компьютер учитывает при оценке позиции?

Материал и мобильность

Самое простое. Ферзь 9-12 пешек, ладья 5-6, конь и слон 2.5-4 и пешка, соответственно, одна пешка. В общем, материал — это достойная эвристика оценки позиции и любое позиционное преимущество обычно трансформируется в конце концов в материальное.

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

Таблицы позиций фигур

Конь в углу доски обычно плох, пешки ближе к вражескому тылу становятся всё ценнее и так далее. Для каждой фигуры составляется таблица бонусов и штрафов в зависимости от ее положения на доске.

Пешечная структура

  • Сдвоенные пешки — две пешки на одной вертикали. Часто их сложно защитить другими пешками, считается слабостью.
  • Задние пешки — пешки, соседи которых находятся впереди них. Такие пешки нельзя защитить другими пешками, и поэтому они считаются слабость.
  • Проходные пешки — пешки, которые могут дойти до последней горизонтали без помех со стороны вражеских пешек. Сильная угроза противнику, особенно в эндшпиле
  • Изолированные пешки — пешки, у которых нет соседей. Такие пешки вообще нельзя защитить другими пешками, и поэтому они считаются серьезной слабостью.

Этапы игры

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

Поэтому многие движки имеют отдельную оценку для эндшпиля и для дебюта. Они оценивают этап игры в зависимости от оставшегося на доске материала и в соответствии с этим считают оценку — чем ближе к концу игры, тем меньше влияет дебютная оценка и тем больше — эндшпильная.

Прочее

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

Точная оценка или быстрый поиск?

Традиционный спор: что эффективнее, точно оценить позицию или достичь большей глубины поиска. Опыт показывает, что слишком «тяжелые» оценочные функции неэффективны. С другой стороны, более подробная оценка, учитывающая больше факторов, обычно приводит к более «красивой» и «агрессивной» игре.

Дебютные книги и эндшпильные таблицы

Дебютные книги

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

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

Эндшпильные таблицы

Вернемся к введению. Помните идею хранить много позиций в памяти и выбирать нужную. Вот она. Для малого (до 7) количества фигур просчитаны все существующие позиции. То есть в этих позициях компьютер начинает играть идеально, выигрывая в минимальное количество ходов. Минус — размер и время генерации. Создание этих таблиц помогло в исследовании эндшпилей.

Генерация таблиц

Сгенерируем все возможные (с учетом симметрии) позиции с определенным набором фигур. Среди них найдем и обозначим все позиции, где стоит мат. Следующим проходом обозначим все позиции, в которых можно попасть в позиции с матом — в этих позициях ставится мат в 1 ход. Таким образом находим все позиции с матом 2,3,4,549 ходов. Во всех неотмеченных позициях — ничья.

Таблицы Налимова

Первые эндшпильные таблицы, опубликованные в далёком 1998 году. Для каждой позиции хранится результат игры и количество ходов до мата при идеальной игре. Размер всех шестифигурных окончаний — 1.2 терабайта.

Таблицы Ломоносова

В 2012 году на суперкомпьютере Ломоносов в МГУ были посчитаны все семифигурные окончания (кроме 6 против 1). Эти базы доступны только за деньги и это единственные существующие полные семифигурные эндшпильные таблицы.

Syzygy

Стандарт де-факто. Эти базы гораздо компактнее баз Налимова. Они состоят из двух частей — WDL (Win Draw Lose) и DTZ (Distance to zeroing). WDL базы предназначены для использования во время поиска. Как только узел дерева найден в таблице, у нас есть точный результат игры в этой позиции. DTZ предназначены для использования в корне — они хранят количество ходов до обнуляющего счётчик ходов хода (хода пешкой или взятия). таким образом для анализа достаточно WDL баз, а DTZ базы могут пригодиться при анализе эндшпилей. Размер Syzygy гораздо меньше — 68 гигабайт для шестифигурных WDL и 83 для DTZ. Семифигурных баз не существует, так как их генерация требует примерно терабайт оперативной памяти.

Использование

Эндшпильные таблицы используются в основном для анализа, прирост силы игры движков небольшой — 20-30 пунктов ЭЛО. Тем не менее, так как глубина поиска современных движков может быть очень большой, запросы к эндшпильным базам из дерева поиска происходят еще в дебюте.

Прочие интересности

Жираф или нейронные сети играют в шахматы

Некоторые из вас возможно слышали о шахматном движке на нейронных сетях, достигшем уровня IM (что, как мы поняли во введении, не так уж и круто для движка). Его написал и выложил на Bitbucket Matthew Lai, который, к сожалению прекратил работу над ним из-за того, что начал работать в Google DeepMind.

Тюнинг параметров

Добавить новую функцию в движок несложно, но как проверить что она дала усиление? Простейший вариант — сыграть несколько партий между старой и новой версией и посмотреть кто победит. Но если улучшение небольшое, а так оно обычно и бывает после того, как все основные фичи добавлены, игр должно быть несколько тысяч, иначе достоверности не будет.

Stockfish

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

Их решение типично для опенсорса — добровольцы предоставляют свои мощности чтобы прогнать на них сотни тысяч игр.

CLOP

Программа, которая оптимизирует параметры через линейную регрессию, используя результаты игр движка с самим собой с разными параметрами. Из минусов — очень ограниченной размер задачи: оптимизировать сотню параметров (вполне адекватное число для движка) ей не под силу, по крайней мере за адекватное время.

Texel's tuning

Решает проблему предыдущего метода. Берем большое количество позиций (автор предлагал 9 миллионов позиций из 64000 игр, я брал 8 миллионов из почти 200000), для каждой сохраняем результат партии (победа белых 1, ничья 0.5, поражение 0). Теперь минимизируем ошибку, которая находится сумма квадратов разности результата и сигмоида оценки. Метод эффективный и популярный, но работает не на всех движках.

Stockfish tuning

Еще одна методика от лидера. Берем параметр равный x, и сравниваем (в нескольких десятках тысяч партий) движок с параметром равным x-sigma и x+sigma. Если победил движок с большим параметром, сдвигаем немного вверх, иначе — немного вниз, и повторяем.

Соревнования движков

Из всех проводимых тестирований соревнований хотелось бы отдельно выделить TCEC. От всех остальных он отличается мощным железом, тщательным подбором дебютов и длинным контролем. В последнем финале было сыграно 100 партий на 2 x Intel Xeon E5-2690v3 с 256 гигабайтами RAM с контролем 180'+30". В таких условиях количество ничей огромно, и результативными было всего 11 партий.

Заключение

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

Автор: Randl

Источник

www.pvsm.ru

15 лет назад компьютер Deep Blue обыграл человека в шахматы / Блог компании IBM / Хабр

Корпорация IBM отмечают ещё один юбилей в своей истории — 11 мая 1997 года компьютер Deep Blue в матче из 6 партий обыграл чемпиона мира по шахматам Гарри Каспарова: дважды победил компьютер, один раз — человек и три партии было сыграно в ничью.

Победа Deep Blue не далась легко IBM — в недрах корпорации еще с начала 1950-х годов прошлого века велись работы по созданию специализированных вычислительных машин и соответствующего программного обеспечения. В 1985 году аспирант университета Карнеги Мелоун Фенг Хсу (Feng-hsiung Hsu) в ходе работы над своей диссертацией построил компьютер для решения шахматных задач, получивший название ChipTest. Его коллега Мюррей Кемпбелл (Murray Campbell), присоединившийся к проекту позднее, вместе с самим Фенгом Хсу были приняты в подразделение IBM Research, занимавшееся разработкой исследовательских инновационных задач. Именно они ответственны за появление проекта Deep Blue, которому в 1989 году оказалось ещё не под силу играть с человеком — тогда Каспаров выиграл. Аналогичная история повторилась в 1996 году, однако уже через год третья версия программы смогла взять реванш, и финальная партия закончилась за 19 ходов — при том, что партии у шахматистов уровня Каспарова длятся около четырёх часов.

Технически Deep Blue представлял из себя компьютер с 32-ядерным (32-node) процессором IBM POWER2, каждый из которых был подключён к восьми специализированным шахматным процессорам VLSI, работающим на серверной платформе RS/6000. Код Deep Blue был написан на С, а в качестве операционной системы использовалась IBM AIX.

После победы Deep Blue был помещён в Смитсоновский музей Вашингтона, положив начало новой эпохе суперкомпьютеров IBM Blue Gene.

Под катом видео, подготовленное IBM к юбилею, в котором Мюррей Кемпбелл — один из первых разработчиков Deep Blue — рассказывает о своём проекте.

[Источник]

habr.com


Читайте также
  • Гиперскоростная звезда – более 1.000.000 миль в час
    Гиперскоростная звезда – более 1.000.000 миль в час
  • Астрономы обнаружили самую большую спиральную галактику
    Астрономы обнаружили самую большую спиральную галактику
  • Млечный путь содержит десятки миллиардов планет, схожих с Землей
    Млечный путь содержит десятки миллиардов планет, схожих с Землей
  • Млечный путь разорвал своего спутника на четыре отдельных хвоста
    Млечный путь разорвал своего спутника на четыре отдельных хвоста
  • Найден источник водородных газов для нашей Галактики
    Найден источник водородных газов для нашей Галактики