部署训练有素的强化学习策略
一旦训练了强化学习代理,就可以生成代码来部署最优策略。您可以生成:
CUDA®使用GPU Coder™为深度神经网络策略编写代码
C/ c++代码用于表、深度神经网络或线性基函数策略的使用MATLAB®编码器™
对于在任何输入路径中使用前馈神经网络的代理,只要支持所有使用的层,就支持代码生成。对于使用循环神经网络(RNN)的连续动作PG、AC、PPO和SAC代理,不支持代码生成。
有关训练强化学习代理的更多信息,请参见训练强化学习代理.
若要生成基于给定观察结果选择操作的策略评估函数,请使用generatePolicyFunction
.您可以使用GPU Coder或生成部署此策略功能的代码MATLAB编码器.
生成一个Simulink®策略评估块,根据给定的观察选择操作,使用generatePolicyBlock
.您可以生成用于部署此策略块的代码仿真软件编码器.
使用生成代码GPU编码器
如果您训练的最优策略使用深度神经网络,您可以使用GPU Coder为策略生成CUDA代码。有关支持的gpu的更多信息,请参见GPU计算的需求(并行计算工具箱).为深度神经网络生成CUDA代码有几个必要和推荐的先决条件产品。2022世界杯八强谁会赢?有关更多信息,请参见安装必备产品2022世界杯八强谁会赢?(GPU编码器)而且设置必备产品2022世界杯八强谁会赢?(GPU编码器).
并非所有的深度神经网络层都支持GPU代码生成。有关受支持层的列表,请参见支持的网络、层和类(GPU编码器).有关GPU代码生成的更多信息和示例,请参见GPU Coder深度学习(GPU编码器).
生成CUDA深度神经网络策略代码
例如,为训练过的策略梯度代理生成GPU代码训练PG代理人平衡车杆系统.
装载训练有素的代理。
负载(“MATLABCartpolePG.mat”,“代理”)
为此代理创建一个策略评估函数。
generatePolicyFunction(代理)
此命令创建evaluatePolicy.m
文件,其中包含策略函数和agentData.mat
文件,其中包含训练过的深度神经网络参与者。对于给定的观察结果,策略函数使用参与者网络评估每个潜在动作的概率。然后,策略函数根据这些概率随机选择一个动作。
您可以使用GPU Coder为这个网络生成代码。例如,可以生成CUDA兼容的MEX函数。
配置codegen
函数来创建CUDA兼容的c++ MEX函数。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);
设置策略评估函数的示例输入值。要查找观察维度,请使用getObservationInfo
函数。在这种情况下,观察结果是一个四元向量。
argstr =“{1(4,1)}”;
使用codegen
函数。
codegen (“配置”,“cfg”,“evaluatePolicy”,“参数”argstr,“报告”);
该命令生成MEX功能evaluatePolicy_mex
.
使用生成代码MATLAB编码器
您可以为表、深度神经网络或线性基函数策略生成C/ c++代码MATLAB编码器.
使用MATLAB编码器,你可以生成:
用于使用Q表、值表或线性基函数的策略的C/ c++代码。有关通用C/ c++代码生成的更多信息,请参见生成代码(MATLAB编码器).
用于使用深度神经网络的策略的c++代码。注意,对于使用循环神经网络(RNN)的连续动作PG、AC、PPO和SAC代理,不支持代码生成。有关受支持层的列表,请参见代码生成支持的网络和层(MATLAB编码器).有关更多信息,请参见用MATLAB编码器进行深度学习的先决条件(MATLAB编码器)而且基于MATLAB编码器的深度学习(MATLAB编码器).
为深度神经网络策略生成C代码,无需使用任何第三方库
例如,为训练过的策略梯度代理生成不依赖于第三方库的C代码训练PG代理人平衡车杆系统.
装载训练有素的代理。
负载(“MATLABCartpolePG.mat”,“代理”)
为此代理创建一个策略评估函数。
generatePolicyFunction(代理)
此命令创建evaluatePolicy.m
文件,其中包含策略函数和agentData.mat
文件,其中包含训练过的深度神经网络参与者。对于给定的观察结果,策略函数使用参与者网络评估每个潜在动作的概率。然后,策略函数根据这些概率随机选择一个动作。
配置codegen
函数生成适合构建MEX文件的代码。
cfg = coder.config (墨西哥人的);
在配置对象上,设置目标语言为“c++”,并设置DeepLearningConfig
“没有一个
”。该选项生成代码时不使用任何第三方库。
cfg。TargetLang =“C”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“没有”);
设置策略评估函数的示例输入值。要查找观察维度,请使用getObservationInfo
函数。在这种情况下,观察结果是一个四元向量。
argstr =“{1(4,1)}”;
使用codegen
函数。
codegen (“配置”,“cfg”,“evaluatePolicy”,“参数”argstr,“报告”);
该命令为包含深度神经网络参与者的策略梯度代理生成c++代码。
使用第三方库为深度神经网络策略生成c++代码
例如,为训练过的策略梯度代理生成c++代码训练PG代理人平衡车杆系统使用深度神经网络(MKL-DNN)的英特尔数学内核库。
装载训练有素的代理。
负载(“MATLABCartpolePG.mat”,“代理”)
为此代理创建一个策略评估函数。
generatePolicyFunction(代理)
此命令创建evaluatePolicy.m
文件,其中包含策略函数和agentData.mat
文件,其中包含训练过的深度神经网络参与者。对于给定的观察结果,策略函数使用参与者网络评估每个潜在动作的概率。然后,策略函数根据这些概率随机选择一个动作。
配置codegen
函数生成适合构建MEX文件的代码。
cfg = coder.config (墨西哥人的);
在配置对象上,设置目标语言为“c++”,并设置DeepLearningConfig
到目标库'mkldnn
”。该选项使用深度神经网络(Intel MKL-DNN)的Intel数学内核库生成代码。
cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“mkldnn”);
设置策略评估函数的示例输入值。要查找观察维度,请使用getObservationInfo
函数。在这种情况下,观察结果是一个四元向量。
argstr =“{1(4,1)}”;
使用codegen
函数。
codegen (“配置”,“cfg”,“evaluatePolicy”,“参数”argstr,“报告”);
该命令为包含深度神经网络参与者的策略梯度代理生成c++代码。
为Q表策略生成C代码
例如,为训练过的q学习代理生成C代码在基本网格世界中训练强化学习代理.
装载训练有素的代理。
负载(“basicGWQAgent.mat”,“qAgent”)
为此代理创建一个策略评估函数。
generatePolicyFunction (qAgent)
此命令创建evaluatePolicy.m
文件,其中包含策略函数和agentData.mat
文件,其中包含训练过的Q表值函数。对于给定的观察结果,策略函数使用Q表查找每个潜在动作的值函数。然后,策略函数选择价值函数最大的动作。
设置策略评估函数的示例输入值。要查找观察维度,请使用getObservationInfo
函数。在这种情况下,只有一个一维观测值(属于离散的可能值集)。
argstr =“{[1]}”;
配置codegen
函数生成适合针对静态库的可嵌入C代码,并将输出文件夹设置为buildFolder
.
cfg = coder.config (“自由”);倒转褶皱=“buildFolder”;
方法生成C代码codegen
函数。
codegen (“c”,“- d”倒转褶皱,“配置”,“cfg”,...“evaluatePolicy”,“参数”argstr,“报告”);
另请参阅
generatePolicyFunction
|generatePolicyBlock