DI-engine强化学习入门(十一)——多重离散动作空间示例代码分析

一、什么是多重离散动作空间?
多重离散动作空间是指一个环境中具有多个离散动作空间的情况。在传统的强化学习中,通常假设环境的动作空间是离散的,即代理可以选择的动作是有限且离散的。然而,在某些情况下,一个环境可能具有多个离散动作空间,每个动作空间对应于不同的维度。

举个例子,假设你有一个机器人控制问题,机器人可以在三个维度上采取动作:X轴方向、Y轴方向和Z轴方向。每个维度上的动作空间都是离散的,例如在X轴上可以选择向左、向右或不动,在Y轴和Z轴上也有类似的选择。这样,整个动作空间就被分解为三个离散动作空间的笛卡尔积。

多重离散动作空间可以用于描述具有多个维度的离散动作选择问题,每个维度都有自己的离散动作空间。在这种情况下,代理需要为每个维度选择一个动作,将这些动作组合成一个多维动作向量,然后执行这个向量作为一个整体的动作。

在强化学习中,针对多重离散动作空间的问题,我们可以使用适当的算法和技术来解决,例如深度Q网络(DQN)的多重离散版本或者使用策略梯度方法。这些算法可以允许代理在多个维度上做出独立的动作选择,并通过学习来优化整体的策略。

示例代码分析
第一个例子是使用OpenAI Gym库来创建离散动作空间的环境,并演示如何创建多重离散动作空间。

import gymfrom gym.spaces import Discrete, MultiDiscrete"""e.g. Nintendo Game Controller- Can be conceptualized as 3 discrete action spaces:    1) Arrow Keys: Discrete 5  - NOOP[0], UP[1], RIGHT[2], DOWN[3], LEFT[4]  - params: min: 0, max: 4    2) Button A:   Discrete 2  - NOOP[0], Pressed[1] - params: min: 0, max: 1    3) Button B:   Discrete 2  - NOOP[0], Pressed[1] - params: min: 0, max: 1"""# discrete action space envenv = gym.make('Pong-v4')assert env.action_space == Discrete(6)# multi discrete action spacemd_space = MultiDiscrete([2, 3])  # 6 = 2 * 3

示例中的环境为游戏《乓》(英语:Pong)是雅达利在1972年11月29日推出的一款投币式街机游戏。《乓》是一款乒乓球游戏,其英文名称“Pong”来自乒乓球击打后所发出的声音。《乓》很多时候也有认为是电子游戏历史上第一个街机电子游戏。在此游戏中,玩家的目的就是在模拟乒乓球比赛中夺取高分以击败电脑玩家。此游戏的开发者为艾伦·奥尔康。

这段代码使用了OpenAI Gym库来创建游戏环境,并定义了离散动作空间和多重离散动作空间。 

import gymfrom gym.spaces import Discrete, MultiDiscrete

首先,代码导入了gym模块和Discrete、MultiDiscrete类。gym是一个开源的强化学习库,提供了许多经典的强化学习环境和相关工具函数。Discrete和MultiDiscrete是Gym中定义离散动作空间的类。

接下来,代码给出了一个示例,将任天堂游戏控制器作为说明。注释中提到,游戏控制器可以被概念化为3个离散的动作空间。

1) Arrow Keys(方向键):离散5个动作,包括NOOP[0],UP[1],RIGHT[2],DOWN[3],LEFT[4]。这个动作空间的参数范围是0到4,最小值为0,最大值为4。
2) Button A(A按钮):离散2个动作,包括NOOP[0],Pressed[1]。这个动作空间的参数范围是0到1,最小值为0,最大值为1。
3) Button B(B按钮):离散2个动作,包括NOOP[0],Pressed[1]。这个动作空间的参数范围是0到1,最小值为0,最大值为1。

env = gym.make('Pong-v4')

然后,代码创建了一个离散动作空间的环境,使用的是名为’Pong-v4’的游戏环境。这个游戏环境是OpenAI Gym提供的一个版本,代表了Pong游戏。通过gym.make函数创建环境对象,并将其分配给名为env的变量。

assert env.action_space == Discrete(6)

接着,代码使用断言语句来验证环境的动作空间是否为离散动作空间,并检查动作空间的范围是否为0到5(共6个动作)。这是因为’Pong-v4’游戏环境的动作空间是一个离散动作空间,有6个动作可供选择。

md_space = MultiDiscrete([2, 3])  # 6 = 2 * 3

最后,代码创建了一个多重离散动作空间md_space,使用MultiDiscrete类来定义动作空间的维度和范围。在这个示例中,md_space是一个二维的动作空间,第一个维度有2个动作,第二个维度有3个动作,总共有6个动作。

MultiDiscreteEnv类

点击DI-engine强化学习入门(十一)——多重离散动作空间示例代码分析 - 古月居可查看全文

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值