强化学习训练营-Task1-实战PPO通关超级玛丽-20240507
·
文章目录
为什么是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()
注:此处主要对如何在代码中运行游戏有个感知,每个env相关的函数参数意义详见R3.2章节环境讲解部分
R1.1 通过网页播放出来刚才的运行实况
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')))
R1.2 随机动作play超级玛丽的完整代码
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 = gym_super_mario_bros.make('SuperMarioBros-v0')
env = JoypadSpace(env, SIMPLE_MOVEMENT)
from gym import wrappers
env = wrappers.Monitor(env,"./gym-results", force=True)
done = True
for step in range(5000):
if done:
state = env.reset()
state, reward, done, info = env.step(env.action_space.sample())
# env.render()
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')))
番外篇,用键盘玩超级玛丽:
gym_super_mario_bros -e -m <human or random>
R2 完整代码通关play超级玛丽(10 min)
#下载我提前训练好的权重和代码
!git clone https://github.com/gaoxiaos/Supermariobros-PPO-pytorch.git
!cd auper_ppo
#运行play测试程序
!python test.py
#查看运行录像
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')))
参考来源
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)