Matlab官方教程——强化学习入门之旅

使用预训练的智能体进行仿真

运行simulink模型

simout=sim(agent,environment)

仿真的输出被打包到simout结构体中
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用选项进行仿真

rlSimulationOptions()
opts=rlSimulationOptions(…);%比如设置最大步长,模拟次数
simout=sim(agent,environment,opts)

在这里插入图片描述
在这里插入图片描述

定义环境接口

在这里插入图片描述

使用离散变量定义环境

obs = rlFiniteSetSpec(values)
choices = 1:5
actInfo = rlFiniteSetSpec(choices)

使用连续变量定义环境

rlNumericSpec([])
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
使用rlSimulinkEnv函数创建环境,要传参:模型名,智能体位置,状态观测值,动作观测值。(一定要按照这个顺序)

提供奖励

塑造持续奖励函数

先定义r=f(x,y),
接着使用contourf(x,y,r)绘制等高线图
并加入colorbar命令来添加一个颜色栏

奖励函数的设置考虑:避免智能体一直呆在奖励高的区域,让奖励函数除目标外其它地方都是负值
在这里插入图片描述

编写奖励函数

为了引导智能体到达目标,根据当前位置编写奖励函数
为了保证速度不过快,根据当前角速度在奖励函数添加惩罚项
为了让智能体到达目标,到达目标时给予一个正奖励
为了让智能体不撞边框,撞了就给惩罚

编写带有动作的奖励函数

由于奖励是根据环境的新状态(t+detaT时刻)计算的
动作如果直接接到matlba计算奖励函数的模块,则动作是即时给到奖励函数的
这意味着计算奖励所依据的环境比导致该环境的动作晚了一个时间步,所以为了对齐时间步,在动作模块后要加入一个单位延迟模块再接入奖励函数模块,该奖励函数模块实际上对于与代码中的一个函数rewardfun,
在这里插入图片描述

定义智能体

评价器和Q值

创建Q表

T= rlTable(states,actions)
创建Q表,其中states和actions都是rlFiniteSetSpec创建的环境接口

创建评价器

在这里插入图片描述

创建智能体

在这里插入图片描述

可视化Q表

在这里插入图片描述

创建DQN智能体

agent=rlDQNAgent(obsInfo,actInfo)%创建智能体
critic=getCritic(agent)%获取评价器
net=getModel(critic)%获取神经网络 可以用plot直接展示net
deepNetworkDesigner(net)%用深度网络设计器打开网络
layers=net.Layers%获取网络的Layers属性

PPO/DDPG智能体算法解释(matlab课程上的,值得借鉴)

PPO

PPO(近端策略优化)智能体是一种使用随机执行器和值评价器的执行器-评价器智能体。对于离散动作,随机执行器将观测值作为输入并输出采取每个动作的概率。
在这里插入图片描述

值评价器仅采用状态(观测值)作为输入,而不是同时采用状态和动作。与任何评价器一样,它会返回值作为输出。
在这里插入图片描述

与往常一样,智能体会观测环境的状态。评价器可以使用此信息预测此状态时的值。
在这里插入图片描述

观测值也会传递给执行器。智能体会根据随机执行器提供的概率随机选择一个动作。
在这里插入图片描述

动作影响环境,环境向智能体提供一个奖励,智能体观测环境的新状态。

由此,智能体可以获得原始状态时的一个更好的估计值。策略梯度方法只使用奖励。其他方法(例如 PPO)会将新状态传递给评价器,后者会确定该状态时的值。也就是说,评价器会估计智能体未来可从该情况获得多少奖励。将此信息与观测到的奖励相结合,可对原始状态时的估计值进行更新。
在这里插入图片描述

训练算法使用原始估计值和更新后的估计值来更新执行器和评价器。更新后的评价器产生的估计值更接近于用实际奖励得到的值。更新后的执行器产生的动作将引发具有更高值的状态。
在这里插入图片描述

DDPG

DDPG(深度确定性策略梯度)智能体是一种使用确定性执行器和 Q 值评价器的执行器-评价器智能体。
在这里插入图片描述
确定性执行器用于连续动作。顾名思义,确定性执行器提供从观测值到动作值的直接映射。虽然执行器是确定的,但智能体通常会向动作添加随机噪声来促进探索。

与往常一样,Q 值评价器将观测值和动作作为输入,并返回(在该状态下采取这些操作的)值作为输出。

在这里插入图片描述
智能体会观测环境的状态。该状态随后传递给执行器。
在这里插入图片描述
观测值也会连同执行器确定的动作一起传递给评价器。然后,评价器会估计在当前情况中遵循当前策略的值。
在这里插入图片描述
通常,智能体也会执行动作,这会影响环境。
在这里插入图片描述
环境向智能体提供一个奖励,智能体观测环境的新状态。

执行器使用该新状态来确定新动作。该动作和新状态传递给评价器,后者会确定值。也就是说,评价器会估计智能体未来可从该情况获得多少奖励。将此信息与观测到的奖励相结合,可对原始状态时的估计值进行更新。
在这里插入图片描述

训练算法使用原始估计值和更新后的估计值来更新执行器和评价器。更新后的评价器产生的估计值更接近于用实际奖励得到的值。更新后的执行器产生的动作将引发具有更高值的状态。训练算法使用原始估计值和更新后的估计值来更新执行器和评价器。更新后的评价器产生的估计值更接近于用实际奖励得到的值。更新后的执行器产生的动作将引发具有更高值的状态。

在这里插入图片描述

智能体类型摘要

在这里插入图片描述

训练智能体

在这里插入图片描述

训练选项

您可以使用 rlTrainingOptions 函数创建这样一个变量,该变量包含训练控制选项的设置。如果没有输入,rlTrainingOptions 会返回默认选项。
opts = rlTrainingOptions(“OptionName”,value)
diceopts=rlTrainingOptions(“MaxStepsPerEpisode”,20,“MaxEpisodes”,2000)
diceopts.ScoreAveragingWindowLength=100 %
diceopts.StopTrainingCriteria=AverageReward
diceopts.StopTrainingValue=-3
%然后可以将训练选项变量传递给train函数
info = train(agent,slEnv,diceopts)

智能体超参数设置

可以通过rlAgent来创建不同的智能体
对应有rl
AgentOptions来设置智能体的超参数,如折扣因子,样本时间(智能体都会在每递增 SampleTime 一次时接收观测值并执行动作。),经验池大小,每次更新所用的MiniBatchSize大小

训练通常使用某种形式的梯度下降来调整参数。因此,参数的更改幅度与学习率和梯度大小有关。你可通过使用 GradientThreshold 选项对梯度大小设置上界, 从而限制任何更新的大小。

梯度下降算法从根本上看是一种优化算法(在本例中,可以最大程度地减少执行器或评价器的目标输出中的错误)。因此,选项存储在智能体选项的 ActorOptimizerOptions 和 CriticOptimizerOptions 属性中。
您可以使用 rlOptimizerOptions 函数创建变量来保存执行器和评价器的设置。使用这些变量作为智能体的 ActorOptimizerOptions 和 CriticOptimizerOptions 属性的值。

智能体会观测环境的状态,并按固定的速率执行动作。对于在仓库中穿行的机器人,关于机器人可以或需要多快进行测量并驱动电机存在硬件限制。智能体的观测值和动作的频率是使用 “SampleTime” 选项设置的。请注意,应在训练智能体之前设置此选项。而本练习中设置的其他选项需根据训练性能进行调整。

执行器和评价器网络会使用随机梯度下降进行更新,这意味着梯度(更新网络权重的方向)是根据经验的随机样本估计的。增加样本大小可提供更准确的估计值。您可以使用 “ExperienceBufferLength” 选项设置要存储的总回合步长数。使用 “MiniBatchSize” 选项设置从缓冲区获取的用于估计梯度的随机样本数
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
rlOptimizerOptions中包含的是指定执行器或评价器的选项,如学习率,梯度阈值。而 rlOptimizerOptions又是rlDQNAgentOptions的属性之一。最终rlDQNAgentOptions作为参数传入agent=rlDQNAgent(obsInfo,actInfo,rlDQNAgentOptions)
在这里插入图片描述

智能体类型摘要

在这里插入图片描述

改进训练

在这里插入图片描述

  • 仿真观察训练
  • 如果未收敛,增加训练回合数
  • 给予一定的探索率
  • 检查奖励函数的设计,不能仅仅依靠稀疏奖励(比如成功执行任务时才给奖励),需要用奖励函数引导智能体前进
  • 调整学习率。学习率低训练太慢,学习率高训练不稳定。尝试用大的学习率,如果智能体的策略看起来在随机变动,而平均奖励没有任何改进,说明学习率过高。
  • 挑选合适的智能体https://www.mathworks.com/help/reinforcement-learning/ug/create-agents-for-reinforcement-learning.html#mw_a8e986a4-5a7f-4efd-82c3-3195e5b35da4
  • 调整神经元个数。一开始先用默认的,但如果无论尝试其它任何操作智能体都无法进行学习,那就增加网络中隐层单元个数。

RL工作流

函数摘要

RL 工作流的函数摘要

函数选项
接口rlFiniteSetSpec / rlNumericSpec
环境rlSimulinkEnv
执行器和评价器rlOptimizerOptions
智能体rlQAgent
rlSARSAAgent
rlDQNAgent
rlPGAgent
rlACAgent
rlPPOAgent
rlDDPGAgent
rlTD3Agent
rlSACAgent
rlTRPOAgent
rlQAgentOptions
rlSARSAAgentOptions
rlDQNAgentOptions
rlPGAgentOptions
rlACAgentOptions
rlPPOAgentOptions
rlDDPGAgentOptions
rlTD3AgentOptions
rlSACAgentOptions
rlTRPOAgentOptions
训练trainrlTrainingOptions
仿真simrlSimulationOptions
  • 27
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值