Как только вы обучаете агента обучения с подкреплением, можно сгенерировать код, чтобы развернуть оптимальную политику. Можно сгенерировать:
CUDA® код для политик глубоких нейронных сетей, использующих GPU Coder™
Код C/C + + для таблицы, глубокой нейронной сети или политики линейного базиса функций с помощью MATLAB® Coder™
Генерация кода поддерживается для агентов, использующих нейронные сети с feedforward в любом из входных путей, при условии, что поддерживаются все используемые слои. Генерация кода не поддерживается для непрерывных действий PG, AC, PPO и агентов SAC, использующих рекуррентную нейронную сеть (RNN), или для любого агента, имеющего несколько входных путей и содержащего RNN в любом из путей.
Для получения дополнительной информации о настройке агентов обучения с подкреплением см. Train агентов обучения с подкреплением».
Чтобы создать функцию оценки политики, которая выбирает действие на основе заданного наблюдения, используйте generatePolicyFunction
команда. Эта команда генерирует скрипт MATLAB, который содержит функцию оценки политики, и MAT-файл, который содержит оптимальные данные политики.
Вы можете сгенерировать код для развертывания этой функции политики с помощью GPU Coder или MATLAB Coder.
Если ваша обученная оптимальная политика использует глубокую нейронную сеть, можно сгенерировать код CUDA для политики с помощью GPU Coder. Дополнительные сведения о поддерживаемых графических процессорах см. в разделе Поддержка GPU по версии (Parallel Computing Toolbox). Существует несколько необходимых и рекомендуемых обязательных продуктов для генерации кода CUDA для глубоких нейронных сетей. Для получения дополнительной информации см. раздел Установка обязательных продуктов (GPU Coder) и Настройка обязательных продуктов (GPU Coder).
Не все слои глубоких нейронных сетей поддерживают генерацию кода GPU. Список поддерживаемых слоев см. в разделе Поддерживаемые сети, слои и классы (GPU Coder). Для получения дополнительной информации и примеров по генерации кода GPU смотрите Глубокое Обучение с GPU Coder (GPU Coder).
В качестве примера сгенерируйте код GPU для агента градиента политики, обученного в Train PG Agent для балансировки системы тележки с шестом.
Загрузите обученного агента.
load('MATLABCartpolePG.mat','agent')
Создайте функцию оценки политики для этого агента.
generatePolicyFunction(agent)
Эта команда создает evaluatePolicy.m
файл, который содержит функцию политики и agentData.mat
файл, который содержит обученного актёра глубокой нейронной сети. Для заданного наблюдения функция политики оценивает вероятность для каждого потенциального действия, используя сеть актёра. Затем функция политики случайным образом выбирает действие на основе этих вероятностей.
Вы можете сгенерировать код для этой сети с помощью GPU Coder. Для примера можно сгенерировать совместимый с 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 Coder.
Используя MATLAB Coder, можно сгенерировать:
Код C/C + + для политик, которые используют Q-таблицы, таблицы значений или линейно-базисные функции. Для получения дополнительной информации о генерации кода C/C + + смотрите Генерация кода (MATLAB Coder).
Коды С++ для политик, которые используют глубокие нейронные сети. Обратите внимание, что агенты PG, AC, PPO и SAC, имеющие несколько входных путей, не могут сгенерировать код, если они используют рекуррентную нейронную сеть в любом из путей. Список поддерживаемых слоев см. в разделе Сети и слои, поддерживаемые для генерации кода (MATLAB Coder). Для получения дополнительной информации смотрите Необходимые условия глубокого обучения с MATLAB Coder (MATLAB Coder) и Глубокого обучения с MATLAB Coder (MATLAB Coder).
В качестве примера сгенерируйте код С без зависимостей от сторонних библиотек для агента градиента политики, обученного в Train PG Agent для балансировки системы тележки с шестом.
Загрузите обученного агента.
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');
Эта команда генерирует код С++ для агента градиента политики, содержащего актёра глубокой нейронной сети.
В качестве примера сгенерируйте код С++ для агента градиента политики, обученного в Train PG Agent для балансировки системы тележки с шестом, используя Math Kernel Library для глубоких нейронных сетей (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 Глубокие Нейронные Сети (Intel MKL-DNN).
cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');
Установите пример входного значения для функции оценки политики. Чтобы найти размерность наблюдения, используйте getObservationInfo
функция. В этом случае наблюдения находятся в векторе с четырьмя элементами.
argstr = '{ones(4,1)}';
Сгенерируйте код используя codegen
функция.
codegen('-config','cfg','evaluatePolicy','-args',argstr,'-report');
Эта команда генерирует код С++ для агента градиента политики, содержащего актёра глубокой нейронной сети.
В качестве примера сгенерируйте код С для агента Q-обучения, обученного в Training Обучение с Подкреплением Agent в основном мире сетки.
Загрузите обученного агента.
load('basicGWQAgent.mat','qAgent')
Создайте функцию оценки политики для этого агента.
generatePolicyFunction(qAgent)
Эта команда создает evaluatePolicy.m
файл, который содержит функцию политики и agentData.mat
файл, который содержит обученные функции ценности Q-таблицы. Для заданного наблюдения функция политики ищет функцию ценности для каждого потенциального действия с помощью Q-таблицы. Затем функция политики выбирает действие, для которого функция ценности является наибольшей.
Установите пример входного значения для функции оценки политики. Чтобы найти размерность наблюдения, используйте getObservationInfo
функция. В этом случае существует одно одномерное наблюдение (принадлежащее значению из дискретного набора возможных).
argstr = '{[1]}';
Сконфигурируйте codegen
функция для генерации встраиваемого кода С, подходящего для нацеливания на статическую библиотеку, и установка выходной папки равной buildFolder
.
cfg = coder.config('lib'); outFolder = 'buildFolder';
Сгенерируйте код С с помощью codegen
функция.
codegen('-c','-d',outFolder,'-config','cfg',... 'evaluatePolicy','-args',argstr,'-report');