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

文章目录

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.0gym-retro==0.8.0stable-baselines3==1.7.0tensorboard==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安装。
conda install chardet -y
conda install tensorflow -y

项目文件结构

├───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
# 如果提示权限不够,执行:sudo chmod -R 777 ./street-fighter-ai/
# conda activate StreetFighterAI
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  -r requirements.txt
pip install -r requirements.txt
安装OpenGL库:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ffmpeg pyvirtualdisplay retro pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pyglet==1.5.11
sudo apt-get install python-opengl
sudo apt install xvfb
# 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 gym-retro==0.8.0stable-baselines3==1.7.0tensorboard==2.12.1

验证及调整gym环境:

先添加pycharm配置conda虚拟环境
强化学习笔记:Gym入门–从安装到第一个完整的代码示例
查看gym可用的环境:

import gym
from gym import envs
env_list = envs.registry.all()
env_ids = [env_item.id for env_item in env_list]
print('There are {0} envs in gym'.format(len(env_ids)))
env_ids

测试代码:

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')breaktime.sleep(0.1)# 环境结束
# env.close()

gym-retro 游戏文件夹

运行程序脚本定位 gym-retro 游戏文件夹位置
windows CMD:
cd … && python .\utils\print_game_lib_folder.py
unbuntu中:
python ./utils/print_game_lib_folder.py
/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 multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiversedeb 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 multiversedeb 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 multiversedeb 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 multiversedeb 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 multiversedeb 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.cnmirrors.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.rhkb.cn/news/14523.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebGoat8.2.2通关记录一(General、Injection)

安装与部署 # 安装 docker pull webgoat/goatandwolf # 启动 sudo docker run -d -p 6870:8888 -p 6869:8080 -p 6871:9090 webgoat/goatandwolf我下载webgoat版本经常无法自动启动webwolf&#xff0c;需要进入到容器命令函手动启动 docker exec -it -uroot fervent_carson b…

通关pikaqu靶场sql注入数字型(一)

目录 1.数字型注入 2.实战(通过pikachu平台) 3.sql代码原理 1.数字型注入 原理以及步骤和实战 SQL数字型注入是指攻击者通过在SQL语句中注入恶意数字型参数&#xff0c;从而利用程序漏洞获得对数据库的未经授权访问。 实现SQL数字型注入的过程通常包括以下几个步骤&#xff1…

【编程新时代】AI+编程,ChatGPT轻松完成MySql建表CURD操作!

1、向ChatGPT发送指令 你能帮我根据我提供的内容生成mysql建表语句吗&#xff1f;表注释: 学生基础字段:id,guid(varchar255),create_time,create_user_guid,update_time,update_user_guid,delete_time,delete_user_guid业务字段: 名称,性别,年龄要求:1. 表名称根据表注释翻译为…

你不问它不说:ChatGPT 创建的大部分代码都不安全

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 ChatGPT 是OpenAI 公司用于聊天机器人的大型语言模型&#xff0c;它生成的代码大部分都是不安全的&#xff0c;而且它虽然能够指出其缺点却无法提醒用户注意代码的不当之处。 就在学术界如…

ChatGPT需要怎样的芯片?

最近&#xff0c;以ChatGPT为首的生成类模型已经成为了人工智能的新热点&#xff0c;硅谷的微软、谷歌等都纷纷大举投资此类技术&#xff08;微软100亿美元入股ChatGPT背后的OpenAI&#xff0c;谷歌也于近日发布了自研的BARD模型&#xff09;&#xff0c;而在中国以百度等为代表…

芯片是如何为ChatGPT提供算力的?怪不得地球都容不下它了

关注公众号&#xff0c;发现CV技术之美 近日&#xff0c;ChatGPT因大规模封号及关闭Plus付费会员的申请引发大家热议。 有网友说这是因为计算资源不够了&#xff0c;已经不单是靠钱能解决得了的问题&#xff0c;地球上已经没有足够的算力来满足ChatGPT的运行需求了。 AI的发展真…

ChatGPT发展报告:原理、技术架构详解和产业未来(附下载)

今年12月1日&#xff0c;OpenAI推出人工智能聊天原型ChatGPT&#xff0c;再次赚足眼球&#xff0c;为AI界引发了类似AIGC让艺术家失业的大讨论。 据报道&#xff0c;ChatGPT在开放试用的短短几天&#xff0c;就吸引了超过 100 万互联网注册用户。并且社交网络流传出各种询问或…

【自然语言处理】【ChatGPT系列】FLAN:微调语言模型是Zero-Shot学习器

FLAN: 微调语言模型是Zero-Shot学习器 《Finetuned Language Models are Zero-shot Learners》 论文地址&#xff1a;https://arxiv.org/abs/2109.01652 相关博客 【自然语言处理】【大模型】BLOOM&#xff1a;一个176B参数且可开放获取的多语言模型 【自然语言处理】【大模型】…

chatglm微调

chatGML 看到 【【官方教程】ChatGLM-6B 微调&#xff1a;P-Tuning&#xff0c;LoRA&#xff0c;Full parameter】 【精准空降到 15:27】 https://www.bilibili.com/video/BV1fd4y1Z7Y5/?share_sourcecopy_web&vd_sourceaa8c13cff97f0454ee41e1f609a655f1&t927 记得看…

ChatGPT微调分类示例

我们将微调 ada 分类器以区分两种运动&#xff1a;棒球和曲棍球。 from sklearn.datasets import fetch_20newsgroups import pandas as pd import openaicategories [rec.sport.baseball, rec.sport.hockey] sports_dataset fetch_20newsgroups(subsettrain, shuffleTrue, …

45个 Cha​tGPT 常用插件说明

45个 ChatGPT 常用插件说明 ChatGPT常用的45个插件&#xff0c;以及它们用途说明&#xff1a; 1/ Slack&#xff1a;查询Slack信息 2/ Zapier&#xff1a;与5000应用&#xff0c;如Google Sheets和Docs进行交互。 3/ Expedia&#xff1a;在一个地方激活你的旅行计划 4/ Kla…

【.Net/C#之ChatGPT开发系列】四、ChatGPT多KEY动态轮询,自动删除无效KEY

ChatGPT是一种基于Token数量计费的语言模型&#xff0c;它可以生成高质量的文本。然而&#xff0c;每个新账号只有一个有限的初始配额&#xff0c;用完后就需要付费才能继续使用。为此&#xff0c;我们可能存在使用多KEY的情况&#xff0c;并在每个KEY达到额度上限后&#xff0…

1.3 - 操作系统 - firewalld防火墙iptables防火墙

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「订阅专栏」:此文章已录入专栏《网络安全入门到精通》 Linux防火墙 Frewalld1、常用操作2、开放/关闭服务3、开放/关闭端口4、IP访问端口规则5、安全域Iptables1、常用操作2、四表五链cent…

再见操作系统!ChatGPT和Windows直接在一起了

来源&#xff1a;水木学堂 二十世纪初&#xff0c;微软曾发起过一场“浏览器战争”&#xff0c;用 IE 4.0 成功打赢了浏览器市场份额超过 90% 以上的网景浏览器。当时&#xff0c;微软用的就是“将 IE 放在 Windows 98 ”这样的“禁忌武器”&#xff0c;还因此遭到了日后的反垄…

ChatGPT封杀潮,禁入学校,AI顶会特意改规则,LeCun:要不咱把小模型也禁了?...

2023 点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 计算机视觉研究院专栏 作者&#xff1a;Edison_G 狂欢之后&#xff0c;事情的走向开始进入封杀这一过程。 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 转自《机器之心》…

VPS(Linux)解决ChatGPT Access Denied(错误码1020)方法

本文参考了GitHub的一个开源项目&#xff0c;项目地址:https://github.com/fscarmen/warp 操作方法: 以下两个脚本二选一&#xff0c;部署完成后记得重启VPS VPS嵌套WARP后&#xff0c;建议开启BBR&#xff0c;能够有效降低延迟 WARP部署脚本: wget -N https://raw.githubu…

奶奶版ChatGPT炸了!背刺微软泄露Win11秘钥!

教坏一个大模型的成本实在太低了&#xff01; 大家都知道&#xff0c;ChatGPT本身可以制造“幻觉”&#xff0c;却也原来如此容易被“情感”所利用&#xff01;只要故事讲的好&#xff0c;让ChatGPT为你摘星星都没问题&#xff01;万万没想到&#xff0c;通过让ChatGPT扮演一个…

第一批因ChatGPT坐牢的人,已经上路了

大家好&#xff0c;我是 Jack。 ChatGPT 的火爆有目共睹&#xff0c;有人靠着它赚了第一桶金&#xff0c;也有人靠着它即将吃上第一顿牢饭。 任何一件东西的火爆&#xff0c;总会给一些聪明人带来机会。 艾尔登法环火的时候&#xff0c;一堆淘宝卖魂的&#xff1b;羊了个羊火…

机器学习--最小二乘法

补充&#xff1a; 一. 简介 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据&#xff0c;并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法…

java最后问面试官什么问题,大量教程

魔鬼面试官必问:ConcurrentHashMap 线程安全吗?但面对魔鬼面试官时,我们更在乎的是这些真的正确吗? 1 线程重用导致用户信息错乱生产环境中,有时获取到的用户信息是别人的。查看代码后 为方便观察问题,我们输出了这个Map一开始和最后的元素个数。 师兄大厂面试遇到面试官的Ka…