Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conspekt.doc
Скачиваний:
11
Добавлен:
31.08.2019
Размер:
1.39 Mб
Скачать

5.19 Поиск решений в игровых программах.

В ИИ деревья представляют особый интерес. Дело в том, что любой дискретный процесс принятия решений может быть представлен в виде дерева.

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

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

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

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

Если бы имелась возможность обследовать дерево решения полностью вплоть до листьев, то имелась бы имелась бы возможность для машины выбрать ход, обеспечивающий выигрыш независимо от решения противника. В действительности же полный просмотр невозможен. Шеннон установил, что для обследования всего дерева в середине шахматной партии потребуется 10^80 лет в предположении весьма быстрой ЭВМ. Если быстродействие такой ЭВМ увеличить в миллион раз, то при этом потребуется 10^24 лет - тоже слишком много. Эффект комбинаторного взрыва проявился бы здесь со всей силой, так что о полном просмотре дерева не может быть и речи.

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

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

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

Важными компонентами статистической оценочной функции являются:

  • материальное соотношение (перевес фигур);

  • мера относительной подвижности фигур (число допустимых ходов, имеющихся у игрока);

  • контроль центра.

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

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

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

Рассмотрим пример применения статистической оценочной функции в качестве метода ведения игры в крестики-нолики.

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

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

Пусть машина ставит Х, а противник - О.

  • Если конфигурация, которую предстоит оценить содержит три подряд Х (машина выигрывает), то СОФ = +10;

  • Если следуют три О, то СОФ = -10;

  • Для конфигураций, которые не являются выигрышными ни для одного из игроков СОФ вычисляется следующим образом:

СОФ = No - Nx,

  • где No - число строк, столбцов и диагоналей, все еще открытых для машины, т.е. не заблокированных знаками О,

  • Nx - число строк, столбцов и диагоналей, все еще открытых для игрока, т.е. не заблокированных знаками Х.

I 0.7

I1.5

Использование такой СОФ не годится, если дерево имеет единичную глубину (см. вершины []). Просмотр на один шаг дальше позволяет выбрать хороший ход.

Значения около ветвей получаются в результате вычисления СОФ, а те, которые заключены в [], соответствуют величинам, полученным в результате применения минимаксной процедуры.

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

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

Другим примером является выбор перспективного хода. Он уменьшает фактор ветвления. Для этого программы снабжаются генератором перспективного хода.

Минимаксный алгоритм.

Пользуясь минимаксным принципом и зная значения оценок для всех вершин "подножья" дерева поиска, можно определить оценки всех остальных вершин. Это видно из рисунка:

альфа

(ход МАКСА)

бета

(ход МИНА)

альфа

(ход МАКСА)

бета

статические оценки

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

Лучшим ходом МАКСА из позиции а является а-b. Лучший ответ МИНА - это ход b-d и т.д. Эту последовательность ходов называют основным вариантом. Основной вариант показывает , какова "минимаксно-оптимальная" игра для обоих участников. Обратите внимание на то, что оценки всех позиций, входящих в основной вариант, совпадают.

Мы различаем два вида оценок: оценки вершин нижнего уровня (статические оценки) и оценки внутренних вершин (динамические, рабочие оценки).

Правила распространения оценок можно сформулировать следующим образом:

Будем обозначать статистическую оценку позиции Р через v(P). а ее рабочую оценку через V(P). Пусть Р1,...,Рn - разрешенные приемники позиции Р. Тогда соотношения между статичекими и рабочими оценками можно записать так:

V(P) = v(P),

если Р - терминальная вершина.

V(P) = max V(Pi),

i

если Р - позиция с ходом МАКСА.

V(P) = min V(Pi),

i

если Р - позиция с ходом МИНА.

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

минимакс(Поз,ЛучшПоз,Оц),

где Оц - минимаксная оценка позиции Поз,

ЛучшПоз - наилучшая позиция-приемник позиции Поз

(лучший ход, позволяющий достигнуть оценки

Оц).

Отношение ходы(Поз,СписПоз) задает разрешенные ходы игры:

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

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

минимакс(Поз,ЛучшПоз,Оц):-

ходы(Поз,СписПоз),!,

лучше(СписПоз,ЛучшПоз,Оц);

стат_оц(Поз,Оц).

(Здесь ! исключает возврат к статическим оценкам).

Далее определим отношение лучше:

лучше([Поз],Поз,Оц):-

минимакс(Поз,_,Оц),!.

(Некий ход Поз будет лучшим и будет иметь оценку Оц, если

выполнится условие минимакс(Поз,_,Оц)).

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

лучше([Поз1|СписПоз],ЛучшПоз,ЛучшОц):-

минимакс(Поз1,_,Оц1),

лучше(СписПоз,Поз2,Оц2),

выбор(Поз1,Оц1,Поз2,Оц2,ЛучшПоз,ЛучшОц).

(Здесь находим оценку Оц1 для Поз1, находим лучшую пози-

цию Поз2 в остатке списка СписПоз, сравниваем Поз1 и

Поз2 по оценкам Оц1 и Оц2 и записываем результат сравне-

ния в ЛучшПоз, ЛучшОц).

Теперь определим предикат выбор:

выбор(Поз0,Оц0,Поз1,Оц1,Поз0,Оц0):-

ход_мина(Поз0),Оц0>Оц1,!;

ход_макса(Поз0),Оц0<Оц1,!.

выбор(Поз0,Оц0,Поз1,Оц1,Поз1,Оц1).

(Если в Поз0 был ход мина, то в позиции Поз будет ход

макса, поэтому при ход_мина(Поз0) выбираем ту позицию, у

которой будет больше Оц0 и наоборот).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]