Научная статья на тему 'Особенности построения вероятностного алгоритма принятия решений при компьютерном моделировании карточных игр'

Особенности построения вероятностного алгоритма принятия решений при компьютерном моделировании карточных игр Текст научной статьи по специальности «Экономика и бизнес»

CC BY
369
43
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОЛЛЕКЦИОННЫЕ КАРТОЧНЫЕ ИГРЫ / КЛАСТЕРИЗАЦИЯ / АЛГОРИТМЫ ПРИНЯТИЯ РЕШЕНИЙ / ОЦЕНКА ЭФФЕКТИВНОСТИ АЛГОРИТМА

Аннотация научной статьи по экономике и бизнесу, автор научной работы — Коськин И.А.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Особенности построения вероятностного алгоритма принятия решений при компьютерном моделировании карточных игр»

_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «ИННОВАЦИОННАЯ НАУКА» №9/2016 ISSN 2410-6070_

УДК 04.81

И.А. Коськин

Магистрант

Учебно-научно-исследовательский институт информационных технологий Орловский государственный университет имени И.С. Тургенева

г. Орёл, Российская Федерация

ОСОБЕННОСТИ ПОСТРОЕНИЯ ВЕРОЯТНОСТНОГО АЛГОРИТМА ПРИНЯТИЯ РЕШЕНИЙ ПРИ КОМПЬЮТЕРНОМ МОДЕЛИРОВАНИИ КАРТОЧНЫХ ИГР

Аннотация

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

Ключевые слова

Коллекционные карточные игры, кластеризация, алгоритмы принятия решений, оценка эффективности алгоритма.

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

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

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

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

Предположим, что было выделено 'clusters' независимых кластеров и в матрице f[1..clusters, 1..clusters] описано в числовой форме их взаимодействие. Также предположим, что в руке у игрока находится 'handsize' карт. Общее число карт, оставшихся в колоде соперника, обозначим как 'amount'. Предположительное число карт каждого кластера, оставшихся в колоде противника (о том, как можно оценить данные значения, писалось в [2]) - будет храниться в left[1..clusters]. За probability[1..clusters] обозначим вероятности происхождения события каждого отдельного кластера. Переменной 'value' обозначим оценку карты. Получим алгоритм получения текущих оценок для каждой карты из руки:

for i in ¡..clusters probability[i] = left[i] / amount * 100% for j in ¡..handsize

hand[j].value = hand[j].value + probability[i] * (f[hand[j].cluster, i] + f[i, hand[j].cluster])

_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «ИННОВАЦИОННАЯ НАУКА» №9/2016 ISSN 2410-6070_

return max(hand.value)

В данном случае hand[j].value - это переменная, в которой хранится оценка карты hand[j], а f[hand[j].cluster, i] - элемент матрицы f с индексами порядкового номера кластера, к которому относится карта hand[j] и i.

Это самый простой случай алгоритма. Рассмотрим вариант, когда карта может принадлежать более чем к одному кластеру. В таком случае в алгоритм добавится еще один цикл и он будет выглядеть следующим образом: for i in 1..clusters probability[i] = left[i] / amount * 100% for j in 1..handsize

for k in 1..hand[j].clusertsamount

hand[j].value = hand[j].value + probability[i] * (f[hand[j].cluster[k], i] + f[i,

hand[j].cluster[k]])

return max(hand.value)

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

Предположим, что количество кластеров тем больше, чем размер руки и каждая из карт принадлежит не ко всем кластерам, т.е. clusters > handsize и clusters > hand[j].clusters. Для более наглядной и простой оценки заменим переменные handsize и hand[j].clusters на превышающую их clusters. Тогда получим следующий алгоритм: for i in 1..clusters probability[i] = left[i] / amount * 100% for j in 1..clusters

for k in 1..clusters

hand[j].value = hand[j].value + probability[i] * (f[hand[j].cluster[k], i] + f[i,

hand[j].cluster[k]])

return max(hand.value)

Асимптотическая сложность внешнего цикла с его внутренним содержимым будет O(clusters3). При этом необходимо учитывать, что на самом деле в двух внутренних циклах шагов цикла будет меньше, чем во внешнем, и допущение о замене было принято для удобства записи. Операция return max(hand.value) в простейшем случае потребует перебора всех значений hand[1..handsize].value и выбор максимального из них. Так как ранее производилась замена handsize ^ clusters, то сложность данной операции будет O(clusters). Итоговая сложность алгоритма оценки текущего хода получится O(clusters3 + clusters) = O(clusters3). Соответственно, при глубине игры d сложность будет O(clusters3 * d), где d - константа. Тогда общая сложность алгоритма будет равна O(clusters3).

Предположим, что на каждом ходу возможно b допустимых ходов, и глубина игры будет равняться d. Допустим, что b > clusters. В таком случае сложность алгоритма aß-оценки будет равна O(bd/2). Сравним полученные оценки:

clusters3 = bd/2 при clusters = b и d = 6, соответственно, при глубине игры в 6 ходов и количестве кластеров, равном степени ветвления дерева данные алгоритмы покажут одинаковую эффективность.

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

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

_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «ИННОВАЦИОННАЯ НАУКА» №9/2016 ISSN 2410-6070_

O(n3m). При этом матрица f будет иметь размерность nm * nm.

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

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

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

Рассмотрим более мощного робота на основе вышеупомянутого алгоритма. Алгоритм позволяет вернуть набор значений вероятности тех или иных событий, причем отдельные кластеры отмечены, как защитные, другие - как атакующие. Если стиль игры установлен, как защитный (при разнице менее 5% между защитным и атакующим решением выбирается защитное) - то при наличии двух решений, одно из которых защитное и произойдет с вероятностью 12,5%, а другой атакующее и произойдет с вероятностью 16,6%, будет выбрано первое. Если кластеров много, то придется оперировать не с цифрами 1/8 и 1/6, а с цифрами 1/50, 1/52 и т.п. Это может стать причиной того, что с течением игры, при уменьшении числа возможных событий, границы вероятностей будут сильно меняться и для описания конкретного стиля игры придется корректировать границы принятия решений «по ходу пьесы». Такая задача может стать значительно сложнее.

Выводы:

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

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

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

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

Список использованной литературы:

1. Коськин, И.А. Искусственный интеллект в компьютерных играх [Текст] // SmartlT: Сборник трудов Международного конкурса научных работ студентов. - Орел: Госуниверситет-УНПК, 2014. - С.81-84.

2. Коськин, И.А. Моделирование процесса оценки ситуации при принятии решений в коллекционных карточных играх [Текст] // Международный научный журнал «Инновационная наука». - Уфа: ООО АЭТЕРНА, 2016. - С. 101-104.

© Коськин И.А., 2016

i Надоели баннеры? Вы всегда можете отключить рекламу.