AnyLogic
Развернуть
Размер шрифта

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

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

В настоящее время эксперимент обучения ИИ позволяет экспортировать модели AnyLogic как в платформу Microsoft Azure Machine Learning (AML) (с помощью Plato Toolkit), так и в библиотеку AnyLogic Alpyne. В будущем будут добавлены дополнительные возможности.

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

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

Демо-модель: Activity Based Cost Analysis (RL) Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

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

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

  • У модели имеется набор регулируемых настроек (конфигурация), в которые можно вносить изменения перед каждым «прогоном»;
  • Модель способна сообщать свое текущее состояние ИИ-агенту;
  • В модели можно осуществлять действия, выбранные ИИ-агентом.

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

  • События, происходящие с определенным интервалом (например, каждые 2 дня модельного времени);
  • События, соответствующие срабатыванию определенных механизмов внутри модели (например, переходы диаграммы состояний, события, происходящие при выполнении условия, а также действия, привязанные к библиотечным блокам).

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

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

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

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

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

  • Действия — это значения, которые ИИ-агент рассчитывает в ходе «прогона» модели, а затем назначает переменным или функциям внутри модели прежде, чем перейти к следующему «прогону».
  • Конфигурация — это набор значений, определяющих состояние модели перед началом «прогона». Этот код выполняется перед стартом запуска каждого «прогона», осуществляемого в рамках обучения с подкреплением. При выполнении конфигурации агент верхнего уровня уже создан, но выполнение модели еще не началось.

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

Эксперимент обучения ИИ позволяет настроить и регулировать эти значения в модели до начала самого процесса обучения ИИ.

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

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

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

Свойства

Основные

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

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

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

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

Наблюдение

Поля с данными, которые передаются платформе обучения на каждом шаге — Объявляет переменные, определяющие пространство наблюдения.
Поддерживаются следующие типы переменных: 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).

Как мы можем улучшить эту статью?