强化学习番外篇之 OpenAI-gym 环境的介绍和使用

news/2024/5/19 1:12:22 标签: 强化学习, openai, gym

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github。

本文主要讲解有关 OpenAI gym 中怎么查看每个环境是做什么的,以及状态和动作有哪些可取的值,奖励值是什么样的。然后给出一个完整的代码,最后再说明一下 gym 中的 done 标志的含义。

gym 是 OpenAI 针对强化学习推出的诸多环境的集合,我们可以直接在这些环境上使用各种强化学习算法来训练我们模型,这样我们就可以专注于强化学习算法本身而不是编写环境了。至于 gym 的安装过程,我就不再说了,网上的教程已经非常多了。值得一提的是,目前 gym 已经基本支持 windows 系统了。

对于一个 gym 中的环境,我们怎么查看这个环境要求你做什么、状态和动作是什么样的,以及奖励是什么呢?这一点 gym 并不是十分友好,我在其官网上没有找到明确的说明。这个问题可以通过在 github 上 gym 对应的仓库来找到说明。

首先在 github 上搜索 “openai/gym”,然后选择 star 数最高的那个仓库,然后点击 “Wiki” 就可以在右边看到各种 gym 中的环境名称了,点击想要查看的环境名称就得到了有关该环境的相应介绍。如下图所示:

<a class=gym" />

要是嫌麻烦,也可以直接点击以下链接查看 Gym。


除了上述所说的方式,还可以用代码的方式来查看环境的某些属性。在 gym 中的环境主要可以分为两类,一类是动作是连续的,另一类是动作是离散的。在某些地方这两者会有轻微的差异,这一部分还是直接看代码和注释吧。

import gym

env=gym.make("MountainCar-v0") #创建对应的游戏环境
env.seed(1) #可选,设置随机数,以便让过程重现
env=env.unwrapped #可选,为环境增加限制,对训练有利

#----------------------动作空间和状态空间---------------------#
print(env.action_space) #动作空间,输出的内容看不懂
print(env.action_space.n) #当动作是离散的时,用该方法获取有多少个动作
# env.observation_space.shape[0] #当动作是连续的时,用该方法获取动作由几个数来表示
print(env.action_space.low) #动作的最小值
print(env.action_space.high) #动作的最大值
print(env.action_space.sample()) #从动作空间中随机选取一个动作
# 同理,还有 env.observation_space,也具有同样的属性和方法(.low和.high方法除外)
#-------------------------------------------------------------#

for episode in range(100): #每个回合
    s=env.reset() #重新设置环境,并得到初始状态
    while True: #每个步骤
        env.render() #展示环境
        a=env.action_space.sample() # 智能体随机选择一个动作
        s_,r,done,info=env.step(a) #环境返回执行动作a后的下一个状态、奖励值、是否终止以及其他信息
        if done:
            break

大家可以看到在以上代码 s_,r,done,info=env.step(a) 中有个 done 标志,从字面意思来看 done 是环境是否做完的一个标志。但是实际没这么简单,就拿 MountainCarCartPolePendulum 这三个环境为例。MountainCar 环境中当小车拿到旗子后就算成功的完成任务了,此时 done 为 True。CartPole 环境中当小车和杆子跑出屏幕之外后,就相当于出错了,需要重新开始,这时 done 也为 True。但是对于 Pendulum 环境来说,它的目标是将杆子树立起来,但是该环境中动作可以无限的进行下去,done 永远为 False,所以这种情况下只能用步数达到一定数量来判定是否该结束。


http://www.niftyadmin.cn/n/968530.html

相关文章

强化学习(0):强化学习的基本概念与马尔科夫决策过程

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来&#xff0c;欢迎大家关注我的 个人博客&#xff0c;以及我的github。 本文主要讲解有关强化学习的基本概念以及马尔科夫决策过程的相关内容。 关于强化学习的教程&#xff0c;我见过多种版本&#xff0c;每个老师所…

HDOJ 2088 Box of Bricks

2019独角兽企业重金招聘Python工程师标准>>> #include <stdio.h>int main() {int t,n,sum,all,a[120];int k0;while(scanf("%d", &t)!EOF && t){if(k)printf("\n");sum0;all0;for(int i0; i<t; i){scanf("%d",…

注册表c++精华

https://blog.csdn.net/niushitang/article/details/21653849 https://blog.csdn.net/trustnature/article/details/8089566 https://bbs.csdn.net/topics/250015421转载于:https://www.cnblogs.com/ruingking/p/10920665.html

强化学习(1):Q-Learning 算法

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来&#xff0c;欢迎大家关注我的 个人博客&#xff0c;以及我的github。 本文主要讲解有关 Q-Learning 算法的内容&#xff0c;主要包括 on-policy 和 off-policy 的概念、Q-Learning 算法的基本思想和算法流程&#x…

GetProcAddress的二分查找

只要稍微熟悉PE结构就能很快写出来&#xff0c;GetProcAddress的原型如下 FARPROC WINAPI GetProcAddress(HMODULE hModule,LPCSTR lpProcName) hModule是指模块的基地址&#xff0c;比如用LoadLibrary加载dll返回的地址 lpProcName顾名思义就是函数或者变量的名称&#xff0c;…

019-请你说一下app性能测试的指标

1、内存&#xff1a;内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源&#xff0c;且及时释放内存&#xff0c;保障整个系统的稳定性。当然关于内存测试&#xff0c;在这里我们需要引入几个概念&#xff1a;空闲状态、中等规格、满规格。空闲状态&#xff1a;打开应…

强化学习(2):Sarsa 算法及 Sarsa(lambda) 算法

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来&#xff0c;欢迎大家关注我的 个人博客&#xff0c;以及我的github。 本文主要讲解 Sarsa 算法以及 Sarsa(λ\lambdaλ) 算法的相关内容&#xff0c;同时还会分别附上一个莫烦大神写的例子。 一、Sarsa 算法 Sarsa…

GFORTRAN

GFORTRAN - 维基百科&#xff0c;自由的百科全书GFORTRAN 维基百科&#xff0c;自由的百科全书跳转到&#xff1a; 导航、 搜索gfortran是GCC中的GNU Fortran编译器。从GCC4.0版开始&#xff0c;gfortran取代了g77成为GCC中的fortran编译器。gfortran目前仍在开发中&#xff0c…