МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ Факультет Информационных технологий и программирования________________ Направление Прикладная математика и информатика__________________________ Специализация Математические модели и алгоритмы в разработке программного обеспечения_____________________________________________________________________ Академическая степень бакалавр прикладной математики и информатики___________ Кафедра Компьютерных технологий ______________ Группа_______ 4539 ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЕ Применение генетического программирования для генерации автоматов управления роботами в игре «Виртуальный футбол» Автор квалификационной работы Кошевой А.А. (подпись) ( Фамилия, И., О. ) Научный руководитель Шалыто А.А. (подпись) ( Фамилия, И., О. ) Консультанты: а) По экономике и организации производства _____________________________________________ (подпись) ( Фамилия, И., О. ) б) По безопасности жизнедеятельности и экологии ___________________________________________ (подпись) ( Фамилия, И., О. ) К защите допустить Зав. кафедрой ____ВАСИЛЬЕВ В.Н. ___________________________(подпись) ( Фамилия, И., О. ) “____”____________________2009 г. Санкт-Петербург, 2009 г. Квалификационная работа выполнена с оценкой _______________________________ Дата защиты “____”________________________20____г. Секретарь ГАК ____________________________________ Листов хранения ___________________________________ Чертежей хранения _________________________________ 2 ОГЛАВЛЕНИЕ Оглавление ................................................................................................... 3 Введение....................................................................................................... 6 Глава1. Постановка задачи......................................................................... 8 1.1. Формальная постановка задачи ...................................................... 8 1.2. Объекты игры «Виртуальный футбол» ......................................... 9 1.2. Математическая модель игры ......................................................... 9 1.2.1. Кинематические характеристики объектов .......................... 10 1.2.2. Модель столкновений ............................................................. 10 1.2.3. Кинематические характеристики роботов ........................... 11 1.3. Правила игры .................................................................................. 12 1.3.1. Начало игры ............................................................................. 12 1.3.2. Разведение мяча ...................................................................... 12 1.3.2. Процесс игры ........................................................................... 12 1.3.3. Блокировка мяча ..................................................................... 12 1.3.4. Условие засчитывания гола ................................................... 13 1.3.5. Конец игры .............................................................................. 14 1.4. Технология создания робота в среде «Виртуальный футбол» .. 14 1.4.1. Управляющие алгоритмы в игре «Виртуальный футбол» . 14 1.4.2. Класс Robot .............................................................................. 15 1.4.3. Класс StatusEvent .................................................................... 16 Глава 2. Применение генетических алгоритмов для построения управляющих автоматов....................................................................................... 17 3 2.1. Эволюционные вычисления.......................................................... 18 2.1.1. Эволюционные алгоритмы .................................................... 19 2.1.2. Генетические алгоритмы ........................................................ 21 2.2. Математическая модель робота-футболиста .............................. 26 2.2.1. Автоматное представление .................................................... 26 2.2.2. Деревья решений ..................................................................... 27 2.2.3. Генетические операции .......................................................... 29 2.2.4. Входные и выходные воздействия ........................................ 33 Глава 3. Реализация метода генетического программирования для генерации управляющих алгоритмов роботами в игре «Виртуальный футбол»35 3.1. Реализация базовых сущностей .................................................... 36 3.1.1. Работа с деревьями решений ................................................. 36 3.1.2. Представление входных переменных ................................... 37 3.1.3. Интерфейс автомата Милли................................................... 37 3.2. Реализация сущностей, специфичных для игры «Виртуальный футбол»............................................................................................................... 38 3.2.1. Дерево решений ...................................................................... 38 3.2.2. Реализация входных переменных ......................................... 38 3.2.3. Автомат Милли и генетические операции ........................... 39 3.2.4. Управляющий конечный автомат робота ............................. 39 Глава 4. Анализ результатов .................................................................... 40 4.1. Результаты экспериментов............................................................ 40 4.2. Анализ ............................................................................................. 43 Заключение ................................................................................................ 44 Литература ................................................................................................. 45 4 Приложение 1. Исходные коды ............................................................... 46 SimpleRobot.java .................................................................................... 46 5 ВВЕДЕНИЕ Эволюционные вычисления являются одним из активно развивающихся и перспективных направлений в искусственном интеллекте и программировании. Они доказали свою эффективность на практике при решении широкого спектра интересных и сложных задач в различных областях. К их числу относятся трудоемкие задачи оптимизации, аппроксимации, интеллектуальной обработки данных, трудно формализуемые задачи искусственного интеллекта, например, распознавание образов, кластеризация, ассоциативный поиск и многие другие. Программные и аппаратные системы часто имеют сложное поведение, например, устройства управления, сетевые протоколы, персонажи компьютерных игр. Для реализации данных систем применяется автоматный подход. В соответствии с ним сущность системы представляется в виде автоматизированного объекта – совокупности управляющего автомата и объекта управления. Несмотря на то, что методика построения управляющих автоматов довольно хорошо разработана, для некоторых задач эвристическое построение автомата или невозможно, или затруднительно. Кроме того, даже для относительно простых задач часто возникает вопрос об оптимальности спроектированного автомата. Одним из решений данной проблемы являются методы генетического программирования, являющихся подклассом упомянутых эволюционных вычислений. В представленной работе методы генетического программирования применяются для генерации автоматов управления виртуальными роботами в игре для программистов «Виртуальный футбол». Эта игра была спроектирована и реализована группой студентов кафедры «Компьютерные технологии» (КТ) в рамках курсовой работы по предмету «Автоматное программирование». Она представляет собой удобную платформу для разработки и сравнения различных 6 алгоритмов управления роботами-футболистами. Существует довольно большое число подобных платформ, но большинство из них обладают существенным недостатком – длительным временем изучения системы и высоким уровнем требуемых знаний в программировании, что означает элитарность участников данных игр. В качестве же одной из целей создания программной системы «Виртуальный футбол» ставилась простота и легкость написания управляющих алгоритмов для роботов-игроков. Целью настоящей работы является применение исследуемых алгоритмов к задаче построения конечного автомата, управляющего роботом в данной игре, и последующий анализ полученных результатов. В число исследуемых методов входят метод генетического программирования, алгоритм имитации отжига и комбинированный метод, созданный на их основе. Комбинированный метод заключается в сочетании алгоритма имитации отжига для генерации начального поколения и метода генетического программирования, использующего для своей работы полученное начальное приближение. Главной задачей итогового анализа является оценка эффективности каждого метода и выделения наиболее оптимального. 7 ГЛАВА 1. ПОСТАНОВКА ЗАДАЧИ 1.1. Формальная постановка задачи Игра для программистов «Виртуальный футбол» представляет собой эмулятор виртуального мира, в котором две команды роботов соревнуются друг с другом в мастерстве игры в футбол. Команда, принимающая участие в игре, должна состоять из одного или нескольких игроков. Каждый игрок является виртуальным роботом под управлением программы, написанной на языке программирования Java. В нашем случае каждая команда будет состоять ровно из одного игрока. Эмулятор игры поставляется в виде отдельной программы, для запуска которой необходимо наличие на компьютере пользователя установленной JRE (Java Runtime Environment) версии не ниже 1.5. После создания, команда роботов помещается на виртуальное футбольное поле, на котором ей предстоит встретиться с другой командой подобных роботов. Процесс игры соперников друг против друга можно наблюдать, используя тот же эмулятор (рис. 1). Рис. 1. Окно визуализации 8 1.2. Объекты игры «Виртуальный футбол» Процесс игры в «Виртуальный футбол» проходит на двумерном прямоугольном поле, периметр которого ограничен жесткими стенками. С левой и правой стороны его расположены ворота. В середине поля размечен центральный круг. На рис. 2 представлена подробная схема игрового поля. center circle field height goal width field width Рис. 2. Схема игрового поля Динамическими объектами игры являются игроки и мяч. Игроки и мяч представляют собой объекты цилиндрической формы. Игроки делятся на две команды, каждая из которых стремится защитить свои ворота и забить гол в чужие. 1.2. Математическая модель игры Основой для математической модели игры «Виртуальный футбол» является упрощенная модель реальной игры роботов цилиндрической формы с механическим приводом на плоском прямоугольном поле с воротами, ограниченным жесткими бортами. 9 1.2.1. Кинематические характеристики объектов Каждый объект игры в любой ее момент обладает такими кинематическими характеристиками как положение и скорость. Игроки также обладают ускорением, максимальной развиваемой скоростью и максимальной угловой скоростью, учитываемой при совершении поворота. Введение этих ограничений обеспечивает приближение математической модели игры к жизни. Также игроки и мяч обладают собственной массой, которая влияет на изменение траектории движения в результате столкновения данных объектов. 1.2.2. Модель столкновений Столкновение мяча и игроков обрабатываются как абсолютно упругие столкновения объектов круглой формы. Потерь энергии при столкновении не происходит. Это означает, что суммы энергий объектов в момент до столкновения и в момент сразу после столкновения равны. На рис. 3 изображен типичный случай столкновения игрока и мяча. 𝑣⃗𝑏 𝑣⃗𝑏0 𝑣⃗𝑝 𝑣⃗𝑝0 Рис. 3. Соударение мяча и игрока После соударения мяча или игрока со стенкой скорость движения первого сохраняется, а направление движения изменяется по правилу «угол падения равен углу отражения». Угол падения в данном случае является углом между скоростью движения объекта и плоскостью стенки в момент соударения. 10 Рис. 4 иллюстрирует данный случай. Здесь 𝑣⃗0 – вектор скорости объекта непосредственно до момента столкновения, 𝑣⃗ – новый вектор скорости сразу после. 𝑣⃗ 𝑣⃗0 Рис. 4. Соударение робота-футболиста со стенкой 1.2.3. Кинематические характеристики роботов Как было упомянуто ранее, игроки обладают заданным ускорением. Практически это означает, что игрок не может изменить свою скорость в заданный промежуток времени на значение, по абсолютной величине превышающее заданную константу для игры. Также игрок не может изменить угол направления движения на величину большую заданной. Графическая интерпретация перечисленных параметров представлена на рис. 5. 𝑣⃗𝑚𝑎𝑥 𝑣⃗ 𝛼𝑚𝑎𝑥 Рис. 5. Кинематические параметры робота 11 1.3. Правила игры При разработке правил игры в «Виртуальный футбол» был сделан акцент на простоте реализации и максимальной автоматизации проверки соблюдения правил. 1.3.1. Начало игры Игра начинается с разведения мяча в центре поля. Первый игрок команды, защищающей левые ворота, является разводящим в данном случае. 1.3.2. Разведение мяча Мяч помещается в центральную точку поля. Разводящий игрок – представитель команды роботов, находится в случайной точке центрального круга, в его половине, ближайшей к обороняемым воротам. Остальные игроки обеих команд находятся каждый на своей половине поля, не включая зону центрального круга. Положения игроков случайны, а распределение по области, разрешенной для нахождения в момент вбрасывания, является равномерным по ней. 1.3.3. Процесс игры Игрокам разрешены любые столкновения, как с мячом, так и с противником. 1.3.4. Блокировка мяча В процессе игры, вследствие работы алгоритма роботов, может возникнуть такая ситуация, когда мяч будет заблокирован одним или несколькими игроками в углу, или у самого края поля (рис. 6). 12 Рис. 6. Блокировка мяча В данном случае, по истечению указанного времени, отведенного на возможность разблокировать мяч, производится принудительное разведение мяча в середине поля. Разводящая команда не меняется с момента последнего разведения. 1.3.5. Условие засчитывания гола При касании мячом левого или правого края поля в том месте, где расположены ворота, команде, защищающей их, засчитывается пропущенный мяч. Команде-противнику в этом случае прибавляется одно очко к счету. После этого происходит разведение мяча игроком, представляющим команду, пропустившую мяч. 13 1.3.6. Конец игры Конец игры наступает по истечении отведенного для нее времени (рис. 7). Этот параметр можно задать в конфигурационном файле приложения. Рис. 7. Конец игры 1.4. Технология создания робота в среде «Виртуальный футбол» 1.4.1. Управляющие алгоритмы в игре «Виртуальный футбол» Каждый алгоритм, управляющий роботом в игре «Виртуальный футбол» является скомпилированной java-программой. Class-файлы данной программы должны быть помещены в отдельный jar-архив, который может быть загружен в игру с помощью диалога формирования команд (рис. 8). 14 Рис. 8. Диалог формирования команд 1.4.2. Класс Robot Для каждого управляющего алгоритма требуется наличие главного javaкласса, который должен наследоваться от абстрактного класса Robot, предоставляющего основное API (API – сокращение от «application programming interface» – программный интерфейс приложения) управления роботом во время игры. Полное имя данного класса должно быть задано в манифесте (манифест – специальный файл с именем MANIFEST.MF, находящийся в jar-архиве, в каталоге META-INF) jar-архива под заголовком с именем Robot-class. Класс Robot предоставляет следующие функции управления роботомфутболистом: void setSpeed(double); void setTurnAngleLeft(double); void setTurnAngleRight(double); void setSpeedVector(Vector). Первый метод позволяет задать желаемую скорость движения робота. Реальная скорость движения может отличаться после вызова этого метода из-за наличия ускорения и ограничения скорости движения робота. 15 Второй и третий методы позволяют изменить угол направления движения, совершая, соответственно, поворот налево или направо. Данные методы учитывают ограничения, накладываемые на изменение угла, а именно максимальную угловую скорость. Если аргумент метода превосходит эту величину, то происходит изменение угла на максимально разрешенное значение. Последний метод объединяет в себе функциональность первых двух и обеспечивает простоту задания скорости игрока. Данный метод все так же учитывает ограничения, накладываемые на скорость и угол поворота объекта, описанные выше. Данный набор методов позволяет полностью контролировать поведение робота в рамках игры «Виртуальный футбол». 1.4.3. Класс StatusEvent Каждый временной тик игры (наименьший временной отрезок игры) для всех роботов вызывается метод void onStatus(StatusEvent). Данный метод является абстрактным методом класса Robot и требует наличия реализации в каждом управляющем алгоритме. Переопределение данного метода создателем робота задает алгоритм управления роботом в процессе игры. Его единственный аргумент содержит в себе всю необходимую информацию об окружающей среде на момент вызова данного метода. Класс StatusEvent предоставляет пользователю следующий набор функций: BallInfo getBallInfo(); FieldInfo getFieldInfo(); GameStatistics getGameStatistics(); PlayerInfo getMyInfo(); List<PlayerInfo> getOthersInfo(). С помощью них управляющий алгоритм может получить отчет об игровой ситуации, включающий в себя положения и скорости всех игроков и 16 мяча, их линейные размеры, текущий счет и конфигурацию игрового поля. Игровое поле характеризуется линейными размерами, шириной ворот и радиусом центрального круга. UML диаграмма соответствующих классов, необходимых при создании управляющих алгоритмов в игре, приведена на рис. 9. Рис. 9. Диаграмма классов 17 ГЛАВА 2. ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ ДЛЯ ПОСТРОЕНИЯ УПРАВЛЯЮЩИХ АВТОМАТОВ 2.1. Эволюционные вычисления Эволюционные вычисления – это термин, используемый для общего описания алгоритмов поиска, оптимизации или обучения, базирующихся на некоторых формализованных принципах естественного эволюционного процесса. История эволюционных вычислений началась с разработки ряда различных независимых моделей. Основными из них были генетические алгоритмы и классификационные системы Холланда, опубликованные в начале 60-х годов, эволюционные стратегии Рехенберга и эволюционное программирование, предложенное группой ученых (Фогель, Оуэнс и Уолш). Суть эволюционного процесса заключается в развитии популяции особей, целью которого является максимизация их приспособленности. Ключевую роль здесь играет принцип естественного отбора, следуя которому наиболее приспособленные особи лучше выживают и приносят больше потомства, чем менее приспособленные. Каждая особь, участвующая в естественном отборе, характеризуется определенным набором хромосом. Процесс выработки половых клеток в организме подвержен случайностям, благодаря которым потомки отличаются от своих родителей. Суть его заключается в случайном обмене частями хромосом родителей, что обеспечивает появление новых вариантов хромосом. Каждая из вновь появившихся хромосом окажется затем внутри одной из половых клеток, и ее генетическая информация может реализоваться в потомках. Второй важный фактор, влияющий на наследственность, – это мутации. Они выражаются в изменении гена особи посредством замещения некоторых из хромосом, входящих в его набор. Мутации случайны и могут быть вызваны различными внешними факторами. Результат каждой мутации может быть как 18 положительным, так и негативным, проявляясь либо в виде новых свойств потомков, либо в их наследственной болезни. Таким образом, эволюция – это процесс постоянной оптимизации приспособленности популяции. Естественный отбор здесь гарантирует, что наиболее приспособленные особи дадут достаточно большое потомство, а благодаря генетическому наследованию, которое включает в себя возможность мутации, часть этого потомства не только сохранит высокую приспособленность родителей, но будет обладать и некоторыми новыми свойствами. 2.1.1. Эволюционные алгоритмы Эволюционные вычисления включают в себя подкласс эволюционных алгоритмов. Каждому индивиду (особи) сопоставляется значение его пригодности к окружающей среде. Данное значение определяется целевой функцией, задаваемой окружающей средой. Если поиск оптимума ведется в пространстве гипотез 𝑋 , тогда целевая функция 𝑓: 𝑋 → 𝐑+ называется функцией приспособленности или фитнес-функцией. Она должна принимать неотрицательные значения на ограниченной области определения (для того, чтобы можно было для каждой особи считать ее приспособленность, которая не может быть отрицательной). При этом от нее не требуется непрерывность или дифференцируемость. Отличительная особенность эволюционных алгоритмов – использование операции кроссовера, являющегося аналогом скрещивания индивидов в эволюции живых существ. Операция кроссовера применяется к нескольким особям популяции и в результате применения порождает одну. Как правило, число требуемых кроссовером особей равно двум. В дальнейшем рассматриваются операции скрещивания только такого вида. Схема работы эволюционного алгоритма представлена на рис. 10. 19 Создание начальной популяции Отбор Размножение к новому поколению Мутации критерий остановки Ответ Рис. 10. Принципиальная схема работы эволюционного алгоритма Первый шаг – это генерация начальной популяции особей – некоторого набора решений задачи. Обычно это происходит случайным образом. Затем начинается моделирование эволюционного процесса, который можно разделить на три основных этапа: селекция особей, имеющих наибольшее значение функции приспособленности; применение операции кроссовера к отобранным индивидам; мутации некоторых особей популяции. Данный процесс продолжается несколько жизненных циклов, пока не будет выполнен критерий остановки алгоритма. Таким критерием может быть: нахождение глобального, либо локального решения задачи; исчерпание числа поколений, отпущенных на эволюцию; исчерпание времени, отпущенного на эволюцию. 20 2.1.2. Генетические алгоритмы В 1975 г. вышла основополагающая книга Дж. Холланда «Адаптация в естественных и искусственных системах» [4], в которой был предложен генетический алгоритм, исследованный в дальнейшем учениками и коллегами Дж .Холланда в Мичиганском университете. В этой работе ученый впервые ввел термин «генетический алгоритм» и предложил схему классического генетического алгоритма (canonical GA). Классический генетический алгоритм оперирует совокупностью особей, которые представляют собой строки, кодирующие одно из решений задачи. Рассмотрим три стадии эволюционного алгоритма в применении к генетическим алгоритмам. Первая стадия генетического алгоритма представляет собой отбор особей, составляющих промежуточную популяцию. В этой популяции находятся особи, используемые для размножения. Наиболее приспособленные из них могут быть представлены в промежуточной популяции несколько раз, в то время как наименее приспособленные имеют небольшую вероятность попасть в нее. В классическом генетическом алгоритме вероятность каждой особи попасть в приспособленности. промежуточную Такой метод популяцию селекции пропорциональна особей ее называется пропорциональным отбором. Существуют, однако, и другие стратегии отбора, применяемые на практике. Рассмотрим некоторые из них. При использовании ранкового отбора, вероятность каждой особи попасть в промежуточную популяцию пропорциональна ее порядковому номеру в отсортированной по возрастанию приспособленности популяции. Такой вид отбора не зависит от средней приспособленности популяции. Суть турнирного отбора заключается в случайном выборе t особей, лучшая из которых помещается в промежуточную популяцию. Этот процесс продолжается до тех пор, пока промежуточная популяция не будет полностью заполнена. В процессе отбора усечением, популяция сортируется по приспособленности, после чего берется заданная 21 доля лучших и из них необходимое число раз случайным образом выбирается особь для дальнейшего развития. На второй стадии особи промежуточной популяции случайным образом разбиваются на пары, затем с некоторой вероятностью скрещиваются, в результате чего получаются два потомка, которые записываются в новое поколение. В том случае, если скрещивания не происходит, то в новое поколение записывается сама пара. Существует несколько основных видов операторов кроссовера. В классическом генетическом алгоритме применяется одноточечный оператор кроссовера. Наряду с ним существуют двухточечный и однородный кроссоверы. Выбор оператора кроссовера следует совершать исходя из условий решаемой задачи. Третья стадия – это мутация некоторых особей популяции. Она состоит в применении к полученному в результате отбора и скрещивания новому поколению оператора мутации. Этот шаг необходим для предотвращения попадания популяции в зону локального экстремума, и, таким образом, способствует защите от преждевременной сходимости. В процессе мутации каждый бит каждой особи популяции с некоторой вероятностью инвертируется. Эта вероятность обычно мала, и в большинстве случаев значение ее менее 1%. После скрещивания и мутации наступает стадия формирования нового поколения. Есть два основных подхода к реализации данной стадии. Первый заключается в замещении детьми родителей в новом поколении. Второй – в формировании нового поколения из совокупности детей и их родителей. Также зачастую применяется принцип элитизма. Исходя из него, в новое поколение включается заданное количество особей предыдущего поколения (часто одна лучшая особь). Использование второй стратегии и принципа элитизма не допускает потери лучших решений. Процесс эволюции в генетическом алгоритме заканчивается по достижению выполнения критерия останова. Им может служить заданное количество поколений, отведенное время на эволюцию или схождение 22 популяции. Схождением называется состояние популяции, когда все строки, представляющие особей популяции, находятся в области некоторого экстремума и почти одинаковы. В данной ситуации кроссовер незначительным образом изменяет популяции, а особи подверженные мутации склонны вымирать как менее приспособленные. Таким образом, схождение популяции означает, что достигнуто решение, близкое к оптимальному. Итоговым решением задачи может служить наиболее приспособленная особь последнего поколения. 2.2. Алгоритм имитации отжига Замечание: описание алгоритма имитации отжига взято из [8]. Алгоритм имитации отжига основан на моделировании физического процесса, который происходит при кристаллизации вещества из жидкого состояния в твердое (например, при отжиге металла). В этой модели предполагается, температуры, что, а во-первых, во-вторых, отжиг атомы в происходит веществе уже при понижении выстроились в кристаллическую решётку, но отдельные атомы ещё могут перейти из одной ячейки в другую. Вероятность таких переходов в свою очередь зависит от температуры. Устойчивая кристаллическая структура вещества соответствует минимуму энергии. Формализуем процесс отжига. Фактически, при моделировании ищется точка (или набор точек), на которой достигается минимум некоторой числовой функции 𝐸(𝑥⃗) . Строится последовательность точек 𝑥⃗0 , 𝑥⃗1 , … , 𝑥⃗𝑛 , где 𝑥⃗0 соответствует начальному значению. При достижении точки 𝑥⃗𝑛 алгоритм завершает свою работу. Пусть рассматривается текущая точка 𝑥⃗𝑖 . К ней применяется некоторый оператор 𝐴𝑖 , который зависит от температуры. После модификации получаем точку 𝑥⃗ ∗ . Вероятность выбора 𝑥⃗ ∗ в качестве следующей точки 𝑥⃗𝑖+1 равна 𝑃(𝑥⃗ ∗ , 𝑥⃗𝑖 ), где 𝑃 – распределение Гиббса: 23 , 𝐸(𝑥⃗ ∗ ) − 𝐸(𝑥⃗𝑖 ) < 0 1 ∗ 𝑃(𝑥⃗ , 𝑥⃗𝑖 ) = { , 𝐸(𝑥⃗ ∗ )−𝐸(𝑥⃗𝑖 ) exp (− ) , 𝐸(𝑥⃗ ∗ ) − 𝐸(𝑥⃗𝑖 ) ≥ 0 (1) 𝑄𝑖 где 𝑄𝑖 > 0 – элементы произвольной убывающей сходящейся к нулю последовательности. Эта последовательность является аналогом понижающейся температуры в реальном физическом процессе. Весь алгоритм можно разбить на шесть этапов (см. рис. 11): создание начального решения; оценка решения; изменение решения случайным образом; оценка нового решения; выбор нового решения в качестве рабочего, если оно прошло критерий допуска; уменьшение температуры. Рассмотрим подробнее каждый из этапов. Будем считать, что решение представляет собой битовую строку фиксированной длины. При этом любая битовая строка этой длины является решением. Создание начального решения. На этом этапе выбирается некоторая начальная точка 𝑥⃗0 , которую принимают в качестве рабочего решения. Этой точкой может быть уже существующее решение (например, полученное другими алгоритмами) или сгенерированное случайным образом решение. В данной работе начальное решение будет генерироваться случайным образом. Оценка начального решения. Данный этап нужен для того, чтобы в дальнейшем сравнивать новые решения с рабочим. В простейшем случае можно использовать функцию 𝐸(𝑥⃗) для оценки решения. Построение нового решения. На этом этапе рабочее решение изменяется случайным образом. Для этого задаётся порождающая функция 𝛾(𝑇, 𝑥⃗) . В данной работе каждый бит рабочего решения может меняться с вероятностью 𝑇 𝑇𝑚𝑎𝑥 . 24 Оценка нового решения. После построения решения его следует оценить, чтобы далее сравнить с рабочим. Для этих целей используется та же функция, что и во втором пункте. Выбор нового рабочего решения. На предыдущем этапе была получена оценка нового решения 𝐸(𝑥⃗ ∗ ). По формуле (1) находим вероятность принятия нового решения в качестве рабочего. Таким образом, в качестве 𝑥⃗𝑖+1 выбирается 𝑥⃗ ∗ или 𝑥⃗𝑖 . Уменьшение температуры. Перед тем, как перейти к новому шагу алгоритма, нужно уменьшить температуру по некоторому закону 𝑇(𝑘), где 𝑘 – номер шага. В данной работе функция 𝑇(𝑘) задана рекурсивно: 𝑇(𝑘) = 𝛼𝑇(𝑘 − 1) 𝑁 𝑇 где 𝛼 = √ 𝑚𝑖𝑛 , 𝑇(0) = 𝑇𝑚𝑎𝑥 , 𝑁 – число итераций. 𝑇 𝑚𝑎𝑥 Схема алгоритма имитации отжига представлена на рис. 11. Создать начальное решение Оценить решение Изменить решение случайным образом Оценить новое решение Критерий допуска Уменьшить температуру Рис. 11. Схема алгоритма имитации отжига 25 (2) 2.3. Математическая модель робота-футболиста 2.3.1. Автоматное представление Для управления роботом-футболистом – объектом управления игры «Виртуальный футбол» – был использован конечный автомат Милли (рис. 12). Автомат – это математическая модель, представляющая собой дискретный преобразователь информации, на вход которого поступают входные последовательности сигналов. Он формирует выходные последовательности сигналов на основании своих внутренних состояний и входной последовательности сигналов. Формально, автомат Милли – это система шести объектов (𝑆, 𝑆0 , 𝑋, 𝑌, 𝑇, 𝐺): 𝑆 – конечное множество состояний; 𝑆0 ∈ 𝑆 – начальное состояние автомата; 𝑋 – конечное множество входных воздействий; 𝑌 – конечное множество выходных воздействий; 𝑇: 𝑆 × 𝑋 → 𝑆 – функция переходов; 𝐺: 𝑆 × 𝑋 → 𝑌 – функция выходных воздействий (действий). Рис. 12. Пример диаграммы переходов автомата Мили из трех состояний Будем иметь в виду две ключевые абстракции: 1. Автомат функционирует в абстрактном времени. 2. Все переходы происходят мгновенно. 26 При этом элементы множеств 𝑆, 𝑋 и 𝑌 связаны в абстрактном времени следующими соотношениями: 𝑆(𝑡 + 1) = 𝑇(𝑆(𝑡), 𝑋(𝑡)); { 𝑌(𝑡) = 𝐺(𝑆(𝑡), 𝑋(𝑡)). Для представления функции переходов автоматов в данной работе предлагается использовать деревья принятия решений. Деревья решений обычно используются для задачи аппроксимации дискретной функции, заданной на дискретном множестве значений, что, как будет показано в дальнейшем, прекрасно подходит для решения поставленной задачи. Входные воздействия представляют собой закодированное в битовую строку некоторое приближение игровой ситуации. В случае «Виртуального футбола», игровая ситуация представляет собой совокупность вещественных переменных, задающих положение самого робота, мяча, соперника, а так же их скоростей. Во многом именно определение входных воздействий влияет на эффективность применения метода генетического программирования для нахождения оптимальной модели управления. 2.3.2. Деревья решений Как было сказано выше, модель управления роботом-футболистом представляет собой конечный автомат Мили. На вход ему подается набор значений входных переменных, закодированных в битовую строку. Каждое состояние представляет собой дерево решений [7], в листьях которого хранятся переходы автомата. Переход автомата представляет собой совокупность значения функции переходов 𝑇 и значения функции выходного воздействия 𝐺. Пример дерева решений представлен на рис. 13. Здесь показано дерево, задающее булеву функцию от трех переменных 𝑣1 , 𝑣2 , 𝑣3 . 27 𝑣3 0 1 𝑣1 𝑣2 0 1 0 1 1 0 𝑣2 1 0 1 0 1 Рис. 13. Пример дерева решений Следует отметить, что в большинстве практических задач дерево решений требует значительно меньше памяти по сравнению с заданием функции на всех наборах входных переменных, реализуемое с помощью таблиц истинности. Для определения перехода автомата по входному воздействию, представленному набором входных переменных, берется дерево решений, соответствующее текущему состоянию, и производится спуск по нему вниз, начиная с корня. Во внутренних узлах хранится информация о переменной, в зависимости от значения которой необходимо совершить выбор следующего узла дерева. Этот переход совершается по тому ребру, исходящему из узла, которое помечено соответствующим значением переменной. Процесс заканчивается по достижению листа дерева, в котором хранится искомая информация о переходе. 28 2.3.3. Генетические операции Замечание: текст описания генетических операций взят из [7]. Для представления автоматов в виде деревьев решений в эволюционных алгоритмах необходимо задать генетические операции. В дальнейшем будем считать, что число состояний в автоматах фиксировано. В данной работе генетические операции для метода генетического программирования реализовывались следующим образом: Случайная генерация автомата, выполняемая на шаге инициализации – в каждом состоянии создается случайное дерево решений. Скрещивание автоматов – скрещиваются деревья решений в соответствующих состояниях. Мутация автомата – в случайном дереве решений выполняется мутация. Теперь рассмотрим операции над собственно самими деревьями решений: Случайное порождение дерева решений – случайным образом выбирается метка: либо одно из возможных значений функции переходов, либо одна из переменных. После этого создается вершина, помеченная выбранной меткой. При этом если была выбрана переменная, то рекурсивно генерируются дети вершины, иначе вершина становится листом дерева. Мутация – выбирается случайный узел в поддереве. После этого поддерево, соответствующее выбранному узлу, заменяется на случайно сгенерированное (рис. 14). Процесс генерации случайного поддерева аналогичен описанному порождению дерева решений в предыдущем пункте. 29 𝑣3 0 1 𝑣2 𝑣1 𝑣2 0 1 0 1 0 1 1 0 𝑣2 1 0 0 0 1 0 1 𝑣3 0 1 𝑣2 𝑣2 0 1 0 1 1 0 0 0 Рис. 14. Мутация дерева решения Скрещивание – в каждом из скрещиваемых деревьев случайно выбирается по одному узлу. После этого поддеревья, соответствующие выбранным узлам в первом и втором дереве, заменяются друг на друга (рис. 15). 30 𝑣1 𝑣3 0 1 𝑣2 1 0 1 𝑣2 𝑣2 0 1 0 1 0 1 0 1 1 0 0 0 𝑣3 𝑣1 0 1 𝑣2 𝑣2 0 1 1 𝑣2 0 1 0 1 0 1 0 1 1 0 0 0 Рис. 15. Скрещивание деревьев решений Следует заметить, что заданные таким образом операции мутации и скрещивания могут порождать деревья, в которых некоторый атрибут встречается на пути от корня до листа дважды. Такие деревья являются корректными, так как определяют функцию на любом наборе значений атрибутов единственным образом, но в то же время имеют недостижимые вершины. Если атрибут встречается на пути от корня до листа дважды, то значение его уже известно, а значит ветви, соответствующие другим значениям переменной, недостижимы ни при каких значениях остальных переменных. Очевидно отрицательное влияние недостижимых ветвей на работу генетического алгоритма. Действительно, появление данных ветвей ведет к увеличению высоты деревьев, что означает экспоненциальное увеличение необходимой памяти на хранение популяции. При этом недостижимые ветви не 31 несут полезной информации, так как не учитываются при определении значения задаваемой деревом решения функции. Пример дерева решений, содержащего недостижимую вершину, приведен на рис. 16. Функция, задаваемая этим деревом, в точности эквивалентна функции, описываемой деревом решений на рис. 13, но содержит две избыточные вершины: внутреннюю вершину, помеченную переменной 𝑣3 , и лист со значением 1. 𝑣3 0 1 𝑣1 𝑣2 0 1 0 1 1 0 𝑣2 1 0 1 𝑣3 1 0 1 1 0 Рис. 16. Пример дерева решений с недостижимыми ветвями Таким образом, в процесс применения генетических операций мутации и скрещивания необходимо ввести коррективы по выявлению недостижимых ветвей и их обрезке. Этого можно достичь, запоминая переменные и их значения, которыми помечены узлы и ребра на пути от корня до вершины изменяемого поддерева, а затем используя эту информацию в генетических операциях. В операции мутации множество доступных переменных для генерации поддерева будет сужено до переменных не входящих в составленный набор. При скрещивании, в процессе замены поддерева необходимо добавлять только те внутренние узлы, которые помечены еще не использованными 32 переменными. Если же такой узел встретился, то его необходимо заменить на того из его потомков, ребро к которому помечено соответствующим значением переменной. 2.3.4. Комбинированный метод В рамках предложенного комбинированного метода для работы генетического алгоритма предлагается использовать генетические операции мутации и скрещивания, описанные выше, а в качестве начального приближения использовать автоматы, полученные в результате работы алгоритма имитации отжига. 2.3.5. Входные и выходные воздействия Выбор представления входных и выходных воздействий для управляющего автомата в генетическом алгоритме сильно влияет на оптимальность получаемого решения. Здесь необходимо соблюсти баланс между сложным представлением данных, в результате выбора которого эффективная модель может быть получена за неприемлемо долгое время, либо не получена вовсе, и простым представлением, при котором оптимальная модель с большой вероятностью может оказаться слишком примитивной. В результате эвристических наблюдений и проведенных экспериментов было найдено представление входных воздействий, которое позволило добиться хороших результатов за приемлемое время. В него входит набор следующих переменных: Скорость игрока относительно положения мяча (рис. 17), кодируемая двумя переменными. Значение первой из них определяется исходя из попадания вектора скорости игрока 𝑣⃗𝑝 в одну из двух областей плоскости (зоны I–II и III–IV), разделенных прямой, проходящей через две точки: центр игрока и центр мяча. Значение второй – в зависимости от направления движения игрока в сторону мяча, либо от него (соответственно зоны I–IV и II–III). 33 I 𝑟⃗𝑏 − 𝑟⃗𝑝 𝑣⃗𝑝 II IV III Рис. 17. Скорость игрока относительно положения мяча Скорость игрока относительно положения соперника. Задается двумя булевыми переменными аналогично предыдущему пункту (вместо положения мяча берется положение игрока-оппонента). Положение мяча относительно робота-футболиста (рис. 18). Рассматриваются четыре квадранта плоскости, в качестве осей координат которой выступают прямые, параллельные сторонам поля, и проходящие через центр круга, представляющего робота. Номер квадранта, в котором расположен центр мяча, кодируется двумя булевыми переменными. y II I III IV x Рис. 18. Положение мяча относительно положения игрока 34 Направление скорости игрока относительно положения центра ворот противника (рис. 19). 𝑣⃗ I II Рис. 19. Направление скорости игрока на ворота Направление скорости игрока относительно положения центра ворот самого игрока. Значение переменной определяется по аналогии с предыдущим пунктом. Выходные воздействия автоматов представлены двумя типами: повернуть направо на максимально возможный угол за один тик, либо повернуть налево на то же значение. При этом предполагается, что в каждый момент игры виртуальный робот-футболист возможной скоростью. 35 движется с максимально ГЛАВА 3. РЕАЛИЗАЦИЯ МЕТОДА ГЕНЕТИЧЕСКОГО ПРОГРАММИРОВАНИЯ ДЛЯ ГЕНЕРАЦИИ УПРАВЛЯЮЩИХ АЛГОРИТМОВ РОБОТАМИ В ИГРЕ «ВИРТУАЛЬНЫЙ ФУТБОЛ» 3.1. Реализация базовых сущностей Для реализации метода генетического программирования был создан ряд классов, представляющих собой отдельную библиотеку, включающую в себя реализацию конечных автоматов Милли, деревьев решений, интерфейсов для представления используемых входных переменных. 3.1.1. Работа с деревьями решений IDecisionTree – интерфейс, описывающий обобщенное дерево решений. Его реализация предоставляет пользователю набор эффективных и удобных методов для добавления вершин и меток на них, изменение информации на вершинах и ребрах, а также обхода дерева решений. В него входят два интерфейса: IEdge, соответствующий ребру дерева решений и INode – узел этого дерева. DecisionTree – реализация дерева решений, инкапсулирующая информацию обо всех узлах и ребрах дерева и предоставляющая доступ к ней через интерфейс IDecisionTree. В отдельный утилитный класс DecisionTreeUtils вынесены методы работы с деревьями решений. Перечислим только основные из них: метод swapSubtrees – принимает в качестве аргументов две узловые вершины различных деревьев и осуществляет замену соответствующих поддеревьев друг на друга; метод cloneTree – копирует дерево, указанное в аргументе и возвращает его пользователю; 36 метод trim – позволяет производить обрезку дерева по заданной максимальной высоте. 3.1.2. Представление входных переменных Для организации работы генетического алгоритма необходимо, в частности, задать набор входных переменных, а так же в его процессе определять значения данных переменных по вычислительному состоянию окружающей среды. В нашем случае вычислительным состоянием является текущая игровая ситуация. Для гибкого задания переменных с последующим вычислением их значений в зависимости от имеющейся информации об окружающей среде был разработан следующий набор интерфейсов и классов: IType – интерфейс, описывающий тип переменной, которая может принимать дискретный набор значений. Он предоставляет информацию о мощности множества значений переменной. Так же с его помощью можно получить конкретное значение переменной по ее порядковому номеру. IValue – интерфейс, реализация которого представляет собой конкретное значение переменной. IState – сущность, инкапсулирующая информацию о полном наборе значений входных переменных, с помощью которой можно получить значение переменной по ее типу. StateImpl – предполагающая эффективная реализация использование реализации интерфейса интерфейса IState, IType основанной на Java перечислениях. 3.1.3. Интерфейс автомата Милли Автомат представляет собой реализацию интерфейса IAutomaton<I,O>, вся функциональность которого скрыта в одном методе nextStep, получающем на вход сигнал generic-типа I и возвращающий выходной сигнал типа O. 37 3.2. Реализация сущностей, специфичных для игры «Виртуальный футбол» 3.2.1. Дерево решений Дерево принятия решений в данной работе используется в качестве структуры данных, задающей для каждого состояния функцию переходов и функцию действий в конечном автомате Милли. Класс StateTransitionTree, наследуемый от DecisionTree, реализует данную функциональность. В своих узлах он хранит либо информацию о переменной, которой помечен узел, и тогда он является внутренним 〈Новое состояние, Действие〉 . узлом, Действие либо, если в нашем это случае лист, пару описывается перечислением ControlSignal, которое включает в себя две константы: turnLeft и turnRight. Они означают, что робот должен повернуть, соответственно, либо вправо, либо влево на максимально разрешенный угол за один тик. 3.2.2. Реализация входных переменных Полный набор входных переменных задается в классе FootsimType, являющемся Java-перечислением, и имплементирующем интерфейс IType. Гибкость этого класса обеспечивается наличием интерфейса IVariableService, инкапсулирующего информацию о конкретном типе переменной. Это позволяет сделать реализации типов переменных независимыми друг от друга. Для задания новой переменной необходимо унаследоваться от интерфейса IVariableService, реализовав методы getValuesCount(), getValue(index), getValue(StatusEvent), а затем добавить новую константу в класс-перечисление FootsimType, указав в качестве параметра конструктора экземпляр соответствующего класса. Таким образом реализованы входные переменные, речь о которых шла в разд. 2.3.4 настоящей работы. Все ru.footsim.variable.type. 38 они расположены в пакете 3.2.3. Автомат Милли и генетические операции Класс Automaton представляет собой реализацию автомата Милли, для каждого из состояний содержащего дерево решений, описанное в предыдущем разделе. Для работы генетического алгоритма необходимы реализации генетических операций на автоматах. Данная функциональность находится в singleton-классе AutomatonService, содержащем следующие методы: generateRandomAutomaton – создание случайного автомата; crossAutomatons – операция скрещивания двух заданных автоматов; mutateTree – операция мутации автомата. 3.2.4. Управляющий конечный автомат робота Генерируемый робот-футболист является объектом класса AutomataBasedRobot. Базовым для него, как и для любого управляющего алгоритма, является класс Robot. В его методе onStatus выполняется преобразование информации о вычислительном состоянии в набор значений переменных. Оно осуществляется посредством вызова метода getState специализированного класса FootsimVariableService, передавая в качестве единственного аргумента объект StatusEvent, имеющийся в распоряжении пользователя. Полученный набор значений, инкапсулированный в объект класса FootsimState, передается на вход управляющему автомату роботафутболиста, в зависимости от которого автомат переходит в новое состояние и генерирует одно из возможных выходных действий – TURN_LEFT или TURN_RIGHT. В соответствии с этим роботу подается сигнал либо повернуть налево, либо повернуть направо на максимально возможный угол. При этом робот всегда движется с максимально возможной скоростью. 39 ГЛАВА 4. АНАЛИЗ РЕЗУЛЬТАТОВ 4.1. Результаты экспериментов Роботы, построенные с использованием предложенного подхода, сравнивались с автоматами, сгенерированными с помощью алгоритма имитации отжига, и автоматами, полученными в результате работы метода генетического программирования. Запуск генетического алгоритма проводился со следующей конфигурацией: размер популяции – 128 особей; стратегия отбора пригодными 25% – элитизм, особей для размножения популяции (32 особи), считаются имеющих максимальное значение фитнес-функции; частота мутации – 5%. Значение функции приспособленности робота определялось по результатам его игры с роботом-эталоном. Для ее вычисления использовалась формула 𝑓= 𝑡𝑒𝑠𝑡𝑅𝑜𝑏𝑜𝑡.𝑝𝑜𝑖𝑛𝑡𝑠+𝑒𝑡𝑎𝑙𝑜𝑛𝑅𝑜𝑏𝑜𝑡.𝑝𝑜𝑖𝑛𝑡𝑠 𝑒𝑡𝑎𝑙𝑜𝑛𝑅𝑜𝑏𝑜𝑡.𝑝𝑜𝑖𝑛𝑡𝑠 – отношение суммарного количества очков, набранных обоими роботами к количеству очков, набранных эталонным роботом. Очки роботам начислялись на каждом тике игры по следующей формуле: 𝑝𝑜𝑖𝑛𝑡𝑠(𝑥, 𝑦) = 100𝑥 + 25𝑦 − 75𝑥𝑦 , где (𝑥, 𝑦) – координаты мяча, причем 𝑥𝜖[0; 1] , 𝑦𝜖[0; 1] . Максимальное значение ( 100 ) данная функция принимает в центре ворот противника, а минимальное (0) – в центре ворот игрока. Графическая интерпретация функции 𝑝𝑜𝑖𝑛𝑡𝑠(𝑥, 𝑦) показана на рис. 20. 40 50 25 ворота соперника ворота игрока 25𝑦 𝑦 0 100 100𝑥 𝑥 25 50 Рис. 20. Графическая интерпретация функции 𝑝𝑜𝑖𝑛𝑡𝑠(𝑥, 𝑦) Выбор данной фитнес-функции вместо функций, основанных на итоговом счете в конце каждой игры, объясняется тем, что последние имеют значительно больший разброс значений. Данный факт не может не сказаться негативным образом на работе метода генетического программирования. В то же время, используемая функция приспособленности, как показывают результаты проведенных экспериментов, довольно точно отвечает конечной цели виртуального зависимости робота-футболиста. подобной функции В 𝑓= качестве примера, график 𝑡𝑒𝑠𝑡𝑅𝑜𝑏𝑜𝑡.𝑠𝑐𝑜𝑟𝑒+𝑒𝑡𝑎𝑙𝑜𝑛𝑅𝑜𝑏𝑜𝑡.𝑠𝑐𝑜𝑟𝑒 𝑒𝑡𝑎𝑙𝑜𝑛𝑅𝑜𝑏𝑜𝑡.𝑠𝑐𝑜𝑟𝑒 от порядкового номера популяции приведен в приложении 2. В сериях экспериментов входные воздействия автомата были представлены двумя различными способами: 1. Набор из четырех переменных, определяемых направлением скорости игрока относительно положения следующих объектов: мяча, оппонента, центра своих ворот, центра ворот соперника. 2. Совокупность из переменных, приведенных в пункте 1, двух переменных, положения определяемых игрока, а положением также 41 двух мяча оставшихся относительно переменных, задаваемых направлением движения игрока, относительно положения мяча и положения противника. Подробное объяснение значения каждой переменной приведено в разд. 2.3.4. Число состояний генерируемых автоматов варьировалось от четырех до восьми. В рамках каждого эксперимента время генерации двухсот поколений автоматов по 128 особей в каждом занимало порядка восьми часов. Для проведения экспериментов использовался компьютер с процессором Intel Core 2 Duo 2.00 GHz. Результаты игр робота, полученного в результате применения метода генетического программирования, с эталонным алгоритмом SimpleRobot приведены в табл. 1. Таблица 1. Результаты игр робота, полученного с помощью метода ГП, и эталонного Число состояний 4 6 8 Входные воздействия 1 730:2715 713:2615 888:2592 Входные воздействия 2 1078:2080 1025:1976 680:2682 В приложении 2 представлены графики зависимости функции приспособленности от номера популяции в ходе работы генетического алгоритма для некоторых из приведенных конфигураций. При увеличении числа входных воздействий конечного автомата и числа его состояний номер поколения, в котором находился оптимальный управляющий автомат, возрастал. Соответствующие данные представлены в табл. 2. Таблица 2. Номер поколения, содержащего оптимальный управляющий автомат Число состояний 4 6 8 Входные воздействия 1 Входные воздействия 2 17 19 26 143 160 150 42 С аналогичными начальными данными запускался также алгоритм имитации отжига, за тем исключением, что число состояний искомого автомата было равно либо четырем, либо восьми. Каждый эксперимент включал в себя генерацию серии конечных автоматов с помощью указанного метода, используя различные случайные начальные приближения, и последующий выбор наиболее оптимального автомата из набора полученных. В табл. 3 приведена статистика игр лучших автоматов и эталонного робота. Таблица 3. Результаты игр робота, полученного алгоритмом имитации отжига, и эталонного Число состояний 4 8 Входные воздействия 1 Входные воздействия 2 448:3497 527:3030 506:3527 652:2997 Полученные методом генетического программирования роботы сравниваются также с автоматами, полученными алгоритмом имитации отжига. Результаты игр соответствующих роботов представлены в табл. 4. Таблица 4. Результаты игр роботов, полученных двумя различными методами Число состояний 4 8 Входные воздействия 1 2502:1088 1909:1883 Входные воздействия 2 3287: 99 2432:143 4.2. Анализ Анализ полученных результатов показывает, что метод генетического программирования работает эффективнее алгоритма имитации отжига. Выигрыш оказывается особенно заметным в случае более сложной модели представления входных воздействий. 43 ВЫВОДЫ В данной работе было рассмотрено применение генетического программирования для автоматической генерации управляющих автоматов. Для представления управляющих автоматов было предложено использование деревьев решений. Разработана программная платформа для дальнейшего применения в генетических алгоритмах с использованием указанной модели представления автоматов. Метод генетического программирования был адаптирован для использования в задаче управления роботом-футболистом в игре «Виртуальный футбол». Произведен ряд экспериментов на основе данной платформы и показана эффективность применения исследованного метода. Произведено сравнение метода генетического программирования и алгоритма имитации отжига на базе все той же платформы. Обозначены дальнейшие перспективы применения метода. 44 ЛИТЕРАТУРА 1. Гладков Л. А., Курейчик В. В., Курейчик В. М. Генетические алгоритмы. М.: Физматлит. 2006. 2. Джонс М. Т. Программирование искусственного интеллекта в приложениях. М.: ДМК-пресс, 2004. 3. Koza J. Genetic programming. On the Programming of Computers by Means of Natural Selection. MA: The MIT Press, 1998. 4. Holland J. H. Adaptation in Natural and Artificial Systems: An Introductory Analysis with Applications to Biology, Control and Artificial Intelligence. The University of Michigan Press, 1975. 5. Хопкрофт Дж., Мотвани Р., Ульман Дж. Введение в теорию автоматов, языков и вычислений. М.: Вильямс, 2002. 6. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. М.: МЦНМО, 2000. 7. Данилов В. Р., программирования Шалыто для А. генерации А. Метод автоматов, генетического представленных деревьями решений. СПбГУ ИТМО, 2008. is.ifmo.ru/download/200803-07-danilov.pdf. 8. Елкин Д. И., Скорынин П. А., Шалыто А. А. Применение алгоритма имитации отжига для построения автомата управления виртуальным роботом-футболистом. СПбГУ ИТМО, 2009. 45 ПРИЛОЖЕНИЕ 1. ИСХОДНЫЕ КОДЫ SimpleRobot.java package ru.footsim.sample; import ru.footsim.math.Vector; import ru.footsim.model.game.TeamNumber; import ru.footsim.model.robots.Robot; import ru.footsim.model.robots.events.StatusEvent; public class SimpleRobot extends Robot { public SimpleRobot() { super("Simple"); } @Override public void onStatus(StatusEvent event) { Vector myPos = event.getMyInfo().getPosition(); Vector aimPos = getAimPosition(event); setSpeedVector(safeNormalize(aimPos.subtract(myPos)) .multiply(MAX_ROBOT_SPEED)); } public static Vector getAimPosition(StatusEvent event) { Vector ballPos = event.getBallInfo().getPosition(); Vector myPos = event.getMyInfo().getPosition(); boolean top = ballPos.getY() > event.getFieldInfo().getHeight() / 2; boolean left = ballPos.getX() < event.getFieldInfo().getWidth() / 2; boolean secondTeam = event.getMyInfo().getTeamNumber() == TeamNumber.SECOND; float invert = secondTeam ? -1 : 1; Vector ballSpeed = event.getBallInfo().getSpeed(); Vector attackShift = new Vector(-10.0, (!left && top) || (left && !top) ? 10.0 : -10.0).multiply(invert); return ballPos.add(safeNormalize(ballSpeed.add(attackShift)) 46 .multiply(Vector.distance(ballPos, myPos) / 1.5)); } private static Vector safeNormalize(Vector v) { if (v.getNorm() < Double.MIN_NORMAL) { return v; } else { return v.normalize(); } } } 47 ПРИЛОЖЕНИЕ 2. ГРАФИКИ РАБОТЫ ГЕНЕТИЧЕСКОГО АЛГОРИТМА Набор из четырех входных воздействий Автомат из четырех состояний 2.00 Фитнес-функция 1.90 1.80 1.70 1.60 1.50 0 5 10 15 20 25 30 35 40 45 50 40 45 50 Порядковый номер поколения Среднее значение Максимум Автомат из восьми состояний Фитнес-функция 2.00 1.90 1.80 1.70 1.60 1.50 0 5 10 15 20 25 30 35 Порядковый номер поколения Среднее значение Максимум 48 Набор из восьми входных воздействий Автомат из четырех состояний 2.30 Фитнес-функция 2.20 2.10 2.00 1.90 1.80 1.70 1.60 1.50 0 20 40 60 80 100 120 140 Порядковый номер поколения Среднее значение Максимум Автомат из восьми состояний 2.20 Фитнес-функция 2.10 2.00 1.90 1.80 1.70 1.60 1.50 0 20 40 60 80 100 120 Порядковый номер поколения Максимум Среднее значение 49 140 160 180 200 Пример фитнес-функции, основанной на итоговом счете Восемь входных воздействий, искомый автомат из четырех состояний Фитнес-функция 2.5 2.0 1.5 1.0 0 10 20 30 40 50 60 70 80 90 Порядковый номер поколения Среднее значение Максимум 50 100 110 120 130 140