Эксперимент обучения ИИ

Эксперимент Обучение ИИ — это особый тип эксперимента, предназначенный для выгрузки готовых для обучения с подкреплением (reinforcement learning) моделей AnyLogic на платформы, предназначенные для работы с нейросетями (ИИ).

В настоящий момент эксперимент обучения ИИ позволяет экспортировать модели AnyLogic на платформы Microsoft Project Bonsai и Pathmind. В будущем появятся и другие варианты интеграции.

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

Чтобы узнать больше о способах внедрения AnyLogic в процесс обучения ИИ-агентов, посетите специальную страницу на веб-сайте AnyLogic.

Демонстрационная модель: Activity Based Cost Analysis (RL)

Требования к модели

Чтобы подготовить модель к обучению с подкреплением — то есть, сделать ее подходящей основой для экспериментов обучения ИИ, — удостоверьтесь, что она отвечает следующим требованиям:

На некоторых платформах (например, Microsoft Project Bonsai) подразумевается, что в логику модели будут включены определенные точки (во времени), при достижении которых ИИ-агенту необходимо решить, какое действие предпринять следующим. Если вы используете подобные платформы в вашем процессе обучения, вам придется включить в модель такие точки принятия решений (decision points). Эти точки следует связать с событиями, требующими действий от ИИ-агента. Примерами таких событий являются:

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

Логика эксперимента обучения ИИ

Чтобы правильно настроить эксперимент обучения ИИ, ознакомьтесь с тремя основных определениями реализации этого эксперимента в AnyLogic. Все эти определения описывают некоторые числовые значения, которые используются при обучении ИИ-агента.

Примечание: Pathmind наследует значения для наблюдений и действий из библиотеки Pathmind Helper и настроек эксперимента. При экспорте в Pathmind указанные в свойствах эксперимента значения этих полей игнорируются.

Во внутренней структуре эксперимента обучения ИИ AnyLogic все эти значения являются Java-классами.

Эксперимент обучения ИИ можно использовать, чтобы задать и модифицировать все эти значения внутри модели еще до того, как начнется фактический процесс обучения с подкреплением в Project Bonsai. Что касается Pathmind, то требуемые для процесса обучения значения задаются библиотекой Pathmind Helper, поэтому эксперимент используется только для упрощения экспорта модели.

Примечание: В связи с ограничениями, налагаемыми платформами, в таком эксперименте в настоящий момент могут использоваться только числовые значения.

Чтобы создать эксперимент обучения ИИ

  1. В панели Проекты, щелкните правой кнопкой мыши (Mac OS: нажмите Ctrl и сделайте щелчок) по модели, для которой хотите создать новый эксперимент, и выберите Создать > Эксперимент из контекстного меню.
  2. Появится диалоговое окно Новый эксперимент.
    Выберите  Обучение ИИ из списка Тип эксперимента.
  3. Введите имя эксперимента в поле Имя. Если эксперимент будет использоваться для экспорта в Pathmind, в качестве имени следует задать RLExperiment.
  4. Выберите агента верхнего уровня для этого эксперимента из выпадающего списка Агент верхнего уровня.
  5. Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из и выберите эксперимент из расположенного справа выпадающего списка.
  6. Щелкните по кнопке Готово.

Новый эксперимент появится в панели Проекты. Щелкните по нему, чтобы открыть его свойства.

Чтобы экспортировать модель и эксперимент, подготовленные для обучения с подкреплением

Чтобы экспортировать модель или эксперимент, выполните одно из следующих действий:

Экспорт в Microsoft Bonsai

  1. Настройте эксперимент с обучением ИИ с помощью опций, доступных в секциях Наблюдение, Действие и Конфигурация свойств эксперимента обучения ИИ.
  2. Щелкните по ссылке Экспорт в Microsoft Bonsai, находящейся в верхней секции свойств эксперимента.
  3. В открывшемся диалоговом окне, в поле Расположение ZIP-файла, укажите путь к директории, в которой хотите сохранить ZIP-файл эксперимента обучения ИИ, или
    Щелкните по кнопке Выбрать... и откройте нужную директорию. После этого укажите желаемое имя ZIP-файла в поле Имя файла, затем щелкните по кнопке Сохранить.

    AnyLogic: Мастер экспорта эксперимента обучения ИИ

  4. Щелкните по кнопке Далее.
  5. На следующем шаге мастера щелкните по ссылке Microsoft Bonsai platform, чтобы открыть веб-сайт Microsoft Project Bonsai в браузере, который используется в системе по умолчанию, и следуйте предложенным инструкциям.
  6. Когда от вас потребуется предоставить ZIP-файл с моделью, щелкните по ссылке Показать zip-файл в окне мастера, чтобы перейти к расположению файла на компьютере.
  7. Щелкните по кнопке Готово, чтобы закрыть окно мастера.
  8. Продолжайте обучение ИИ на платформе Microsoft Project Bonsai.

Экспорт в Pathmind

  1. Скачайте и установите JAR-файл с библиотекой Pathmind.
  2. Настройте свой эксперимент с помощью библиотеки Pathmind Helper. Убедитесь, что добавили объект pathmindHelper с палитры Pathmind в логику модели и настроили действия, необходимые для обучения.

    Примечание: В данном материале вы можете ознакомиться с реализацией простой стохастической модели AnyLogic, готовой для обучения в Pathmind — Simple Stochastic (на английском языке).

  3. Получите API-ключ вашего аккаунта в Pathmind:
  4. Щелкните по ссылке Экспорт в Pathmind, находящейся в верхней секции свойств эксперимента.
  5. В открывшемся диалоговом окне, в поле Маркер доступа, введите API-ключ, который получили от платформы Pathmind.

    AnyLogic: Диалог экспорта эксперимента обучения ИИ

  6. Щелкните по кнопке Далее. AnyLogic попытается получить доступ к платформе Pathmind, чтобы удостовериться в подлинности API-ключа. Если все в порядке, загрузка модели начнется незамедлительно.
  7. Браузер, используемый в вашей системе по умолчанию, автоматически откроется на странице загруженной модели в Pathmind. Если этого не случилось, вы можете скопировать ссылку из мастера и перейти по ссылке в любом браузере.

    Pathmind: Окно эксперимента

    Щелкните по кнопке Готово, чтобы загрузить окно мастера.

    Примечание: Если загружаемая вами модель не соответствует требованиям для обучения ИИ в Pathmind, мастер сообщит об этом. После этого вы можете настроить модель в соответствии с предложенными рекомендациями. Если у вас есть вопросы касательно настройки моделей для Pathmind, свяжитесь со службой поддержки Pathmind.

  8. Продолжайте обучение ИИ на платформе Pathmind.

Свойства

Основные

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

Примечание: Если для обучения ИИ используется платформа Pathmind, всегда задавайте следующее имя эксперимента: RLExperiment.

Исключить — Если опция выбрана, то эксперимент будет исключен из модели.

Экспорт в Microsoft Bonsai — Щелкните по этой ссылке, чтобы начать подготовку модели к экспорту на платформу Microsoft Project Bonsai.
Более подробная информация доступна в разделе выше.

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

Агент верхнего уровня — Здесь задается агент верхнего уровня этого эксперимента. Агент этого типа будет играть роль корня иерархического дерева агентов модели, запускаемой этим экспериментом.

Примечание: При использовании Pathmind значения описанных ниже свойств игнорируются, так как используются значения, заданные Pathmind Helper или унаследованные из параметров простого эксперимента. Больше информации — в справке Pathmind (англ.).
Наблюдение

Поля с данными, которые передаются платформе обучения на каждом шаге — Объявляет переменные, определяющие пространство наблюдения.
Поддерживаются следующие типы переменных: int, double, double[]. Чтобы задать значения переменных, заполните поле Введите код, чтобы задать данные наблюдений из 'root'.

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

Условие остановки "прогона" — Задает условие остановки. «Прогон» модели прерывается, когда заданное в этом поле выражение возвращает true. Это можно использовать для остановки «прогона» в тех случаях, когда модель находится в нежелательном состоянии, или если продолжение выполнения эксперимента не принесет ценности в процесс обучения ИИ.
Позволяет получать значения от агента верхнего уровня модели (root).

Действие

Данные действий, возвращаемые с платформы обучения при каждом шаге — Указывает переменные, которые будут переданы модели после выполнения действия агентом.
Поддерживаются следующие типы переменных: int, double, double[]. Чтобы задать значения переменных, заполните поле Введите код, чтобы применить поля с данными действий к 'root'.

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

Конфигурация

Данные о конфигурации, возвращаемые с платформы обучения для запуска нового "прогона" — Объявляет переменные, которые передаются модели перед началом «прогона».
Поддерживаются следующие типы переменных: int, double, double[]. Чтобы задать значения переменных, заполните поле Введите код, чтобы применить поля с данными о конфигурации к 'root'.

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

Локальное обучение

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

Модельное время

Остановить — Здесь вам нужно задать, когда вы хотите, чтобы моделирование было остановлено. Если вы хотите, чтобы моделирование продолжалось бесконечно, до тех пор, пока вы сами его не остановите, выберите из выпадающего списка Нет. Если же вы хотите, чтобы моделирование длилось до заданного времени или заданной даты, выберите здесь соответственно В заданное время или В заданную дату. В этом случае время остановки будет задаваться элементом управления Начальное время/Начальная дата.

Начальное время — Начальное время моделируемого интервала времени.

Начальная дата — Начальная календарная дата моделируемого интервала времени.

Конечное время — Конечное время моделируемого интервала времени (количество единиц модельного времени, по прошествии которого модель будет остановлена).

Конечная дата — Конечная календарная дата моделируемого интервала времени.

Случайность

Генератор случайных чисел — В стохастических моделях важную роль играет заданное вами начальное число генератора случайных чисел — от этого будет зависеть, будут ли «прогоны» стохастической модели уникальными или воспроизводимыми. Здесь вы можете выбрать, хотите ли вы задать случайное число, чтобы «прогоны» были уникальными, фиксированное число, чтобы они были воспроизводимыми, или вообще задать свой собственный генератор случайных чисел вместо используемого AnyLogic по умолчанию.
В большинстве сценариев обучения с подкреплением использовать генератор, использующий Случайное начальное число, чтобы ИИ-агент мог обучаться в среде, демонстрирующей свою случайную природу. Фиксированное начальное число больше подходит для тестирования ИИ-агента по упрощенному сценарию, так как ему несвойственна вариативность, характерная для подходов, рассматривающих примеры из реального мира.

Случайное начальное число (уникальные "прогоны") — Если опция выбрана, то «прогоны» модели будут уникальными и не смогут быть воспроизведены в силу того, что при каждом новом запуске модели генератор случайных чисел будет инициализироваться другим числом.

Фиксированное начальное число (воспроизводимые "прогоны") — Если опция выбрана, то генератор случайных чисел модели будет всегда инициализироваться одним и тем же начальным числом (оно задается в поле Начальное число), поэтому все запуски модели будут идентичными и воспроизводимыми.

Нестандартный генератор (подкласс класса Random) — Если по каким-либо причинам вас не устраивает качество стандартного генератора Random, то вы можете использовать вместо него ваш собственный ГСЧ. Для этого создайте его (это должен быть подкласс Java класса Random, например, MyRandom), выберите данную опцию и введите выражение, возвращающее экземпляр класса вашего ГСЧ, в расположенном справа поле, например: new MyRandom() или new MyRandom( 1234 ). Подробнее см. здесь.

Описание
В этой секции находится поле, в котором вы можете составить описание эксперимента.

Создание точки принятия решения

Чтобы указать, что определенное событие является точкой принятия решения для ИИ-агента (и от него требуется предпринять какое-то действие), вызовите статическую функцию ExperimentReinforcementLearning.takeAction(agent), передав в нее в качестве аргумента agent — любого агента вашей модели. Этот аргумент используется функцией для получения доступа к агенту верхнего уровня, в контексте которого будет выполняться вся необходимая в рамках эксперимента обучения ИИ работа с данными — например, получение данных наблюдений.

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

ExperimentReinforcementLearning.takeAction(this).