Главная » Игры, Теория » Эффект горизонта

0

Шахматы — сложная игра. Перебор на некоторую фиксированную глубину для спокойных, тихих перемещений, может быть, и достаточен. В напря­женных же строках игры программа может получить неверный результат и повести себя непредсказуемо, например, начать выбрасывать фигуры. Это явление получило название эффекта горизонта. Простейшее его прояв­ление — программа не может до конца рассмотреть длинный размен, ей кажется, что она выигрывает, а на самом деле она теряет. Существует еще множество проявлений эффекта горизонта. Например, если программа пе­ребирает на 8 полуходов, то в некоторой строке игры вполне может оказать­ся несколько взятий и шахов, и программа в конце перебора получит неиз­вестно что. Вариантов тактики на доске может быть сколько угодно, и даже в серьезной, профессиональной программе может обнаружиться эффект го­ризонта. Например, наш ферзь в ловушке. Человек посмотрит на такую по­зицию, и ему ясно практически сразу, что ферзь пропал. Программа же смотрит не так. Она находит длинную тактическую строку, в которой, на­пример, есть размен фигур, шах, несколько угроз или просто атак, и она уже не видит потерю ферзя, данный ход вытеснен за горизонт видимости программы. Существует великое множество всяких тактических последова­тельностей, которые приводят к эффекту горизонта. Как же бороться с этим эффектом? Лучше всего перебрать ходов на 16 или на 20, но это невозмож­но, и приходится прибегать ко всяческим хитростям. В конце основного поиска (полного перебора) вставляют упрощенный поиск, который рас­сматривает только форсированные ходы. В самом простейшем случае это взятия. Считается правилом хорошего тона рассматривать взятия до конца. Таким образом, программа как бы считает до конца, но не все. В более сложных вариантах форсированного поиска до некоторой глубины могут просматриваться шахи и даже некоторые другие ходы (например, атаки). Более подробно об организации форсированных вариантов будет сказано позже. Далее, в основном дереве перебора глубину в напряженных строках можно сделать более гибкой, т. е. чтобы программа просматривала такие строки глубже, чем остальные. Это называется выборочными продлениями. Типичные случаи продлений — при шахе, при размене, при авансе пешек (пешка пошла на предпоследнюю горизонталь). Продления могут быть, если оценка данного хода существенно отличается от остальных (это, как прави­ло, взятия). Если программа рассматривает взятия до конца и имеет неко­торые выборочные продления, то эффект горизонта в значительной степени уже сглажен. Но все не так просто. Тактических последовательностей может быть много. Если мы начнем продлевать все такие варианты, это приведет к взрыву дерева поиска и программной аварии. Я уже упомянул о варианте, где ферзь попадал в ловушку. Полный переборщик, чтобы увидеть это, дол­жен считать на 12 полуходов, что нереально. Если расширять строки, то нужно расширять и атаки, что приведет к резкому замедлению поиска, и программе для нормальной игры не будет хватать простых перемещений в полном дереве перебора. Это напоминает ситуацию "нос вытащишь — хвост увязнет, хвост вытащишь — нос увяз". Программа не видит других важных стрфк, которые не попадают под упрощенные критерии сильных перемещений.

В шахматах бывает такая ситуация: жертва фигуры на переднем плане и уг­роза королю на заднем плане. Человек, как правило, сразу видит такие си­туации и их потенциальную опасность. Иное дело, машина. Машина, чтобы увидеть, должна сосчитать. Тут как раз в полной мере проявляется эффект горизонта. Программа прерывает просчет в такой опасной ситуации, что дальше некуда, но она этого не понимает. Вернемся к жертве фигуры. Жертва в большинстве случаев оправдывается угрозой королю. Программа не понимает, что в глубине дерева перебора она потеряет значительно больше, а может, и проиграет. Рассмотрим простой пример на рис. 2.13.

В этой позиции ход черных. Они могут взять конем ладью на al. Полный переборщик не видит, что его король под угрозой. Он видит в пределах сво­его дерева перебора, что он выигрывает ладью, а королем успевает уйти. Если он и чувствует угрозу, то это оценка стратегического порядка, она меньше материальной. Выигрыш ладьи все перекрывает. Черные берут ладью на al, белые идут ферзем на f8, и пошло… Чтобы прочувствовать данную позицию, программа должна считать на 10—12 полуходов. Необхо­димо сказать, что данная позиция проста. Нужно просто продлевать шахи, и программа все прекрасно увидит. Для данного примера достаточно даже шести полуходов полного перебора с продлением шахов и взятий до конца в форсированных вариантах. Но не всегда шахов бывает достаточно. Не все­гда все так просто. Угроза королю может быть глубокой. Нет шахов или их мало. Но давление на короля, тем не менее, усиливается. Вот пример (рис. 2.14).

Рис. 2.14. Глубокая угроза королю

Рис. 2.13.

В этой позиции ход тоже черных. Они могут взять пешку ферзем на а2. Ка­кая, казалось бы, может быть опасность? Только ферзь уходит от защиты своего короля, а вокруг него чувствуется какая-то потенциальная угроза. Белые следующим ходом идут ферзем на е5. И что? В чем опасность? Опас­ность заключается в ходе белых конем g5—f7 с взятием пешки и, по сущест­ву, жертвой коня. Коня черные могут взять, но вокруг них начнет развора­чиваться опасная матовая ситуация. В любом случае, подобных ситуаций лучше избегать, и пешка не стоит всего того, что за этим последует. На ка­кой глубине здесь начинаются реальные шахи? Как программе это увидеть? Чтобы решить эту задачу, полному переборщику потребуется неизвестно сколько уровней. Полный переборщик на 10 полуходов, расширяющий ша­хи, с нулевым ходом и взятиями до конца, не видит в глубине дерева неиз­бежной потери материала и берет пешку. Что же делать? Если мы внима­тельно посмотрим на ключевые строки этой позиции, то увидим, что про­грамма должна взятия рассматривать глубже. Это, прежде всего, ход черных с4а2, потом длинный размен по полю f7 (примерно 4 взятия), и программа увидит ситуацию правильно и оценит опасность. Для данного варианта дос­таточно полного перебора на 8 полуходов, расширять взятия до какой-то глубины и шахи значительно глубже. Говоря другими словами, для данного примера ключевыми являются строки с взятиями.

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

Литература:

Корнилов Е. Н.  Программирование шахмат и других логических игр. — СПб.: БХВ-Петербург, 2005. – 272 е.: ил.

По теме:

  • Комментарии