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

更新时间:2023-07-04 18:13:12 阅读: 评论:0

强化学习快餐教程(2)-atari游戏强化学习快餐教程(2) - atari游戏bathroom
不知道看了上节的内容,⼤家有没有找到让杆不倒的好算法。
现在我们晋阶⼀下,向世界上第⼀种⼤规模的游戏机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 = ()
for step in range(1000):
thisstep =1
status, reward, done, info = env.step(thisstep)
jpgname ='./pic-%d.jpg'% step
io.imsave(jpgname,status)
print(reward)
if done:
print('dead in %d steps'% step)
break
env.clo()
⼤家可以通过保存下来的pic-x.jpg来直观观察游戏的情况,⽐如我在第138步时,打中了⼀个5分的⼊侵者。
太空⼊侵者这个游戏的策略⽐起cartpole,需要分析图像,这个是不⾜。但是它也是有好处的,就是reward参数现在会把分数返回给我们。总算是分数处理上不需要搞图像分析了。
下⾯我来写个算法吧,以1/4的概率左右移动,另外3/4开⽕:
import gym
env = gym.make('SpaceInvaders-v0')
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 /4
result = state_pool[int(pos %(len(state_pool)))]
return result
el:
return1
for step in range(10000):
thisstep = policy(step)
print(thisstep)
status, reward, done, info = env.step(thisstep)
#print(reward)
how are you是什么意思if done:
print('dead in %d steps'% step)
break
env.clo()
内存版
如果图像分析做起来不⽅便的话,gym还为我们提供了RAM版的。就是将游戏机中的128个字节的内存信息提供给我们。
下⾯是的128个字节的例⼦:
[  0  7  0  68 241 162  34 183  68  13 124 255 255  50 255 255  0  36
63  63  63  63  63  63  82  0  23  43  35 117 180  0  36  63  63  63
63  63  63 110  0  23  1  60 126 126 126 126 255 255 255 195  60 126
126 126 126 255 255 255 195  60 126 126 126 126 255 255 255 195  0  0
violetta48  3 129  0  0  0  0  0  0 246 246  63  63 246 246  63  63  0
21  24  0  52  82 196 246  20  7  0 226  0  0  0  0  0  21  63
0 128 171  0 255  0 189  0  0  0  0  0  99 255  0  0 235 254
192 242]
输⼊的部分跟图像版是⼀样的,我们代码修改如下:
env = gym.make('SpaceInvaders-ram-v0')
status = ()
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 /4
result = state_pool[int(pos %(len(state_pool)))] return result
el:
return1
for step in range(10000):
thisstep = policy(step)
#print(thisstep)
status, reward, done, info = env.step(thisstep)少儿英语一对一好不好
#print(reward)
pdmif done:
print('dead in %d steps'% step)
break
env.clo()
breakout
下⾯我们再来⼀个弹球游戏。
弹球游戏的输⼊是4个值。
图⽚版的:
from skimage import io
env = gym.make('Breakout-v0')
status = ()
#print(status)
print(env.action_space)
tmall是什么意思def policy(step):
if step %2==0:
return2
el:
return3
for step in range(100):
thisstep = policy(step)
#print(thisstep)
status, reward, done, info = env.step(thisstep)
jpgname ='./pic-%d.jpg'% step
io.imsave(jpgname,status)
#print(reward)
if done:
print('dead in %d steps'% step)
break
env.clo()
RAM版的例⼦:
import gym
env = gym.make('Breakout-ram-v0')
status = ()
print(status)
print(env.action_space)hookup
def policy(step):
return step %4
for step in range(100):
thisstep = policy(step)
#print(thisstep)
status, reward, done, info = env.step(thisstep)
#print(reward)天府之国英语
if done:
print('dead in %d steps'% step)
break
env.clo()
RAM的初始值:
[ 63  63  63  63  63  63 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 192 192 192 192 192 192 255 255 255 255 255 255 255 255 255 255 255 255 255 240  0  0 255  0
0 240  0  5  0  0  6  0  70 182 134 198  22  38  54  70  88  6
146  0  8  0  0  0  0  0  0 241  0 242  0 242  25 241  5 242
0  0 255  0 228  0  0  0  0  0  0  0  0  0  0  0  0  0
8  0 255 255 255 255 255 255 255  0  0  5  0  0 186 214 117 246
219 242]

本文发布于:2023-07-04 18:13:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1078364.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:游戏   环境   图像   分数   有没有
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图