Романтика искусственного интеллекта
Шрифт:
У каждой из фигур есть собственная сила, не зависящая от расположения
К сожалению, в деле учета материала нет никакой строгой теории, и, может быть, такая теория даже невозможна. Ведь что нам нужно, по сути? Необходимо точно определить значимость каждой фигуры. Мы можем совершенно произвольно определить стоимость самой слабой фигуры – пешки или самой сильной – ферзя. Например, пусть пешка стоит 1 балл. А вот далее начинаются серьезные проблемы. Необходимо договориться, насколько сильнее пешки каждая из фигур. Причем безотносительно конкретной позиции. Это сложно во многих планах. Для любого шахматиста сила фигуры привязана к позиционным факторам: сдвоенные слоны сильнее двух несвязанных. Сила пешки увеличивается по мере ее продвижения к последней горизонтали. В дебюте ладьи мало что решают, но в эндшпиле, когда большая часть доски пустеет, их сила резко возрастает. Конь очень важен в миттельшпиле, но в эндшпиле ему сложно перескакивать с фланга на фланг. Слон скачет с большой легкостью, но у слона серьезные проблемы в миттельшпиле, где он на каждом шагу наталкивается на пешки и свои, и противника, кроме того, для слона доступна только половина шахматного поля – половина его цвета. Но тем не менее надо как-то от всего этого отвлечься и оценить собственную силу фигур, ведь интуитивно ясно, что есть какие-то внутренние характеристики.
Такая ситуация характерна для многофигурных игр, особенно если фигуры можно рубить. В русских шашках проблема проявляется слабее, видов фигур только два: шашка и дамка. В рэндзю проблемы материала вообще нет, в этой древней игре только один вид фигур – камень, и более того, после каждого хода количество камней игроков одинаково, а значит, материального фактора нет вообще. Но мы сейчас говорим о шахматах.
Стандартный подход к оценке материала опирается на составление экспертного мнения. Сделаем так: соберем группу опытных шахматистов и дадим задание оценить силу фигуры, например по десятибалльной шкале, приняв цену пешки в один балл. После чего составим оценку для каждой фигуры как среднее арифметическое оценок для данной фигуры по всем экспертам. Как это ни странно, но такой простой способ сработает, и довольно неплохо. Дело в том, что эксперты тоже не имеют никакой теории силы фигур, как и мы, а значит, опираются на собственные интуитивные ощущения. В игре эксперт использует тоже свои представления о силе фигур, а следовательно, если эксперт добросовестно передаст свое понимание вопроса, он как бы передаст свой реальный опыт, а значит, даст программе возможность эффективно сыграть против себя. С учетом же того, что мы собрали сильных экспертов, становится ясно, что их личная сила, таким образом, передается и программе.
Но необходимо заметить, что вопрос, сформулированный так примитивно, – как оценить собственную силу фигур безотносительно позиции, – не дает эксперту возможности передать более значительную часть своего знания – знания о взаимной силе фигур.
Материальные факторы зависят от взаимного расположения, и это обстоятельство значительно усложняет анализ
Следующим шагом необходимо поинтересоваться у экспертной компании не только о том, как оценить некий фактор, но и какие вообще материальные факторы возможны. Имеются в виду факторы, определяемые положением фигур. Группа таких факторов выглядит намного сложнее. И здесь в полный рост встает проблема взаимопонимания. Цель разработчика – грамотно задать вопрос. Искусство вопроса предполагает, что задающий вопрос, может быть, не эксперт, но все же имеет хорошее представление о предмете. Поэтому хотите вы или нет, но если взялись писать программу, играющую в интеллектуальную игру, вам придется и самому научиться в нее играть на приличном уровне. Это даст возможность правильно сформулировать вопрос и выделить из ответов существенную информацию. Критерий хорошего экспертного ответа (в отношении определения фактора) таков: фактор должен быть легко алгоритмизируем. А это не всегда так. Вот пара примеров.
Хороший фактор. Сдвоенные слоны. Так называются слоны, находящиеся на соседних диагоналях. Это обстоятельство алгоритмически легко проверяется, поэтому фактор не только сильный с точки зрения шахматиста, но и удобный с точки зрения программиста.
Плохой фактор. Ладья имеет высокую степень свободы. Не вполне понятно, что имеется в виду. Этим может быть сказано, что ладья может своим ходом встать на значительное число полей, что, конечно, неплохо, но что, если все такие поля бьются фигурами противника. Кроме того, «высокая степень свободы» – это качественная оценка, а нам необходимы оценки количественные. Фактор можно превратить в хороший следующей переформулировкой: ладья полностью контролирует открытую вертикаль. Что такое открытая вертикаль, понятно и легко проверяемо, а контроль означает, что ладья будет угрожать любой фигуре, вставшей на эту вертикаль, причем если вертикаль уже открыта, значит, на ней нет пешки. Любая же другая фигура сопоставима с ладьей, и, значит, ладейная угроза всегда будет существенна.
Если разработчику и экспертной группе удалось сформулировать хорошо алгоритмизируемые факторы материальной группы, то следующий шаг очевиден, необходимо опять провести численную оценку по той же шкале, по которой проводилась оценка абсолютной силы фигур.
Есть группа факторов, определяющих не силу фигуры, собственную или во взаимодействии с еще одной или двумя фигурами, а оценивающих качество позиции в целом. Это так называемые позиционные факторы
Здесь разработчика и экспертов ожидают наиболее существенные проблемы в связи с тем, что хорошо алгоритмизируемых позиционных факторов не бывает. Как, например, описать, что означает: давление на королевский фланг, контроль центра, низкая активность фигур, слабое фигурное взаимодействие на фланге и т. д.? Некоторые рекомендации и здесь возможны, но хорошее решение позиционной проблемы, обладающее математической строгостью, если и возможно, то пока даже в отношении такой разработанной игры, как шахматы, неизвестно.
В шахматах, однако, есть один хорошо алгоритмизируемый позиционный фактор – это давление на пункт. В отношении любого поля доски реально посчитать количество фигур, держащих этот пункт под ударом. Вот это количество ударов можно считать первичной оценкой фактора. Подчитав количество ударов на поля, принадлежащие центру, несложно оценить, кто из игроков имеет больше шансов выиграть борьбу за центр и, следовательно, кому из них плюсовать этот фактор. А оценку фактора, входящую в оценочную функцию, необходимо опять спрашивать у экспертной группы по уже известному сценарию.
Кстати, этот фактор – давление на пункт, или, иначе говоря, возможность захвата пункта, можно выделить в очень многих играх, а стало быть, его допустимо считать общеприменимым
Идея опоры на чисто арифметический подсчет ударов, конечно, весьма спорна, так как давление разными фигурами явно не равноценно. Например, не факт, что давление ферзем более сильно, чем давление пешкой. В определенных условиях пешка в силу своей мало-ценности может оказаться более эффективной. Но, с другой стороны, учитывать в позиционном факторе еще и силу фигуры, осуществляющей давление, может слишком сильно усложнить оценочную функцию, увеличив вероятность ошибки. Здесь работает общее правило, утверждающее, что чем сложнее механизм, тем меньше вероятность его правильной работы.
Как считать оценочную функцию?
Существует общий принцип, вытекающий из природы игровой стратегии, стремящейся минимизировать ущерб.
Он называется принципом минимакса
Пока ясно, что есть факторы, описываемые двумя числами – ценой и количественным значением. Это как в овощном ларьке, у каждого овоща есть цена, и есть их наличное количество. Центр доски или королевский фланг, конечно, присутствуют на доске в единственном экземпляре, и пара сдвоенных слонов может быть только одна, но материальные факторы, в том числе и ферзь, могут быть в нескольких экземплярах (пешка может стать ферзем). Введем обозначения: mk – это количество фактора, и vk – это цена, или, еще говорят, вес фактора. Тогда общая оценка позиции может быть записана следующим выражением:
Теперь попробуем разобраться, как оценочную функцию использовать для выбора хода. Для этого представим себе некую гипотетическую игру, в которой на каждый ход одного из игроков существуют ровно два ответа. Назовем игроков: Первый и Второй – и выберем продолжение для Первого игрока, при глубине анализа в один ход (один ход – это ход Первого и ответ Второго). Анализ игры в этом случае будет опираться на такое дерево (рис. 2.4):
Рис. 2.4. Пример минимакса
Похожая картинка уже была, но здесь информации несколько больше. Конечные ситуации оценены, и есть вопрос, какой ход: левый или правый – должен выбрать Первый игрок. Возможно, кому-то покажется, что лучший ход – левый, так как именно там расположена ветка с наилучшей оценкой в пять баллов. Но нужно понимать, что после левого хода Первый игрок передает право выбора хода Второму, и этот Второй выберет ветку, оканчивающуюся единичной оценкой. Поэтому необходимо выбирать правый вариант, в котором Второй игрок отдаст Первому ветку с худшей оценкой 2. Заметим, что Первый игрок реально может выбирать только из худших оценок, и все, что в его силах, – это выбор наилучшего из худшего. Данный принцип называется принципом минимакса. Рассмотрим для иллюстрации более сложный пример. Дерево перебора оформим в виде таблицы, на нижнем уровне которой – значения оценочной функции на максимальной глубине дерева перебора, на промежуточных уровнях – значения оценки, выбранные противниками в свою очередь хода (оценки переходят снизу вверх):
Как и любой эвристический механизм, минимакс имеет свои плюсы и минусы, не гарантируя наилучшего продолжения, он позволяет выбрать действительно разумный вариант игры
Принцип основан на предположении, что игроки имеют равную силу. Действительно, преуменьшать возможности оппонента нет смысла. Если окажется, что он играет сильнее, чем предполагалось, – это может иметь плохие последствия. Исходить из того соображения, что соперник играет лучше, – заведомо проигрышная психология. Оптимальная точка зрения заключается в том, что я играю так хорошо, как могу, и мой соперник играет не хуже. В терминах мини-макса это означает следующее. Если выбор хода за мной, то я выберу ход с наилучшей оценкой для себя и наихудшей для противника, он, в свою очередь, сделает то же самое.