机器学习:用ppo算法通关超级玛丽1
为什么是ppo?
ppo算法作为强化学习领域out of art的算法,如果你要学习强化学习的话 ppo会是你最常用的算法。openai早已把ppo 作为自己的默认算法,所以我希望你能认真学完ppo算法并为自己所用。
强化学习是什么?
简单来说 强化学习是一类通过不断与环境交互来学习如何达到设定目标的一类算法,比如走迷宫,传统的运筹学算法往往是通过遍历所有的点来完成路径规划,而强化学习则是实现一个anget,让这个 agent自己去随机探索路线,在探索的过程中学习如何走的更远并最终走到终点,这就是强化学习的思想。
R0 ppo玩超级玛丽1-1关的视频
R1 先来学习如何用代码实现随机动作play超级玛丽游戏(5 min)
本次学习需要的相关库如下。
- gym
- gym_super_mario_bros
- opencv-python
- spinup
- joblib
注意本次学习需要在GPU
环境中,所以进入DSW后,点击右侧的环境切换按钮,运行模式选择GPU
,如下图所示。
# 安装相关包
# 再次提醒:必须先切换环境为GPU
!pip install gym gym_super_mario_bros opencv-python spinup joblib --user
#导入实验需要的包
from nes_py.wrappers import JoypadSpace
import gym_super_mario_bros
from gym_super_mario_bros.actions import SIMPLE_MOVEMENT
#使用gym_super_mario_bros包函数创建游戏环境env
env = gym_super_mario_bros.make('SuperMarioBros-v0')
#指定环境为简单模式(动作简化,去除一些左上、左下等复杂动作)
env = JoypadSpace(env, SIMPLE_MOVEMENT)
#使用gym的wrapper函数对游戏视频进行录像(由于notebook不支持display,我们录像后播放观看)
from gym import wrappers
env = wrappers.Monitor(env,"./gym-results", force=True)
#执行5000个简单的向右随机操作
done = True #游戏结束标志
for step in range(5000):
if done:
#如果游戏结束则重置:
state = env.reset()
state, reward, done, info = env.step(env.action_space.sample())
# 关闭创建的游戏env
env.close()
# 通过网页播放出来刚才的运行实况
import io
import base64
from IPython.display import HTML
video = io.open('./gym-results/openaigym.video.%s.video000000.mp4' % env.file_infix, 'r+b').read()
encoded = base64.b64encode(video)
HTML(data='''
<video width="360" height="auto" alt="test" controls><source src="data:video/mp4;base64,{0}" type="video/mp4" /></video>'''
.format(encoded.decode('ascii')))