手把手带你调通第一个强化学习代码

364 阅读2分钟

Anaconda安装

Navigator | Anaconda 在这个网站上下载免费的Anaconda 下载好后,从开始菜单栏把应用程序拖到桌面上,开始使用

image.png

创建新环境

打开Anaconda Navigator

image.png

点击Environments

image.png

点击Create,创建一个新的环境

image.png

Python设为3.10.18

image.png

点击Create

开始跑代码

安装Jupyter,新环境默认没有 image.png

打开Jupyter,新建一个文档

image.png

将以下三段代码分别输入到Jupyter的单元格中,输入完按Ctrl+Enter运行(或者按Alt+Enter=运行+插入新单元格)

!pip install gym==0.26.2
!pip install pygame==2.3.0
!pip install numpy==1.23.5
!pip install matplotlib==3.5.3
# 在jupyter notebook里env.render看不到窗口
# 写一个helper类,用matplotlib刷新显示图像
# 初始化传入env,调用helper的render即可
from IPython import display # 导入display模块,用于在Jupyter Notebook中显示图像
import matplotlib
import matplotlib.pyplot as plt # 导入matplotlib库,用于绘制图像
%matplotlib inline

class GymHelper:
    def __init__(self, env, figsize = (3, 3)):
        self.env = env # 初始化Gym环境
        self.figsize = figsize # 初始化绘图窗口大小
        
        plt.figure(figsize = figsize) # 创建绘图窗口
        self.img = plt.imshow(env.render()) # 在绘图窗口中显示初始图像
    
    def render(self, title = None):
        image_data = self.env.render() # 获取当前环境图像渲染数据
        
        self.img.set_data(image_data) # 更新绘图窗口中的图像数据
        display.display(plt.gcf()) # 刷新显示
        display.clear_output(wait = True) # 有新图片时再清除绘图窗口原有图像
        if title: # 如果有标题,就显示标题
            plt.title(title)
# 导入gym库
import gym

# 创建CartPole环境,指定渲染模式为rgb_array,如果是在IDE中可以改为'human'
env = gym.make('CartPole-v1', render_mode='rgb_array')
# 重置环境
env.reset()
# 创建GymHelper
gym_helper = GymHelper(env)

# 循环N次
for i in range(10):
    gym_helper.render(title = str(i)) # 渲染环境
    action = env.action_space.sample() # 从动作空间中随机选取一个动作
    env.step(action) # 执行动作

# 关闭环境
env.close()

正常情况:image.png

输出0-9,共计10次小锤摆动图像,只要上面数字是9就说明调试成功。

笔者曾经犯的错误

  • Python版本太高——无法导入gym环境——改到3.10.9
  • Numpy版本太高——无法编译代码——改到1.23.5
  • matplotlib版本太高——代码能跑通,但是最后一次渲染不出来,视频是9次但是输出8次——改到3.5.3
  • 重新安装环境的时候发现Anaconda没反应——手动把文件夹的残留文件删掉——重新安装同名环境 但是你们只需要按我给的版本号安装,就没问题(应该吧)

祝大家顺利跑通!