不匹配rlCreateEnvTemplate()和rlTable ()

3视图(30天)
如果rlTable()需要输入标量那么为什么我不能改变环境中的ObservationInfo模板从rlNumericSpec ([4 1]);rlFiniteSetSpec ((1 2 3 4)) ?
我从模板创建了一个环境,如:
rlCreateEnvTemplate (“myEnvClass”);
env = myEnvClass;
验证的环境很好,使用
validateEnvironment (env);
设置sarsaAgent时,问题就来了,首先需要创建一个rlTable对象作为输入参数:
> > qTable = rlTable (getObservationInfo (myenv) getActionInfo (myenv));
错误使用rlTable / validateInput(第131行)
输入必须是一个标量rlFiniteSetSpec。
错误在rlTable(51)行
validateInput (obj ObservationInfo)
所以我想改变这些线(从myEnvClass.m):
函数这个= myEnvClass ()
%初始化设置观察
ObservationInfo = rlNumericSpec (1 [4]);
:
函数这个= myEnvClass ()
%初始化设置观察
ObservationInfo = rlFiniteSetSpec ((1 2 3 4));
就可以做到。现在的环境不会验证:
> > env = myEnvClass;
> > validateEnvironment (env);
错误使用rl.env。MATLAB环境/validateEnvironment (line 28)
环境“ObservationInfo”不匹配观察输出复位功能。
检查的数据类型、维度和的范围内。
我不知道如何改变重置功能使它工作。这就是从模板生成的环境类:
%重置环境初始状态和输出初步观察
函数InitialObservation =重置(这)
θ(+ - % . 05 rad)
T0 = 2 * 0.05 *兰德- 0.05;
% Thetadot
Td0 = 0;
% X
X0 = 0;
% Xdot
Xd0 = 0;
InitialObservation = [T0; Td0 X0; Xd0];
这一点。状态= InitialObservation;
%(可选)使用notifyEnvUpdated信号
%的环境已经更新(例如更新可视化)
notifyEnvUpdated(这个);
结束
这没有意义,因为这个重置()函数返回一个4行列向量:
> >重置(env)
ans =
-0.0108
0
0
0
就像预期的类定义:
> > getObservationInfo (env)
ans =
rlFiniteSetSpec属性:
元素:[4×1双)
名称:“CartPole国家”
描述:“x, dx,θ,dtheta”
维度:[1]
数据类型:“替身”
> > ans.Elements
ans =
1
2
3
4
我想指出,改变数据类型设置在复位()函数,如下:
InitialObservation = rlFiniteSetSpec ([T0 Td0 X0 Xd0]);
这一点。状态= InitialObservation;
不帮助:
> > env = myEnvClass;
> > validateEnvironment (env);
错误使用rl.env。MATLAB环境/validateEnvironment (line 22)
在那里是一个错误评估重置功能。
引起的由:
错误使用myEnvClass /集。状态(第165行)
预期国家这些类型之一:
双、单、uint8 uint16、uint32 uint64, int8, int16, int32, int64
而不是它的类型是rl.util.rlFiniteSetSpec。

答案(0)

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!