主要内容

GetValue.

获取估计值函数表示

描述

例子

价值= getValue(valuerep.obs.返回状态值函数表示的估计值函数valuerep.给定环境观察obs.

例子

价值= getValue(qvaluerep.obs.返回多个Q值函数表示的估计的状态动作值函数qvaluerep.给定环境观察obs.。在这种情况下,qvaluerep.具有多种输出,因为有可能的离散动作,以及GetValue.返回每个操作的状态值函数。

例子

价值= getValue(qvaluerep.obs.行为返回单输出Q值函数表示的估计状态操作值函数qvaluerep.给定环境观察obs.和行动行为。在这种情况下,GetValue.返回给定观察和操作输入的状态值函数。

[价值状态] = getValue(___返回表示的状态。使用此语法何时valuerep.或者qvaluerep.是一种经常性的神经网络。

例子

全部收缩

创建环境并获取观察和行动信息。

Env = Rlpredefinedenv('cartpole  - 离散');ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);numobs = obsinfo.dimension(1);numdiscreteact = numel(Actinfo.Elements);

为评论家创造一个深度神经网络。

批评= [featureInputLayer(4,'正常化''没有任何''名称''状态')全连接列(8,'名称''fc')剥离('名称''relu')全康连接层(1,'名称''输出')];

为批评创建一个值函数表示对象。

QuandOptions = rlrepresentationOptions('学习',1e-2,'gradientthreshold',1);评论家= rlvalueerepresentation(批判性,Obsinfo,......'观察''状态',批评);

获取随机单个观察的值函数估计。使用具有与观察规范相同尺寸的观察阵列。

val = getValue(评论家,{rand(4,1)})
val =单身的-0.0899

您还可以获得一批观察的价值函数估计。例如,获得批量的20个观察的值函数。

Batchval = GetValue(评论家,{rand(4,1,20)});大小(批量)
ans =.1×21 20.

valbatch.包含批次中每个观察的一个值函数估计。

创建环境并获取观察和行动信息。

Env = Rlpredefinedenv('cartpole  - 离散');ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);numobs = obsinfo.dimension(1);numdiscreteact = numel(Actinfo.Elements);

为多输出Q值函数表示创建一个深度神经网络。

批评= [featureInputLayer(4,'正常化''没有任何''名称''状态')全连接列(50,'名称''批评福尔福克')剥离('名称''rictrelu1')全连接列(20,'名称''批评福尔2')剥离('名称''transrelu2')全连接列(NumDiscreteAct,'名称''输出')];

使用经常性神经网络创建评论家的代表。

QuandOptions = rlrepresentationOptions('学习',1e-3,'gradientthreshold',1);评论家= rlqvalueerepresentation(批评,undernfo,Actinfo,......'观察''状态',批评);

使用随机观察获得每个可能的离散动作的值函数估计。

val = getValue(评论家,{rand(4,1)})
val =2x1单列向量0.0139 -0.1851

包含两个值函数估计,一个用于每个可能的离散动作。

您还可以获得一批观察的价值函数估计。例如,获得10个观察批次的价值函数估计。

Batchval = getValue(评论家,{rand(4,1,10)});大小(批量)
ans =.1×22 10.

批歌包含批次中每个观察的两个值函数估计值。

为两个观察输入通道创建观察规范。

ObsInfo = [rlnumericspec([8 3]),rlnumericspec([4 1])];

创建动作规范。

Actinfo = rlnumericspec([2 1]);

为评论家创造一个深度神经网络。该网络具有三个输入通道(两个用于观察和动作一个)。

develationpath1 = [imageInputLayer([8 3 1],'正常化''没有任何''名称''endate1')全连接层(10,'名称''fc1')附加层(3,'名称''添加')剥离('名称''relu1')全连接层(10,'名称''fc4')剥离('名称''relu2')全康连接层(1,'名称''fc5')];deviemationPath2 = [ImageInputLayer([4 1 1],'正常化''没有任何''名称''state2')全连接层(10,'名称''fc2')];ActionPath = [ImageInputLayer([2 1 1],'正常化''没有任何''名称''行动');全康统计(10,'名称''fc3')];net = layergraph(观察到3月1);net = addlayers(net,观察结果2);net = addlayers(net,ActionPath);net = connectlayers(net,'fc2''添加/ in2');net = connectlayers(net,'fc3''添加/ IN3');

使用此网络创建批评批读表示。

c = rlqvalueerpresentation(net,obsinfo,Actinfo,......'观察',{'endate1''state2'},'行动',{'行动'});

为每个通道创建随机观察批次尺寸64组。

batchobs_ch1 = rand(8,3,64);batchobs_ch2 = rand(4,1,64);

创建随机动作批量大小64集。

Batchact = Rand(2,1,64,1);

获取批量观察和行动的状态动作价值函数估计。

qvalue = getValue(c,{batchobs_ch1,batchobs_ch2},{batchact});

输入参数

全部收缩

值函数表示,指定为rlvalueerepresentation目的。

Q值函数表示,指定为rlqvalueerepresentation目的。

环境观测,指定为具有多个元素的单元阵列,因为存在观察输入通道。每个元素obs.包含单个观察输入通道的观察数组。

每个元素的尺寸obs.mO.-经过-L.B.-经过-L.S., 在哪里:

  • mO.对应于相关观察输入通道的尺寸。

  • L.B.是批量大小。指定单个观察,设置L.B.= 1.要指定一批观察,请指定L.B.> 1.如果valuerep.或者qvaluerep.有多个观察输入通道,然后L.B.对所有元素必须相同obs.

  • L.S.指定经常性神经网络的序列长度。如果valuerep.或者qvaluerep.那时不使用经常性神经网络L.S.= 1.如果valuerep.或者qvaluerep.有多个观察输入通道,然后L.S.对所有元素必须相同obs.

L.B.L.S.两者都必须相同行为obs.

操作,指定为单元素单元数组,包含一个动作值数组。

该阵列的尺寸是m一种-经过-L.B.-经过-L.S., 在哪里:

  • m一种对应于相关动作规范的尺寸。

  • L.B.是批量大小。指定单个观察,设置L.B.= 1.要指定一批观察,请指定L.B.> 1。

  • L.S.指定经常性神经网络的序列长度。如果valuerep.或者qvaluerep.那时不使用经常性神经网络L.S.= 1。

L.B.L.S.两者都必须相同行为obs.

输出参数

全部收缩

估计值函数,用尺寸作为数组返回N-经过-L.B.-经过-L.S., 在哪里:

  • N是批评网络的产出数量。

    • 对于状态值表示(valuerep.),N= 1。

    • 用于单输出状态 - 动作值表示(qvaluerep.),N= 1。

    • 对于多输出状态 - 动作值表示(qvaluerep.),N是离散行动的数量。

  • L.B.是批量大小。

  • L.S.是经常性神经网络的序列长度。

反复性神经网络的表示状态,作为单元阵列返回。如果valuerep.或者qvaluerep.那时不使用经常性神经网络状态是一个空的单元格阵列。

您可以将表示状态设置为状态使用setstate.功能。例如:

valuerep = setstate(valuerep,州);
在R2020A中介​​绍