Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

2.6 Снижение размерности. Гипергаммон.

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

2.7 Разделение игрового процесса на фазы.

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

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

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

НЕ нашли? Не то? Что вы ищете?

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

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

3 Построение оценочных функций на основе нейронных сетей.

3.1 Теория нейронных сетей.

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

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

Под искусственной нейронной сетью обычно понимают ориентированный граф - сеть состоящий из вершин - нейронов соединенных ребрами - связями. Каждый нейрон может принимать несколько, или бесконечно много, состояний, характеризующихся потенциалом нейрона - некоторым действительным числом. К нейрону подходят входные связи, по которым ему передается возбуждение от других нейронов, и выходные связи при помощи которых нейрон передает возбуждение другим нейронам. Состояние нейрона pi определяется как некоторая нелинейная функция f от суммарного возбуждения переданного ему другими нейронами: , где pj - потенциал возбуждающего нейрона, а cij - вес соответствующей связи.

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

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

Типы нейронных сетей (многослойный перцептрон (MLP), сети построенные по адаптивной резонансной теории (ART), двунаправленная ассоциативная память (BAM), самоорганизующиеся карты (SOM)) различаются топологией и методом обучения. Под топологией сети понимается количеством входных и выходных нейронов, число скрытых уровней и способ связи нейронов. Считается, что в задачах аппроксимации функций наилучшие результаты достигаются при использовании многослойного перцептрона (MLP).

Выход Y

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

Рис 1. Схема топологии многослойного перцептрона.

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

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

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

Генетические алгоритмы.

Генетический алгоритм (Genetic algorithm) представляет собой технику оптимизации, которая моделирует феномен естественной эволюции (впервые открытый Чарльзом Дарвином). При естественной эволюции выживают и дают самое многочисленное потомство особи, наиболее адаптированные к сложным условиям окружающей среды. Степень адаптации, в свою очередь, зависит от набора хромосом конкретной особи, полученным от родителей. Это основа выживания сильнейшего – не только процесс выживания, но и участие в формировании следующего поколения.

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

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

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

Оператор мутации (Mutation) вносит произвольное изменение в гены хромосомы (иногда даже несколько изменений в зависимости от частоты применения). Он позволяет создавать в популяции новый материал.

3.2 Использование нейронных сетей в качестве оценочной функции.

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

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

В качестве данных для обучения могут быть применены: база партий признанных игроков, выборка с позициями, оцененными эвристической оценочной функцией, выборка с оценкой по числу выигранных партий одним из игроков. Каждый из этих вариантов обладает своими преимуществами и недостатками. Так, база партий признанных игроков может позволить получить хорошие оценки качества позиций, но такие базы отсутствуют в свободном доступе, либо имеют очень ограниченный объем или неопределенное происхождение. Нейронная сеть, обученная по выборке с позициями, оцененными эвристической оценочной функцией (ОФ), не может играть лучше чем исходная ОФ, но может вычисляться быстрее. Наилучших результатов можно добиться используя выборки с оценкой по числу выигранных партий одним из игроков. Для построения такой выборки проводится N партий для некоторого набора позиций (размер выборки), между двумя равными сильными игроками. Причем под числом побед белых над черными можно понимать оценку данной позиции.

3.3 Использование MatLab для обучения нейронных сетей.

Для обучения нейронной сети использовался инструмент nntool программного комплекса МаtLab 7.0. Использование MatLab для обучения нейронной сети может быть объяснено повышенным удобством построения нейронных сетей с помощью инструмента nntool, возможностью визуализации построенной нейронной сети, возможностями значительных вариаций методов обучения нейронных сетей, несколькими способами инициализации весов, наглядным представлением и отсутствием необходимости разрабатывать и отлаживать код обучения НС, и тем самым сокращение сроков разработки готовой программы.

Рис. 2 Графическое представление одной из использовавшихся нейронных сетей и график ошибки обучения сети в инструменте nntool.

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

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

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

3.4 Экспериментальные данные.

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

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

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

Наилучшие же результаты показал метод формирования обучающей выборки, основанный на вычислении оценки по числу выигранных партий одним из игроков. Так, для получения обучающей выборки генерируется некоторое число позиций (в работе использовались выборки размером не более 10 тыс. позиций, для работы с большими выборками инструменту nntool не хватает оперативной памяти). Для оценки каждой из этих позиций проводится турнир из N партий между двумя равными игроками, причем текущая позиция берется начальной для каждой партии. Причем, под числом побед белых над черными можно понимать оценку данной позиции. Число N в работе бралось не больше 10 тыс. партий (из-за большой вычислительной сложности задачи). В качестве игроков следует брать наиболее сильные эвристические функции, для получения правдоподобных оценок вероятности победы из данной партии. Далее на полученной выборке обучается трехслойная нейронная сеть и используется в программе в качестве оценочной функции.

В качестве сети использовалась трехслойная нейронная сеть с 28 нейронами во входном слое. В скрытом слое использовалось различное число нейронов (1, 2, 5, 10, 20), но наилучший результат дала сеть с двумя нейронами, что объясняется недостаточным объемом выборки и недостаточной точностью оценок. Построенная нейронная сеть выигрывает около 55% партий у наилучшей эвристической оценочной функции.

Для дальнейшего увеличения качества игры с применением нейронных сетей, планируется увеличить объем обучающей выборки и точность оценок, играя больше партий и используя более сложные ОФ. Увеличение выборок повлечет за собой отказ от инструмента nntool и написание собственной функции обучения сети, менее универсальной и менее требовательной к ресурсам. Также предполагается построить несколько сетей, отвечающие за разные стадии игры (отсутствие контакта фишек, вывод с доски). Также предполагается построение итеративного процесса, в котором обученная сеть используется для формирования следующей выборки, что должно позволить повысить качество игры.т брать наиболее сильные эвристические функции, для получения правдоподобных оценок вероятности победы иозиций, для работы с большими нт и генерируется некоторое число позиций (в работе использовались выборки размером 10 тыс. ител

4 Реализация версии для мобильных устройств.

4.1 Особенности программирования портативных устройств.

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

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

4.1.1 Размер экрана.

Для портативных устройств существенной характеристикой являются физические размеры и разрешение экрана. Из соображений эргономики физические размеры экрана ограничены диагональю 3,5-4 дюйма, а типичное разрешение составляет 160х160, 320х240 или 320х320 пикселей. Для сотовых телефонов эти величины еще меньше и составляют порядка 1-2 дюймов и 128х128, 176х220 соответственно.

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

4.1.2 Быстрый отклик.

На ПК пользователи, как правило, работают с приложением достаточно длительный период времени и время отклика, составляющее несколько секунд, является приемлимым. На мобильных устройствах, таких как сотовые телефоны, приложение может использоваться 15-20 раз по несколько минут в течение дня. Таким образом, скорость приложений становится критическим приоритетом при разаработке.

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

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

4.1.3 Ввод данных.

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

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

4.1.4 Питание.

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

4.1.5 Память.

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

По этой причине существенной является оптимизация применяемых алгоритмов и программ по следующим приоритетным направлениям (в порядке убывания важности):

- объем памяти, используемой при работе

- скорость

- объем кода

4.1.6 Файловая система.

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

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

4.2 Выбор средств разработки.

Программа написана на языке Java с использованием технологии Java Micro Edition. Язык Java – это объектно-ориентированный язык программирования и программа разбита на части, называемые классами (или объектами). Каждый класс описан в отдельном файле и компилируется также в отдельный файл. Возможности объектно-ориентированного программирования максимально использовались для того, чтобы отделить код интерфейса от кода алгоритма, между которыми в сущности мало общего. Это позволяет с легкостью модифицировать как интерфейс, так и алгоритм не затрагивая другие части программы.

Рассмотрим вкратце архитектуру платформы Java 2 Platform, Micro Edition (J2ME), которая использовалась при написании программы.

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

На рисунке ниже показана схема архитектуры J2ME.


Уровень Java Virtual Machine (JVM). Этот уровень представляет собой реализацию виртуальной машины Java, которая адаптирована под операционную систему конкретного устройства и поддерживает конкретную конфигурацию J2ME.

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

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

Уровень MIDP. Уровень Mobile Information Device Profile (MIDP) представляет собой набор Java API, предназначенный для решения таких вопросов как пользовательский интерфейс, постоянное хранение и сетевые функции.

Разработка игры нарды для мобильных телефонов проводилась с применением Java 2 Micro Edition Wireless Toolkit 2.2 (J2ME WTK 2.2).

Фазы разработки приложений с помощью Wireless Toolkit можно представить в виде диаграмм:

Схема 1 Фазы разработки приложений с помощью Wireless Toolkit

Достоинства и недостатки JAVA:

1. Независимость от архитектуры ЭВМ

Самое большое преимущество Java — его “нейтральность” по отношению к любой архитектуре. Программа, полностью написанная на Java, будет исполняться везде, где есть Виртуальная Java-машина, JVM (Java Virtual Machine).

2. Безопасность

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

3. Надежность

Java ограничивает вас в нескольких ключевых областях и таким образом способствует обнаружению ошибок на ранних стадиях разработки программы. В то же время в ней отсутствуют многие источники ошибок, свойственных другим языкам программирования (строгая типизация, например). Большинство используемых сегодня программ “отказывают” в одной из двух ситуаций: при выделении памяти, либо при возникновении исключительных ситуаций.

4. Объектная ориентированность

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

5. Простота и мощь

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

6. Богатая объектная среда

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

Язык Java довольно медленный — в 40 раз медленнее C++. Java — язык медленный, потому что это интерпретатор, потому что он является объектно-ориентированным и потому что это язык с повышенным обеспечением безопасности. Его производительность предсказать трудно, поскольку в нём используется чистка памяти (“сборка мусора”).

8. Размер кода

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

9. Требования к памяти

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

4.3 Реализация игры.

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

Для управления игрой используются переменные: private byte gameState, private int currentColor, private int moveNumber.

moveNumber – это номер хода. currentColor – цвет игрока, выполняющего ход(чёрный или белый). gameState может принимать значения:

byte GAMEOVER=1;//игра кончена

byte INPLAYERMOVE=3;//приложение ожидает выполнения хода игрока

byte INCOMPUTERMOVE=4;//приложение ожидает выполнения хода компьютера

byte MOVECOMPLETED=5;//ход выполнен

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

Теперь представляю вашему вниманию структурную схему игры:

рис 5. Структурная схема игры.

Функция StartTurn() вызывается в начале игры и после выполненного хода любым из игроков. Она отвечает за определение игровой ситуации и подготовку следующего хода.

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

В противном случае, функция организует выполнение хода для текущего игрока. Если текущий игрок – пользователь, всё очень просто далее вызывается MakePlayerMove(), которая выполняет некоторые служебные оерации и вызывает MakeMove() для выполнения хода.

Если текущий игрок – компьютер, вызывается функция CalculateComputerMove() для вычисления лучшего хода. Затем вызывается MakeComputerMove() и MakeMove(). MakeMove() обновляет класс Board и помещает новую фишку в нужную клетку.

Далее вызывается функция EndMove(), которая переключает текущего игрока и вновь вызывает StartTurn().

Функция CalculateComputerMove() содержит 6 вспомогательных функций:

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

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

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

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

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

Шестая анализирует выгодную позицию. Анализируя сыгранные партии можно заметить, что занятие определенных позиций на доске способствует победе. Такими позициями является 4-я и 5-я клетки и соответственно 20-я и 21-я симметричные клетки. Таким образом, в простейшем случае можно ввести факт занятия этих клеток в оценочную функцию. В более общем случае, вводят весовые коэффициенты для всех полей доски.

Рис. 6 Скриншоты игры.

Использованные классы.

Наименование класса

Назначение класса

App

Унаследован от класса Midlet. В нём создаются экземпляры имеющихся классов, а также находится точка входа в программу. Класс отвечает за запуск приложения и выход из него, а так же на всевозможные внешние реакции, например звонок.

Board

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

MyCanvas

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

Таблица 1. Используемые классы.

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

Заключение.

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

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

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

Список литературы.

1) Ф. Уоссермен, Нейрокомпьютерная техника: Теория и практика 1992г

2) Джонс искусственного интеллекта в приложениях /М. Тим Джонс; Пер. с англ. – М.: ДМК Пресс 2004. – 312 с.: ил.

3) Философия Java: Библиотека программиста Питер, 2001г

4) G. I. Belchansky, N. V. Korobkov, “Neural network application for analysis of satellite remote sensing data”, Research of the Earth form Space, 1998, N4, pp 111-120

5) Imran Ghory, Reinforcement learning in board games. 2004.

6) J. B.Pollack, A. D. Blair, Co-Evolution in the successful learning of backgammon strategy.

7) W. Duch, R. Adamczak, Statistical methods for construction of neural networks.

8) D. Stoutamire, Machine learning, game play, and Go.

9) W. S.Sarle, Neural networks and statistical models, 1994.

10) A. Shapiro, G. Fuchs, R. Levinson, Learning a game strategy using pattern-weights and self-play.

11) J. Baxter, A. Tridgell, L. Weaver, KnightCap: a chess program that learns by combining TD with game-tree search.

12) A. Junghanns, J. Shaeffer, Search versus knowledge in game-playing programs revisted.

13) G. Tesauro. TD-Gammon, a self-teaching backgammon program. Neural Computaion, 6:215-219, 1994.

14) J. Pollack & A. Blair “Co-Evolution in the successful learning of backgammon strategy.

15) M. Buro “Efficient approximation of backgammon race equities”.

16) Информационные ресурсы сети Интернет (http://www.bkgm.com, http://www.gnubg.org).

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3