从类模板创建自定义环境
可创建并修改模板环境类定义自定义增强学习环境可自定义模板环境实现 :
实现更多复杂环境动态
自定义可视化环境
创建第三方库接口,定义语言如C++Java®或Python®.更多信息见外部语言界面.
更多创建MATLAB信息®类见自定义类.
可使用自定义函数创建不那么复杂自定义增强学习环境,如下文描述创建自定义环境使用步和重置函数.
创建模板类
定义自定义环境,先创建模板类文件,指定类名举个例子命名类MyEnvice公司
.
rlCreateEnvTemplate(MyEnvice)
函数rlCreateEnvTemplate
创建并打开模板类文件模板类子类rl.env.MATLABEnvironment
抽象类显示于模板文件起始端类定义抽象类同MATLAB强化环境对象使用
类defmy Environment < Rl.env.MATLAB环境
默认时模板类执行简单推法平衡模型,类似于推法预定义环境装入预定义控制系统环境.
定义环境动态文件MyEnvice.m
.修改模板类,具体说明如下:
环境属性
所需环境方法
可选环境方法
环境属性
内属性化
模板段指定创建和模拟环境所需的参数参数可包括:
物理常量-样本环境定义重力加速度
重力
)环境几何-样本环境定义马车和极块
CartMass
并PoleMass
半长极半PoleLength
)环境约束-样本环境定义极角和推车距离阈值
angleThreshold
并DisplacementThreshold
)环境使用这些值检测训练集完成环境评价需要变量-样本环境定义状态向量
状态
并标注插件何时完成exe
)常量定义动作或观察空间-样本环境定义动作空间最大力
最大力
)常量计算奖赏信号-样本环境定义常量
RewardForNotFalling
并PenaltyForFalling
.
属性化%定义并初始化环境的必要属性因重力加速m/s#2重力=9.8质量推车CartMass=1.0质量极PoleMass=0.1半长极半PoleLength=0.5最大力输入可应用最大力=10采样时间百分比Tss=0.02%角失效插件(radians)AgleThresworld=12*pi/180距离失效插件位移shold=2.4百分率报答时推法均衡报答Fornotfalling=1偏偏偏偏偏差偏偏For Falling=-10结束属性化%初始化系统状态状态=零数(4,1)结束属性(ACCY=受保护)初始化内部标志表示插件终止IsDone=假结束
所需函数
增强学习环境需要定义下列函数上头getObservationInfo
,获取ActionInfo
,sim系统
并validateEnvironment
函数已经在基文抽象类中定义创建环境时,你必须定义构造器重置
并阶梯
函数 。
函数转换 | 描述性 |
---|---|
getObservationInfo |
返回环境观察信息 |
获取ActionInfo |
返回环境动作信息 |
sim系统 |
模拟环境代理 |
validateEnvironment |
调用环境校验重置 函数并用单步模拟环境阶梯 |
重置 |
初始化环境状态并清理任何可视化 |
阶梯 |
应用动作,模拟环境一步并输出观察和奖赏并设置标志表示插件是否完全 |
构造函数 | 函数名同类创建类实例 |
样本构造函数
样本手电图构造函数通过下列方式创建环境:
定义动作观察规范关于创建这些规范的更多信息见
内文特征
并rlFiteSetspec
.调用构建基础抽象类
函数显示mineEnvice初始化观察设置objectiveInfo=rlNumericSpec观察Info.NameCartPole州脱机objectiveInfo.descript=Xdx;初始化动作设置ActionInfo=rFiteSetSpecActionInfo.Name=CartPole动作;下行执行RL环境内置函数this = this@rl.env.MATLABEnvironment(ObservationInfo,ActionInfo);初始化属性值并预计必备值updateActionInfo(this);结束
样本构造函数不包括输入参数可添加输入参数供自定义构造器使用
样本化重置
函数转换
样本手推重置函数设置模型初始条件并返回观察初始值并生成通知环境通过调用更新envUpdatedCallback
函数可用以更新环境可视化
重置环境初始状态并返回初始观察函数显示初始Observation=重置+-.05radT0=2*0.05*Rand-0.05位址Td0=0X%X0=0Xdot%Xd0=0初始观察=[X0;Xd0;T0;Td0]状态=初始观察%(可选择性)使用通知更新信号百分比环境更新(例如,更新可视化)notifyEnvUpdated(this);结束
样本化阶梯
函数转换
样本手推法阶梯
函数 :
处理输入动作
环境动态方程分步评价
计算并返回更新观察
计算并返回奖状信号
检查插件是否完整并返回
exe
适配信号生成通知环境更新
函数显示[备注,评分,IsDone,Info]=阶梯(This,Action)Info=[获取动作Force=gforce(This,Action);unpack状态矢量XDot=这个.State2Theta=这个.StateThetaDot=g.state(4)%缓存避免重计Costhta=cosSintheta=sinsystemMass+时间=(Force+ this.PoleMass*This.HalfPoleLength* ThetaDot#2*Sintheta).systemMass;应用运动方程ThetaDotdot=(this.Gravity*Sintheta-Costhta*temp)./ (this.HalfPoleLength*(4.0/3.0 - this.PoleMass*CosTheta*CosTheta/SystemMass))!XDotdot=tim- this.PoleMass*This.HalfPoleLength*ThatDot*Costhet/SystemMass欧拉集成观察值=此.State+ts.*更新系统状态状态表示观察检查终端条件X=观察(1)Theta=观察3IsDone=abss.Isdone=Isdone获取奖赏报答 = 报答%(可选择性)使用通知更新信号百分比环境更新(例如更新可视化)notifyEnvUpdated(this);结束
可选函数
可按需定义模板类中任何其他函数举个例子,你可创建助手函数阶梯
或重置
.推波板模型执行获取报答
函数计算每次步骤的奖赏
函数显示报答 = 报答if~.Isdon报答=这个.RewardNotfalling;其余评分=此.PenaltyForFalling结束结束
环境可视化
可实现可视化绘图
函数.内绘图
函数 :
创建图或实例视觉化自实现类举此例子,创建图并存储图柄环境对象内
调用
envUpdatedCallback
函数.
函数显示绘图(This)启动可视化.Figure=图可视化,开,'HandleVisibility',关)!ha=gcahad.XLimMode人工智能脱机.YimMode人工智能脱机had.XLim =[33]ha.YLim = [-1 2]!hold(ha)开);更新可视化envUpdatedCallback(this)结束
举此例子,将柄存储图中作为环境对象受保护属性
属性(ACCY=受保护)初始化内部标志表示插件终止IsDone=假% handle图图结束
内envUpdatedCallback
绘制图的可视化或使用自定义可视化对象举例说,检查图控件设置果真如此,绘制可视化
函数显示envUpdatedCallback(this)ifspety(This.Figure)##valid(This.Figure)%设置可视化图像当前图ha=gca(This.Figure);提取推车位置和极角X=g.statelTheta=这个.Statekaplot=dedobj(Ha)台格,Cartplot)!pooplot=decobj-Ha台格,Poleplot);ifsvalid(cartplot).虚无性(poeplot)%初始化推车绘图trapoly = monshape([-0.25-0.250.25],[-0.1250.1250.125-0.125-0.125-0.125])tapoly=翻译(cartoply,[x0]卡波里图脸色Color0.8500 0.3250 0.0980木马图.TagCartplot;%初始化极图L=l.HalfPoleLength*2极值=多边形([0.1-0.1-0.10.1],[0LL00])poly=翻译(polely,sx0)polepoly = rotate(polepoly,rad2deg(theta),[x,0])!极点表示图(ha,poleopolly,脸色Color,[0 0.4470 0.7410])!极点图Poleplot;其余推车推车极点表示极点.Shape结束计算新马车和极位置[cartsposx,~] =croid(cartpoly)iroid(polely)dx=x-corposxdtha=theta2cartposx-poleposx卡波里=翻译(卡波里,[dx,0])poly=翻译(polely,[dx,0])polepoly = rotate(polepoly,rad2deg(dtheta),[x,0.25/2]);更新图上马车杆位置卡波罗.Shape=卡波里极点.Shape=极点%刷新图窗口画线( ) ;结束结束
环境调用envUpdatedCallback
函数更新可视化
证明自定义环境
定义自定义环境类后,在MATLAB工作空间创建实例命令行键入
env=MyEnvice
如果您的构造者有输入参数,请在类名后指定参数举个例子MyEnvironment(arg1,arg2)
.
创建环境后,最佳实践是验证环境动态要做到这一点,使用validateEnvironment
函数打印命令窗口出错
validateEnvironment(env)
验证环境对象后,可使用它训练增强学习代理更多信息见培训代理训练强化学习代理.