После обучения агента обучения усилению можно создать код для развертывания оптимальной политики. Можно создать:
Код CUDA ® для глубоких политик нейронных сетей с использованием GPU Coder™
Код C/C + + для таблиц, глубоких нейронных сетей или политик линейных базисных функций с использованием MATLAB ® Coder™
Генерация кода поддерживается для агентов, использующих нейронные сети прямой связи в любом из входных трактов, при условии, что поддерживаются все используемые уровни. Генерация кода не поддерживается для непрерывных действий агентов PG, AC, PPO и SAC, использующих повторяющуюся нейронную сеть (RNN), или для любого агента, имеющего несколько входных путей и содержащего RNN в любом из путей.
Дополнительные сведения об обучении агентов обучения усилению см. в разделе Обучение агентов обучения усилению.
Чтобы создать функцию оценки политики, которая выбирает действие на основе данного наблюдения, используйте generatePolicyFunction команда. Эта команда создает сценарий MATLAB, содержащий функцию оценки политики, и MAT-файл, содержащий оптимальные данные политики.
Для развертывания этой функции политики можно создать код с помощью кодера графического процессора или кодера MATLAB.
Если ваша обученная оптимальная политика использует глубокую нейронную сеть, вы можете создать код CUDA для политики с помощью GPU Coder. Дополнительные сведения о поддерживаемых графических процессорах см. в разделе Поддержка графических процессоров по выпуску (Панель инструментов параллельных вычислений). Существует несколько обязательных и рекомендуемых продуктов для создания кода CUDA для глубоких нейронных сетей. Дополнительные сведения см. в разделах Установка необходимых продуктов (GPU Coder) и Настройка необходимых продуктов (GPU Coder).
Не все уровни глубоких нейронных сетей поддерживают генерацию кода GPU. Список поддерживаемых уровней см. в разделе Поддерживаемые сети, уровни и классы (кодер графического процессора). Дополнительные сведения и примеры создания кода графического процессора см. в разделе Глубокое обучение с помощью кодера графического процессора (GPU Coder).
В качестве примера создайте код GPU для агента градиента политики, обученного в системе Train PG Agent to Balance Cart-Pole.
Загрузите обученного агента.
load('MATLABCartpolePG.mat','agent')
Создайте функцию оценки политики для этого агента.
generatePolicyFunction(agent)
Эта команда создает evaluatePolicy.m , который содержит функцию политики, и agentData.mat файл, содержащий обученного актера глубокой нейронной сети. Для данного наблюдения функция политики оценивает вероятность для каждого потенциального действия с использованием сети субъектов. Затем функция политики случайным образом выбирает действие на основе этих вероятностей.
Код для этой сети можно создать с помощью кодера графического процессора. Например, можно создать функцию CUDA, совместимую с MEX.
Сконфигурируйте codegen для создания CUDA-совместимой функции C++ MEX.
cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');
Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае наблюдения выполняются в четырехэлементном векторе.
argstr = '{ones(4,1)}';Создание кода с помощью codegen функция.
codegen('-config','cfg','evaluatePolicy','-args',argstr,'-report');
Эта команда генерирует функцию MEX evaluatePolicy_mex.
Можно создать код C/C + + для таблиц, глубоких нейронных сетей или политик линейных базисных функций с помощью кодера MATLAB.
С помощью кодера MATLAB можно создать:
Код C/C + + для политик, использующих Q-таблицы, таблицы значений или линейные базисные функции. Для получения дополнительной информации об общей генерации кода C/C + + см. Создание кода (кодер MATLAB).
Код C++ для политик, использующих глубокие нейронные сети. Обратите внимание, что агенты PG, AC, PPO и SAC, имеющие несколько входных трактов, не могут генерировать код, если они используют повторяющуюся нейронную сеть в любом из трактов. Список поддерживаемых уровней см. в разделе Сети и уровни, поддерживаемые для создания кода (кодер MATLAB). Дополнительные сведения см. в разделах Предпосылки для глубокого обучения с помощью кодера MATLAB (MATLAB Coder) и Глубокое обучение с помощью кодера MATLAB (MATLAB Coder).
В качестве примера создайте код C без зависимостей от сторонних библиотек для агента градиента политики, обученного по программе Train PG Agent to Balance Cart-Pole System.
Загрузите обученного агента.
load('MATLABCartpolePG.mat','agent')
Создайте функцию оценки политики для этого агента.
generatePolicyFunction(agent)
Эта команда создает evaluatePolicy.m , который содержит функцию политики, и agentData.mat файл, содержащий обученного актера глубокой нейронной сети. Для данного наблюдения функция политики оценивает вероятность для каждого потенциального действия с использованием сети субъектов. Затем функция политики случайным образом выбирает действие на основе этих вероятностей.
Сконфигурируйте codegen для создания кода, подходящего для создания MEX-файла.
cfg = coder.config('mex');В объекте конфигурации установите целевой язык на C++ и установите DeepLearningConfig комуnone'. Этот параметр создает код без использования какой-либо сторонней библиотеки.
cfg.TargetLang = 'C'; cfg.DeepLearningConfig = coder.DeepLearningConfig('none');
Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае наблюдения выполняются в четырехэлементном векторе.
argstr = '{ones(4,1)}';Создание кода с помощью codegen функция.
codegen('-config','cfg','evaluatePolicy','-args',argstr,'-report');
Эта команда генерирует код C++ для агента градиента политики, содержащего актор глубокой нейронной сети.
Например, создайте код C++ для агента градиента политики, обученного в системе Train PG Agent to Balance Cart-Pole с использованием библиотеки Intel Math Kernel Library for Deep Neural Networks (MKL-DNN).
Загрузите обученного агента.
load('MATLABCartpolePG.mat','agent')
Создайте функцию оценки политики для этого агента.
generatePolicyFunction(agent)
Эта команда создает evaluatePolicy.m , который содержит функцию политики, и agentData.mat файл, содержащий обученного актера глубокой нейронной сети. Для данного наблюдения функция политики оценивает вероятность для каждого потенциального действия с использованием сети субъектов. Затем функция политики случайным образом выбирает действие на основе этих вероятностей.
Сконфигурируйте codegen для создания кода, подходящего для создания MEX-файла.
cfg = coder.config('mex');В объекте конфигурации установите целевой язык на C++ и установите DeepLearningConfig в целевую библиотеку "mkldnn'. Этот параметр генерирует код с помощью библиотеки Intel Math Kernel Library for Deep Neural Networks (Intel MKL-DNN).
cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');
Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае наблюдения выполняются в четырехэлементном векторе.
argstr = '{ones(4,1)}';Создание кода с помощью codegen функция.
codegen('-config','cfg','evaluatePolicy','-args',argstr,'-report');
Эта команда генерирует код C++ для агента градиента политики, содержащего актор глубокой нейронной сети.
Например, создайте код C для Q-обучающего агента, обученного по программе Train Enharmation Learning Agent in Basic Grid World.
Загрузите обученного агента.
load('basicGWQAgent.mat','qAgent')
Создайте функцию оценки политики для этого агента.
generatePolicyFunction(qAgent)
Эта команда создает evaluatePolicy.m , который содержит функцию политики, и agentData.mat файл, содержащий обученную функцию значения таблицы Q. Для данного наблюдения функция политики ищет функцию значения для каждого потенциального действия с помощью таблицы Q. Затем функция политики выбирает действие, для которого функция значения является наибольшей.
Задайте примерное входное значение для функции оценки политики. Чтобы найти размер наблюдения, используйте getObservationInfo функция. В этом случае существует единственное одномерное наблюдение (принадлежащее дискретному набору возможных значений).
argstr = '{[1]}';Сконфигурируйте codegen функция для создания встраиваемого кода C, подходящего для нацеливания на статическую библиотеку, и установка для папки вывода значения buildFolder.
cfg = coder.config('lib'); outFolder = 'buildFolder';
Создание кода C с помощью codegen функция.
codegen('-c','-d',outFolder,'-config','cfg',... 'evaluatePolicy','-args',argstr,'-report');