基于深度强化学习训练《街头霸王·二:冠军特别版》通关关底 BOSS -智能 AI 代理项目上手

news2024/11/15 12:47:35

文章目录

SFighterAI项目简介

本机复现一个有意思的项目-基于深度强化学习训练了一个用于通关《街头霸王·二:冠军特别版》(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

验证及调整gym环境:

先添加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 游戏文件夹

运行程序脚本定位 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.statedata.jsonmetadata.jsonscenario.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

错误提示及解决

Could not initialize NNPACK!

详细错误内容: [W NNPACK.cpp:64] Could not initialize NNPACK! Reason: Unsupported hardware.
参考:原文链接
这个错误通常是由于您的计算机不支持NNPACK库所需的硬件指令集引起的。NNPACK是一种高效的计算机视觉库,用于优化神经网络的计算。
如果您的计算机不支持NNPACK所需的指令集,您可以尝试使用其他计算机视觉库,例如OpenCV或PyTorch。
如果您想继续使用NNPACK,请确保您的计算机满足NNPACK的要求。NNPACK要求计算机支持AVX2指令集和FMA指令。您可以检查您的CPU是否支持这些指令集,以确定是否可以使用NNPACK。
无需解决,不影响项目运行,只是运算速度受限,尤其是虚拟机条件下,满足该条件难度较大。

错误提示:libGL error: MESA-LOADER: failed to open swrast

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.ziptest.py 默认使用的模型文件,该模型泛化性较好,有能力打通《街头霸王·二:冠军特别版》的最后一关。如果想要观看其他模型的表现,可以将 test.py 中的 model_path 变量修改为其他模型文件的路径。关于各训练阶段模型实际表现的观察描述如下:

  • ppo_ryu_2000000_steps_updated: 刚开始出现过拟合现象,具有泛化能力但实力不太强。
  • ppo_ryu_2500000_steps_updated: 接近最终过拟合状态,无法在最后一关第一轮中完全占据主导地位,但具有一定泛化能力。在最后一关三轮中有较高的获胜机会。
  • ppo_ryu_3000000_steps_updated: 接近最终过拟合状态,几乎可以在最后一关第一轮中占据主导地位,胜率接近 100%,但泛化能力较弱。
  • ppo_ryu_7000000_steps_updated: 过拟合,在最后一关第一轮中完全占据主导地位,胜率 100%,但泛化能力差。
    在这里插入图片描述

训练模型

如果想要训练自己的模型,可以在 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/ ,即可查看训练过程的交互式曲线图。

Tips:更换系统源

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

Tips:更换pip源

主要命令

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/]

windows下更改pip源

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

jupyter notebook

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

Anaconda操作指南

补充资料:在ubuntu服务器中搭建jupyter notebook,并安装numpy,scipy, matplotlibm, pandas, sklearn///tensorflow

Ubuntu安装Anaconda详细步骤(Ubuntu21.10,Anaconda3)
ubuntu Anaconda的安装、镜像源更改和python虚拟环境的配置细节
Anaconda使用入门

1、创建环境

conda create -n <env_name>

基于python3.6创建一个名为py36的环境
conda create --name py36 python=3.6

2、激活环境:conda activate <env_name>
3、退出环境:conda deactivate <env_name>
4、查看已安装的环境信息:conda env list
5、复制环境:conda create -n <new_env_name> --clone <origin_env_name>

复制和删除环境

通过克隆py36来创建一个称为py36_bak的副本:
conda create -n py36_bak --clone py36
1
2
6、删除环境:conda env remove -n <env_name>
7、保存环境信息到environment.yaml文件中:conda env export > environment.yaml
8、通过environment.yaml环境文件创建文件: conda env create -f environment.yaml
9、查看已安装的包:conda list
10、搜索包:conda search <package_name1>
11、安装包:conda install <package_name1> <package_name2>
12、卸载包:conda remove <package_name>

Anaconda卸载:

1、删除Anaconda3文件夹:

rm -rf ~/anaconda3

2、删除相关隐藏文件:

rm -rf ~/.condarc ~/.conda ~/.continuum

3、在环境变量中删除anaconda:
打开 ~/.bashrc (例如: vim ~/.bashrc),找到与conda 相关的,注释掉即可:

4、更新环境变量:

source ~/.bashrc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Redis设计与开发》读书笔记

《Redis设计与实现》读书笔记 简单动态字符串 SDS的定义 结构&#xff1a; buf数组&#xff1a;用于保存字符串 len属性&#xff1a;记录SDS中保存字符串的长度 free属性&#xff1a;记录buf中未使用字节数量 遵循C字符串以空字符串结尾的惯例&#xff0c;保存空字符串的…

默认成员函数之构造函数,构造函数的特点,创建,调用与对象创建的一语双关,默认构造函数等

内置类型与自定义类型 C当中的类型的话分为两类&#xff1a;一种就是内置类型/基本类型&#xff0c;就是c语言自带的那些类型基本类型&#xff0c;如int, char, double, 指针&#xff08;任何类型的指针&#xff0c;因为指针就是地址嘛&#xff09;等等&#xff1b;还有就是自…

某安全对抗行走APP逆向分析

1.定位url 抓包: https://api5.xxxx.com/xxx-rest-service/message/fun_getnearby 看一下参数: opentime:时间戳 reqdata:base64编码 sign 未知,需要解密 # -*- coding: utf-8 -*- # @Author : Codeooo # @Time : 2022-10-14import frida, sysm199a = "&qu…

learn_C_deep_5 (语句和表达式的概念、if语句的多种语法结构、C语言有没有布尔类型、“零值”的比较)

目录 语句和表达式的概念 if语句的多种语法结构 注释的便捷方法&#xff08;环境vs&#xff09; if语句执行的过程 逻辑与&& 逻辑或|| 运算关系的顺序 ​编辑 C语言有没有布尔类型 C99标准 sizeof(bool)的值为多少&#xff1f; _Bool原码 BOOL、TRUE、…

IT_开发提测标准规范

背景 公司 IT 规模小&#xff0c;开发提测质量差&#xff0c;流程不规范&#xff0c;导致测试任务重&#xff0c;于是推行 &#xff1a;IT_开发提测标准规范&#xff0c;正文如下&#xff1b;拟定开发提测标准规范后&#xff0c;测试与项目经理内部评审后&#xff0c;发至IT群…

低相位噪声链路调试分析

上图为原始状态,与项目结项评审指标差不多,确实存在几个噪声比较差的点。 频率分布大约在几Hz,20K,50K左右。 由于测试时由子卡进行输出,采用直接进行直接输出,以看出,明显的尖峰已经没有了,只剩下20K左右的尖峰,但是总体来说,效果很差,可能时单端输出的问题。试…

【SVN已解决】svn下载成功图标不显示解决方法

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

【小技巧】word文档编辑技巧(一)

文章目录 一、显示显示导航显示所有字符 二、格式格式-三级目录格式-文本格式-图格式-表格式-公式格式-参考文献 三、小技巧交叉引用连续交叉引用表/图目录等自动更新分节符设置页眉/页码word转pdf带导航 一、显示 显示导航 开启导航&#xff1a;视图->显示框->导航窗格…

《春琴抄》庭有枇杷树,今已亭亭如盖矣~

《春琴抄》庭有枇杷树&#xff0c;今已亭亭如盖矣~ 谷崎润一郎&#xff08;1886年7月24日&#xff5e;1965年7月30日&#xff09;&#xff0c;日本近代小说家&#xff0c;唯美派文学主要代表人物之一&#xff0c;《源氏物语》现代文的译者。 代表作有《刺青》《春琴抄》《细雪》…

客户体验的重要性和企业发展的紧密联系

近年来&#xff0c;随着企业数字化转型的加速&#xff0c;客户服务的意义越来越被人们所重视。客户服务的质量不仅直接影响到客户满意度和忠诚度&#xff0c;而且会间接影响到企业的品牌口碑和市场竞争力。然而&#xff0c;目前市面上的很多企业帮助中心搭建平台&#xff0c;可…

【油猴脚本】ChatGPT 智能 Prompts 提示词助手

chatGPT 插件脚本 中文 Prompt 训练对话框 ChatGPT 智能 Prompts 可以为你带来更好的使用体验助你训练好用的ChatGPT&#xff1a;添加快捷指令&#xff08;prompts&#xff09;新增&#xff1a;论文专家角色、支持自动发送、固定智能助手…还有更多需求可以到仓库Issues里发起…

Qt Quick - ScrollView

Qt Quick - ScrollView 使用总结 一、概述二、使用四、分级五、滚动条控制六、触摸vs.鼠标交互七、美化 一、概述 ScrollView 为用户定义的内容提供滚动功能。类似QScrollArea 的功能。 二、使用 第一个例子展示了ScrollView的最简单用法。 ScrollView {width: 200height: …

本周大新闻|MR头显或成WWDC23重头戏;PICO 4 Pro本周开售

本周XR大新闻&#xff0c;AR方面&#xff0c;彭博社Mark Gurman确认XR头显将成为WWDC重头戏&#xff0c;同时将兼容iPad应用&#xff1b;Inprentus将发布用于AR光波导方案的闪耀光栅工艺&#xff1b;富采展示0.12英寸蓝光Micro LED&#xff1b;锐思华创公布多层光波导PGU&#…

大数据技术之Kafka集成

一、集成Flume 1.1 Flume生产者 &#xff08;1&#xff09;启动Kafka集群 zkServer.sh startnohup kafka-server-start.sh /opt/soft/kafka212/config/server.properties & &#xff08;2&#xff09;启动Kafka消费者 kafka-console-consumer.sh --bootstrap-server 192…

Django框架之定义模型和表迁移

django3.0 定义表模型并通过定义好的模型实现源代码创建数据表。 概述 模型是一个用于表示数据的Python类&#xff0c;包含基本的数据字段和行为。 通常一个模型就代表一张数据库表。 模型继承自django.db.models.Model&#xff0c;模型的每一个属性代表一个数据的字段。 定…

SLAM面试笔记(2) - ORB-SLAM2

目录 1 四叉树实现特征点均匀化分布 2 Bow词袋模型 2.1 什么是词袋&#xff1f; 2.2 词袋在ORB-SLAM2中的作用 2.3 离线训练字典树流程 3 ORB-SLAM的跟踪方法 3.1 恒速模型跟踪 3.2 重定位跟踪 3.3 参考关键帧跟踪 持续更新中... 1 四叉树实现特征点均匀化分布 参考…

SpringBoot实战(十六) 集成Hystrix

目录 一、简介1.Hystrix 的定义&#xff1f;2.Hystrix 的用处&#xff1f;3.Hystrix 的三种状态&#xff1f;4.Hystrix 解决什么问题&#xff1f;5.Hystrix 的设计原理&#xff1f;6.Hystrix 的实现原理&#xff1f; 二、集成 Hystrix1.Maven 依赖2.application.yml简易版&…

【CSS3】CSS3 伪元素选择器 ( 伪元素选择器语法简介 | 伪元素选择器权重计算 | 代码示例 )

文章目录 一、CSS3 伪元素选择器二、CSS3 伪元素选择器权重二、代码示例 一、CSS3 伪元素选择器 CSS3 伪元素选择器 : ::before 选择符 : 在 指定的标签元素内部的 前面 插入内容 ;::after 选择符 : 在指定的标签元素内部的 后面 插入内容 ; CSS3 伪元素选择器注意事项 : con…

QT里的网络通信简介

QTcpSocket类简介 QTcpSocket类提供了一个TCP套接字。TCP&#xff08;传输控制协议&#xff09;是一种可靠的、面向流的、面向连接的传输协议。它特别适合数据的连续传输。QTcpSocket是QAbstractSocket的一个子类&#xff0c;它允许您建立TCP连接和传输数据流。有关详细信息&a…

连接器信号完整性仿真教程 二

在连接器信号完整性仿真教程一中Step by Step演示了如何进行连接器信号完整性仿真&#xff0c;看完这片博文后应该可以做类似产品的仿真。如果说&#xff0c;看了这篇博文就学会了连接器信号完整性仿真&#xff0c;那就有点过了。有人也许会说信号完整性仿真难学&#xff0c;不…