РАЗРАБОТКА ОНЛАЙН-РЕПОЗИТОРИЯ ЭВОЛЮЦИОННЫХ АЛГОРИТМОВ ОПТИМИЗАЦИИ Ершов Н.М., Попова Н.Н. ershovnm@gmail.com popova@cs.msu.su d МГУ им. М. В. Ломоносова, факультет ВМК Введение • Цель: разработка программной системы для автоматической генерации параллельных алгоритмов машинного обучения и эволюционных вычислений. • Одна из составляющих: специальный веб-сервис, предназначенный для автоматической генерации параллельных программ, реализующих стандартные эволюционные алгоритмы оптимизации. • Настоящая работа: прототип такого сервиса, ориентированный на генерацию последовательного кода эволюционных оптимизационных алгоритмов, таких как генетические алгоритмы, метод роя частиц, муравьиные алгоритмы и т.п. Эволюционные алгоритмы • Отличительной особенностью этих методов является то, что все они являются метаэвристиками: каждый из них представляет собой целое семейство алгоритмов, объединенных некоторой общей идеей, но сильно отличающихся друг от друга на нижнем уровне. • Целью работы разрабатываемой онлайн-службы является предоставление пользователю возможности собрать свой вариант оптимизационного алгоритма, используя для этого набор стандартных схем и элементов. Требования к системе • Результат работы системы – программный код (C++) выбранного и настроенного пользователем алгоритма оптимизации. Этот код должен – быть работающим; – быть задокументированным; – содержать минимальный набор необходимых вспомогательных структур и функций (тонкий интерфейс). • Пользователь системы должен иметь полный доступ к полученному коду. Архитектура системы Файл конфигурации (JSON) Вебстраница (HTML+JS) Готовая программа (С++) Настройки пользователя (JSON) Генератор кода (Python) Библиотека элементов (С++) Архитектура системы Файл конфигурации (JSON) Вебстраница (HTML+JS) Готовая программа (С++) Настройки пользователя (JSON) Генератор кода (Python) Библиотека элементов (С++) Архитектура системы Файл конфигурации (JSON) Вебстраница (HTML+JS) Готовая программа (С++) Настройки пользователя (JSON) Генератор кода (Python) Библиотека элементов (С++) Архитектура системы Архитектура системы Файл конфигурации (JSON) Вебстраница (HTML+JS) Готовая программа (С++) Настройки пользователя (JSON) Генератор кода (Python) Библиотека элементов (С++) Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Организация данных начальный слот RandInt Алгоритм Swap Отбор Генетический алгоритм слот вспом. функции Скрещивание Двухточечное Мутация PMX Кодирование блок Двоичное шаблон Перестановки Конфигурация • Вся информация о конфигурационном графе сохраняется в едином файле конфигурации. • Для каждого шаблона хранятся следующие данные: – идентификатор шаблона; – список подключаемых заголовочных файлов; – список стандартных функций, вызовы которых имеются в данном шаблоне; – список числовых параметров, от которых зависит работа данного шаблона. Конфигурация • Важным является порядок хранения, именно в этом порядке будет выполняться диалог с пользователем. • Поэтому основные элементы конфигурационного графа (слоты и шаблоны) хранятся в порядке топологической сортировки этого графа. • Вспомогательные функции описываются отдельно. Диалог с пользователем Def Configure(G): S = [“algorithm”] CFG = { } For slot in G: If slot in S: Q=[] For t in Templates[slot]: If Available(t, CFG): Q += [t] q = Choose(Q) CFG[slot] = q S += Slots(q) Return CFG # список слотов для заполнения # искомая конфигурация # цикл по вершинам-слотам в графе G # список доступных шаблонов # выбор пользователем шаблона # обновление конфигурации # обновление списка слотов Генератор кода Def GenerateCode(G, CFG): Code = Load(“_template”) Stuff, Params = [ ], [ ] For slot in G: For t in Templates[slot]: If t == CFG[slot]: Update(Code, slot, t) Update(Stuff, t) Update(Params, t) Update(Code, Stuff, Params) Return Code # загружаем начальный шаблон # списки вспом. функций и параметров # цикл по вершинам-слотам в графе G # цикл по шаблонам в блоке s # заменяем в коде слот s шаблоном t # обновляем список функций # обновляем список параметров # вставка функций и параметров в код Заключение • В настоящее время разработан offlineпрототип системы, поддерживающий работу с генетическими алгоритмами, методом роя частиц, алгоритмом бактериального поиска. • Ведется работа по наполнению системы другими эволюционными алгоритмами. • В будущем предполагается включить поддержку генерации параллельного кода. • Также планируется включить в систему базу тестовых задач для исследования эффективности разрабатываемых эволюционных алгоритмов оптимизации. Спасибо за внимание!