强化学习快餐教程(2) - atari游戏

不知道看了上节的内容,大家有没有找到让杆不倒的好算法。
现在我们晋阶一下,向世界上第一种大规模的游戏机atari前进。

太空入侵者

可以通过

pip install atari_py

来安装atari游戏。

下面我们以SpaceInvaders-v0为例看下Atari游戏的环境的特点。

图形版

在太空入侵者中,支持的输入有6种,一个是什么也不做,一个是开火,另4个是控制方向:

  • 0: NOOP
  • 1: FIRE
  • 2: UP
  • 3: RIGHT
  • 4: LEFT
  • 5: DOWN

我们从环境中获取的信息是什么呢?很不幸,是一个(210, 160, 3)的图片,显示出来是这样的:

我们写代码把这个环境搭起来。策略嘛,我就原地不动一直开火。

import gym
from skimage import io
env = gym.make('SpaceInvaders-v0')
status = env.reset()for step in range(1000):env.render()thisstep = 1status, reward, done, info = env.step(thisstep)jpgname = './pic-%d.jpg' % stepio.imsave(jpgname,status)print(reward)if done: print('dead in %d steps' % step)break
env.close()

大家可以通过保存下来的pic-x.jpg来直观观察游戏的情况,比如我在第138步时,打中了一个5分的入侵者。

太空入侵者这个游戏的策略比起cartpole,需要分析图像,这个是不足。但是它也是有好处的,就是reward参数现在会把分数返回给我们。总算是分数处理上不需要搞图像分析了。

下面我来写个算法吧,以1/4的概率左右移动,另外3/4开火:

import gym
env = gym.make('SpaceInvaders-v0')
status = env.reset()def policy(step): state_pool = [3,4,3,3,4,4,3,3,3,4,4,4,3,3,3,3,4,4,4,4]if step % 4 == 0: pos = step / 4result = state_pool[int(pos % (len(state_pool)))] return resultelse: return 1for step in range(10000):env.render()thisstep = policy(step)print(thisstep)status, reward, done, info = env.step(thisstep)#print(reward)if done: print('dead in %d steps' % step)break
env.close()

内存版

如果图像分析做起来不方便的话,gym还为我们提供了RAM版的。就是将游戏机中的128个字节的内存信息提供给我们。
下面是env.reset的128个字节的例子:

[  0   7   0  68 241 162  34 183  68  13 124 255 255  50 255 255   0  3663  63  63  63  63  63  82   0  23  43  35 117 180   0  36  63  63  6363  63  63 110   0  23   1  60 126 126 126 126 255 255 255 195  60 126126 126 126 255 255 255 195  60 126 126 126 126 255 255 255 195   0   048   3 129   0   0   0   0   0   0 246 246  63  63 246 246  63  63   021  24   0  52  82 196 246  20   7   0 226   0   0   0   0   0  21  630 128 171   0 255   0 189   0   0   0   0   0  99 255   0   0 235 254192 242]

输入的部分跟图像版是一样的,我们代码修改如下:

import gym
env = gym.make('SpaceInvaders-ram-v0')
status = env.reset()
print(status)def policy(step): state_pool = [3,4,3,3,4,4,3,3,3,4,4,4,3,3,3,3,4,4,4,4]if step % 4 == 0: pos = step / 4result = state_pool[int(pos % (len(state_pool)))] return resultelse: return 1for step in range(10000):env.render()thisstep = policy(step)#print(thisstep)status, reward, done, info = env.step(thisstep)#print(reward)if done: print('dead in %d steps' % step)break
env.close()

breakout

下面我们再来一个弹球游戏。

弹球游戏的输入是4个值。

图片版的:

import gym
from skimage import io
env = gym.make('Breakout-v0')
status = env.reset()
#print(status)
print(env.action_space)def policy(step):if step % 2 == 0:  return 2else: return 3for step in range(100):env.render()thisstep = policy(step)#print(thisstep)status, reward, done, info = env.step(thisstep)jpgname = './pic-%d.jpg' % stepio.imsave(jpgname,status)#print(reward)if done: print('dead in %d steps' % step)break
env.close()

RAM版的例子:

import gym
env = gym.make('Breakout-ram-v0')
status = env.reset()
print(status)
print(env.action_space)def policy(step): return step % 4for step in range(100):env.render()thisstep = policy(step)#print(thisstep)status, reward, done, info = env.step(thisstep)#print(reward)if done: print('dead in %d steps' % step)break
env.close()

RAM的初始值:

[ 63  63  63  63  63  63 255 255 255 255 255 255 255 255 255 255 255 255255 255 255 255 255 255 255 255 255 255 255 255 192 192 192 192 192 192255 255 255 255 255 255 255 255 255 255 255 255 255 240   0   0 255   00 240   0   5   0   0   6   0  70 182 134 198  22  38  54  70  88   6146   0   8   0   0   0   0   0   0 241   0 242   0 242  25 241   5 2420   0 255   0 228   0   0   0   0   0   0   0   0   0   0   0   0   08   0 255 255 255 255 255 255 255   0   0   5   0   0 186 214 117 246219 242]

强化学习快餐教程(2) - atari游戏相关推荐

  1. 强化学习快餐教程(3) - 一条命令搞定atari游戏

    强化学习快餐教程(3) - 一条命令搞定atari游戏 通过上节的例子,我们试验出来,就算是像cartpole这样让一个杆子不倒这样的小模型,都不是特别容易搞定的. 那么像太空入侵者这么复杂的问题,建 ...

  2. 强化学习快餐教程(1) - gym环境搭建

    强化学习快餐教程(1) - gym环境搭建 欲练强化学习神功,首先得找一个可以操练的场地. 两大巨头OpenAI和Google DeepMind都不约而同的以游戏做为平台,比如OpenAI的长处是DO ...

  3. 强化学习 ---baselines项目之 Atari游戏的网络结构解析

    这个baselines项目设计的比较灵活,结构有点复杂.由于项目庞大,各个函数之间又是相互调用,有时候从一个函数追溯下去,可以追溯6,7层,每个函数的超参数又特别多,很容易把人搞晕.       接下 ...

  4. python_强化学习算法DQN_玩五子棋游戏

    本文公开一个基于强化学习算法DQN的五子棋游戏自动下棋算法源码,并对思路进行讲解. 完整代码和预训练模型(Saver文件夹)地址: python_强化学习算法DQN_玩五子棋游戏 一个基于CNN构成的 ...

  5. 【强化学习】玩转Atari-Pong游戏

    如果您感觉项目还不错,请您点个fork支持一下,谢谢qwq 玩转Atari-Pong游戏 Atari: 雅达利,最初是一家游戏公司,旗下有超过200款游戏,不过已经破产.在强化学习中,Atari游戏是 ...

  6. 强化学习入门教程(附学习大纲)

    零基础,想要入门或从事强化学习研究的同学有福了! CSDN学院特邀资深讲师为大家分享<强化学习深入浅出完全教程>从零基础开始入门强化学习,在教学的过程中,配合   具体案例.代码演示 , ...

  7. CNTK与深度强化学习笔记: Cart Pole游戏示例

    CNTK与深度强化学习笔记之二: Cart Pole游戏示例 前言 前面一篇文章,CNTK与深度强化学习笔记之一: 环境搭建和基本概念,非常概要的介绍了CNTK,深度强化学习和DQN的一些基本概念.这 ...

  8. 强化学习-入门教程(完整版)

    文章目录 learning route 强化学习和监督学习.无监督学习的区别 强化学习 RL解决什么问题 RL如何解决问题 实例 实例视频 openAI and DeepMind 基础 马尔科夫 时序 ...

  9. 基于强化学习开发人机对弈五子棋游戏

    强化学习主要包括状态空间.价值函数.状态转移三个部分,通过状态之间的转移来得到每个状态的价值,强化学习的目标是使得总价值达到最大.注意,与监督学习不同的是,监督学习通常需要大量的样本来获得有价值的信息 ...

最新文章

  1. 第1关:实现一个顺序存储的队列
  2. 医疗项目 开源_医疗保健受开源影响最大的行业之一
  3. 【挨踢人物传】tao61:做一个许三多式的IT攻城狮(第2期)
  4. 摆脱某某助手,使用无线投屏功能共享安卓屏幕到PC
  5. java ts视频文件转mp4格式在线求助
  6. 关于DSP的中断操作
  7. 微信小程序没用声音【audio组件】
  8. C#打印pdf遇到的问题
  9. python ipad协议_python – 实现AirDrop协议
  10. 计算机u盘打不开怎么办,电脑*u盘打不开怎么办
  11. java中正则表达式校验日期,1999-01-01 ,1991\01\01,-分割和\分割两种形式
  12. linux命令:xxd读取二进制文件
  13. (转)四旋翼飞行器基本知识
  14. Telephony之TelephonyManager(原)
  15. 【巨人的肩膀上制造世界】——1——Unity3D实用插件之地形插件Gaia,高质高效搭建你的地形,全中文教程!
  16. HEVC区域划分Slice Tile CTU CU PU TU
  17. 危险的外围设备:Windows和Linux系统的计算机内部安全隐患研究
  18. GBDT MART CART
  19. 可乐瓶游戏c语言,中班协调性体育游戏—玩可乐瓶
  20. oracle11如何生成aw r,(Oracle)自定义调用AWRamp;ADDM

热门文章

  1. PHP类的概念定义及使用方法
  2. 身份证号详细验证的正则
  3. 2022年,我们为什么要学习C++?
  4. 3dsmax导入Autocad立体图问题
  5. Redis 三种启动方式
  6. 想知道如何把图片转表格?快来学这些方法
  7. elasticSearch修改数据
  8. Intel Optane(tm) Memory Pining
  9. H3C系列产品入门以及产品名英文所代表的意思
  10. sql之having用法