主要内容

creategridworld.

为强化学习创建二维网格世界

描述

例子

GW.= creategridworld(mN创造一个网格世界GW.大小m-经过-N默认操作['n';''e';'w']

GW.= creategridworld(mN移动创造一个网格世界GW.大小m-经过-N通过指定的行动移动

例子

全部收缩

对于此示例,请考虑具有以下规则的5×5个网格世界:

  1. 由边界有5乘5个网格世界,有4个可能的动作(北= 1,南= 2,East = 3,West = 4)。

  2. 代理从单元格[2,1](第二行,第一列)开始。

  3. 如果它在单元格[5,5](蓝色)达到终端状态,则该代理接收奖励+10。

  4. 环境中包含从单元格[2,4]到单元格[4,4]的特殊跳跃,+5奖励。

  5. 通过细胞[3,3],[3,4],[3,5]和[4,3](黑细胞)堵塞该试剂。

  6. 所有其他行动都会导致-1奖励。

首先,创建一个Gridworld.对象使用creategridworld.功能。

gw = creategridworld(5,5)
GW = Gridworld具有属性:GridSize:[5 5] CurrentState:“[1,1]”状态:[25x1字符串]动作:[4x1字符串] T:[25x25x4双] R:[25x25x4双] ropactlestates:[0x1字符串]端子主体:[0x1字符串]

现在,设置初始,终端和障碍状态。

gw.currentstate ='[2,1]';gw.terminalstates ='[5,5]';gw.obstaclestates = [“[3,3]”;“[3,4]”;“[3,5]”;“[4,3]”];

更新障碍状态的状态转换矩阵,并将跳转规则设置在障碍状态上。

UpdateStateTranstionForobstacles(GW)GW.T(State2IDX(GW,“[2,4]”),:,:) = 0;gw.t(state2idx(gw,“[2,4]”),State2IDX(GW,“[4,4]”),:) = 1;

接下来,在奖励转换矩阵中定义奖励。

ns = numel(gw.states);na = numel(gw.actions);gw.r = -1 *那些(ns,ns,na);gw.r(state2idx(gw,“[2,4]”),State2IDX(GW,“[4,4]”),:) = 5;gw.r(:,state2idx(gw,gw.terminalstates),:) = 10;

现在,使用rlmdpenv.使用该网格世界环境Gridworld.目的GW.

ent = rlmdpenv(gw)
env = rlmdpenv具有属性:型号:[1x1 rl.env.gridworld] resetfcn:[]

您可以使用该网格世界环境可视化阴谋功能。

情节(env)

输入参数

全部收缩

网格世界的行数,指定为标量。

网格世界的列数,指定为标量。

操作名称,指定为'标准'或者'国王'。什么时候移动设定为

  • '标准',行动是['n';''e';'w']

  • '国王',行动是['n';'e';'w';'n';'nw';'se';'sw']

输出参数

全部收缩

二维网格世界,作为一个返回Gridworld.具有下面列出的属性的对象。有关更多信息,请参阅创建自定义网格世界环境

网格世界的大小,指定为a[m,n]向量。

当前状态的名称,指定为字符串。

状态名称,指定为长度的字符串向量m*N

操作名称,指定为字符串向量。的长度行动矢量由移动争论。

行动是长度的字符串矢量:

  • 四,如果移动被指定为'标准'

  • 八,移动被指定为'国王'

状态转换矩阵,指定为3-D阵列,其确定了代理在环境中的可能运动。国家转换矩阵T.是一个概率矩阵,其指示代理从当前状态移动的可能性有多大程度S.任何可能的下一个州S'通过执行行动一种T.是(谁)给的,

T. S. S. ' 一种 = P. R. O. B. 一种 B. 一世 L. 一世 T. y S. ' | S. 一种

T.是:

  • 一种K.-经过-K.- 4阵列,如果移动被指定为'标准'。这里,K.=m*N

  • 一种K.-经过-K.- 8个阵列,如果移动被指定为'国王'

奖励转换矩阵指定为3-D阵列,确定代理在在环境中执行操作后收到的奖励。R.具有与状态转换矩阵相同的形状和大小T.。奖励过渡矩阵R.是(谁)给的,

R. = R. S. S. ' 一种

R.是:

  • 一种K.-经过-K.- 4阵列,如果移动被指定为'标准'。这里,K.=m*N

  • 一种K.-经过-K.- 8个阵列,如果移动被指定为'国王'

无法在网格世界中无法访问的状态名称,指定为字符串向量。

网格世界中的终端状态名称指定为字符串向量。

在R2019A介绍