本机复现一个有意思的项目-基于深度强化学习训练了一个用于通关《街头霸王·二:冠军特别版》(Street Fighter II Special Champion Edition)关底 BOSS 的智能 AI 代理。
项目仓库地址:SFighterAI
本项目基于深度强化学习训练了一个用于通关《街头霸王·二:冠军特别版》(Street Fighter II Special Champion Edition)关底 BOSS 的智能 AI 代理。该智能代理完全基于游戏画面(RGB 像素值)进行决策,在该项目给定存档中最后一关的第一轮对局可以取得 100% 胜率(实际上出现了“过拟合”现象,详见运行测试部分的讨论)。
采用virtualbox7.0+ubuntu-22.04.2-desktop-amd64官方版本,Python3.8.10,环境采用conda 23.3.1版。
py文件调试采用jupyter notebook(根据个人使用习惯,非必须).
AI代理(完全采用原作者方案):
gym==0.21.0
gym-retro==0.8.0
stable-baselines3==1.7.0
tensorboard==2.12.1
初期尝试windows11系统下测试不成功,
需注意
1.ubuntu环境下默认安装的gcc在conda23.3.1环境下存在兼容问题,Python环境中需更新为conda平台兼容的gcc,使用命令更新:
bash conda install -c conda-forge gcc
2.路径问题
测试文件test.py中的路径需要实际项目路径进行调整。
涉及文件:./main/test.py
3.需补充的包: chardet 和 tensorflow
为避免兼容性问题,建议conda install安装。c
onda install chardet conda install tensorflow
├───data
├───main
│ ├───logs
│ ├───trained_models
│ └───scripts
├───utils
│ └───scripts
游戏配置文件存储在 data/
文件夹下;项目的主要代码文件夹为 main/
。其中,logs/
中包含了记录训练过程的终端文本和数据曲线(使用 Tensorboard 查看);trained_models/
中包含了不同阶段的模型权重文件,可以用于在 test.py
中运行测试,观看智能代理在不同训练阶段学习到的对战策略的效果。
本项目基于 Python 编程语言,主要使用了 OpenAI Gym Retro、Stable-Baselines3 等标准代码库。程序运行使用的 Python 版本为 3.8.10,建议使用 Anaconda 配置 Python 环境。原作者采用Windows 11 系统配置测试通过,复现时屡次尝试也不能实现,出现各种奇怪错误,遂改为尝试unbuntu系统实现,已成功复现。
VirtualBox、conda安装及国内源更换、jupyter notebook安装调试详细过程可参考博文:
以下为过程中用到的控制台/终端(Console/Terminal/Shell)主要指令记录。
# 更新conda
# conda update -n base -c defaults conda
conda update --name base conda
# 创建 conda 环境,将其命名为 StreetFighterAI,Python 版本 3.8.10
conda create -n StreetFighterAI python=3.8.10
conda activate StreetFighterAI
# conda deactivate
# conda env remove -n StreetFighterAI
# 安装 Python 代码库
g:&&cd G:\bsp\street-fighter-ai\main
# bash Anaconda3-5.3.1-Linux-x86_64.sh
# conda info
# cd [项目上级文件夹]/street-fighter-ai/main
# conda activate StreetFighterAI
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
pip install -r requirements.txt
# wheels路径:c:\users\86131\appdata\local\pip\cache\wheels
# pip install setuptools==57.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# requirements.txt:
gym==0.21.0 0.15.6
gym-retro==0.8.0
stable-baselines3==1.7.0
tensorboard==2.12.1
先添加pycharm配置conda虚拟环境
强化学习笔记:Gym入门–从安装到第一个完整的代码示例
测试代码:
import gym
import time
# 生成环境
env = gym.make('CartPole-v1', render_mode='human')
# 环境初始化
state = env.reset()
# 循环交互
while True:
# 渲染画面
# env.render()
# 从动作空间随机获取一个动作
action = env.action_space.sample()
# agent与环境进行一步交互
state, reward, terminated, truncated, info = env.step(action)
print('state = {0}; reward = {1}'.format(state, reward))
# 判断当前episode 是否完成
if terminated:
print('terminated')
break
time.sleep(0.1)
# 环境结束
# env.close()
运行程序脚本定位 gym-retro 游戏文件夹位置
windows CMD:
cd … && python .\utils\print_game_lib_folder.py
unbuntu中:
/home/testlinux/anaconda3/envs/StreetFighterAI/lib/python3.8/site-packages/retro/data/stable/StreetFighterIISpecialChampionEdition-Genesis
控制台输出文件夹路径后,将其复制到文件资源管理器中,跳转到对应路径。该文件夹为 gym-retro 下《街头霸王·二:冠军特别版》的游戏数据文件夹,其中包含了游戏 ROM 文件和数据配置文件。将本项目中 data/
文件夹下的 Champion.Level12.RyuVsBison.state
、data.json
、metadata.json
、scenario.json
四个文件复制到该文件夹中,覆盖原有文件(可能需要提供管理员权限)。其中 .state
文件为《街头霸王·二:冠军特别版》难度四最后一关开局的游戏存档,三个 .json
文件为 gym-retro 配置文件,存储了游戏信息的内存地址(本项目只用到了其中的 [agent_hp] 与 [enemey_hp],用于实时读取游戏人物的生命值)。
运行程序还需要《街头霸王·二:冠军特别版》(Street Fighter II Special Champion Edition)的游戏 ROM 文件(可以理解为游戏程序本身)。gym-retro 本身不提供游戏的 ROM 文件,需要自行通过合法途径获得。可以参考该链接。
通过合法途径自行获得游戏 ROM 文件后,将其复制到前述 gym-retro 的游戏数据文件夹下,并重命名为rom.md
。至此,环境配置准备工作完成。
注:如果想要录制智能代理的对战视频,还需要安装 ffmpeg。
conda install ffmpeg
详细错误内容: [W NNPACK.cpp:64] Could not initialize NNPACK! Reason: Unsupported hardware.
参考:原文链接
这个错误通常是由于您的计算机不支持NNPACK库所需的硬件指令集引起的。NNPACK是一种高效的计算机视觉库,用于优化神经网络的计算。
如果您的计算机不支持NNPACK所需的指令集,您可以尝试使用其他计算机视觉库,例如OpenCV或PyTorch。
如果您想继续使用NNPACK,请确保您的计算机满足NNPACK的要求。NNPACK要求计算机支持AVX2指令集和FMA指令。您可以检查您的CPU是否支持这些指令集,以确定是否可以使用NNPACK。
无需解决,不影响项目运行,只是运算速度受限,尤其是虚拟机条件下,满足该条件难度较大。
ubuntu环境下默认安装的gcc在conda23.3.1环境下存在兼容问题,Python环境中需更新为conda平台兼容的gcc,使用命令更新:
conda install -c conda-forge gcc
环境配置完成后,可以在 main/
文件夹下运行 test.py
进行测试,实际体验智能代理在不同训练阶段的表现。
cd G:\bsp\street-fighter-ai\main
# cd ~/street-fighter-ai/main
# cd [项目上级文件夹]/street-fighter-ai/main
python test.py
模型权重文件存储在 main/trained_models/
文件夹下。其中 ppo_ryu_2500000_steps_updated.zip
是 test.py
默认使用的模型文件,该模型泛化性较好,有能力打通《街头霸王·二:冠军特别版》的最后一关。如果想要观看其他模型的表现,可以将 test.py
中的 model_path
变量修改为其他模型文件的路径。关于各训练阶段模型实际表现的观察描述如下:
如果想要训练自己的模型,可以在 main/
文件夹下运行 train.py
。
cd [项目上级文件夹]/street-fighter-ai/main
python train.py
项目中包含了训练过程的 Tensorboard 曲线图,可以使用 Tensorboard 查看其中的详细数据。推荐使用 VSCode 集成的 Tensorboard 插件直接查看(我爱你 VSCode!)。以下列出传统查看方法:
cd [项目上级文件夹]/street-fighter-ai/main
tensorboard --logdir=logs/
在浏览器中打开 Tensorboard 服务默认地址 http://localhost:6006/
,即可查看训练过程的交互式曲线图。
本项目使用了 OpenAI Gym Retro、Stable-Baselines3 等开源代码库。感谢各位程序工作者对开源社区的贡献!
特别列出以下两篇对本项目启发作用很大的论文:
[1] DIAMBRA Arena A New Reinforcement Learning Platform for Research and Experimentation
这篇论文中关于格斗游戏深度强化学习模型超参数设置的经验总结非常有价值,对本项目的训练过程有很大的帮助。
[2] Mitigating Cowardice for Reinforcement Learning
这篇论文中提出的“惩罚衰减”机制有效地解决了本次训练中智能代理在游戏中的“怯懈”(始终回避对手,不敢尝试攻击)问题,帮助非常大。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份
sudo gedit /etc/apt/sources.list #修改
# 阿里云源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# 清华大学源
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
执行更新:sudo apt-get update
mkdir ~/.pip
创建conf文件
sudo gedit ~/.pip/pip.conf
写入内容:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
index-index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host =
pypi.tuna.tsinghua.edu.cn
mirrors.aliyun.com
阿里云 [http://mirrors.aliyun.com/pypi/simple/]
中国科技大学 [https://pypi.mirrors.ustc.edu.cn/simple/]
豆瓣(douban) [http://pypi.douban.com/simple/]
清华大学 [https://pypi.tuna.tsinghua.edu.cn/simple/]
中国科学技术大学 [http://pypi.mirrors.ustc.edu.cn/simple/]
华中理工大学:[http://pypi.hustunique.com/]
山东理工大学:[http://pypi.sdutlinux.org/]
1、创建文件夹
win+R 打开用户目录%HOMEPATH%,在此目录下创建 pip 文件夹,在 pip 目录下创建 pip.ini 文件
2、拷贝进以下内容
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
3、参考 原文链接:https://blog.csdn.net/weixin_39715012/article/details/120635192
1.2 安装jupyter notebook
依次执行四条命令,第三条命令为设置密码
conda install jupyter notebook
jupyter notebook --generate-config
jupyter notebook password
cd ~/.jupyter/
password:123
[NotebookPasswordApp] Wrote hashed password to /home/testlinux/.jupyter/jupyter_notebook_config.json
编辑jupyter_notebook_config.py
gedit jupyter_notebook_config.py
conda install ipykernel
python -m ipykernel install --user --name StreetFighterAI --display-name StreetFighterAI
补充资料:在ubuntu服务器中搭建jupyter notebook,并安装numpy,scipy, matplotlibm, pandas, sklearn///tensorflow
Ubuntu安装Anaconda详细步骤(Ubuntu21.10,Anaconda3)
ubuntu Anaconda的安装、镜像源更改和python虚拟环境的配置细节
Anaconda使用入门
conda create -n
基于python3.6创建一个名为py36的环境
conda create --name py36 python=3.6
2、激活环境:conda activate
3、退出环境:conda deactivate
4、查看已安装的环境信息:conda env list
5、复制环境:conda create -n
通过克隆py36来创建一个称为py36_bak的副本:
conda create -n py36_bak --clone py36
1
2
6、删除环境:conda env remove -n
7、保存环境信息到environment.yaml文件中:conda env export > environment.yaml
8、通过environment.yaml环境文件创建文件: conda env create -f environment.yaml
9、查看已安装的包:conda list
10、搜索包:conda search
11、安装包:conda install
12、卸载包:conda remove
1、删除Anaconda3文件夹:
rm -rf ~/anaconda3
2、删除相关隐藏文件:
rm -rf ~/.condarc ~/.conda ~/.continuum
3、在环境变量中删除anaconda:
打开 ~/.bashrc (例如: vim ~/.bashrc),找到与conda 相关的,注释掉即可:
4、更新环境变量:
source ~/.bashrc