当前位置:   article > 正文

WINDOWS系统下PYMARL强化学习框架和SMAC环境安装及测试问题

smac环境


本文章主要为了来记录我在学习复现多智能体强化学习算法中遇到的问题。首先我看的是基于值分解的强化学习算法,VDN,QMIX,QTRANS。为了更好理解和学习算法,我试着跑了基于PYMARL框架和SMAC环境中的一些算法,中间遇到不少问题,同时代码能力也不太好,所以记录下来,方便查看和学习。

SMAC环境安装

SMAC是WhiRL基于暴雪星际争霸II RTS游戏的协作多智能体强化学习(MARL)领域的研究环境。SMAC利用暴雪的StarCraft II机器学习API和DeepMind的PySC2为自主代理提供了一个方便的界面,以便与StarCraft II进行交互,获取观察和执行操作。与PySC2不同,SMAC专注于分散的微观管理场景,其中游戏的每个单元都由单独的RL代理控制。

1.SMAC安装

SMAC官方地址

安装前要保证有anaconda和pycharm等环境,smac环境运行也需要各种包的支持,具体安装要求看官方的文件

官方安装SMAC的方式在readme文件中有详细解释,可以自行查阅。(嫌麻烦可以看我这个,哈哈哈)首先我们需要下载git工具,记得把git加入环境变量,然后再进行操作,(好像也可以把文件放到本地再安装,但是我好像有问题,没成功)

  1. 运用如下命令行直接安装:

    pip install git+https://github.com/oxwhirl/smac.git

    这个好像安装有点慢,我也没弄成

  2. 用git将文件克隆到本地再安装

    git clone https://github.com/oxwhirl/smac.git
    pip install -e smac/

除了安装,smac环境还支持扩展,具体的东西我也没仔细看。

2.Installing StarCraft

在Windows系统下,直接去官网安装星际争霸2就可以了,记得把游戏加入环境变量中就可以。在Linux的系统下就需要查看文档自行解决啦。

3.SMAC maps

SMAC由许多带有预配置地图的战斗场景组成。在使用 SMAC 之前,需要将这些地图下载到星际争霸 II 的地图目录中。

下载 SMAC 地图并将其解压缩到您的 $SC 2PATH/地图目录。如果您通过 git 安装了 SMAC,只需将SMAC_Maps目录从 smac/env/starcraft2/maps/ 复制到 $SC 2PATH/Maps 目录中即可(如果没有Maps目录需要自己创建一个)。地图下载SMAC maps

下载成功后,可以通过如下命令查看地图列表(在smac目录下)

python -m smac.bin.map_list

查看的结果应该是这样:
maplist中依次是地图名字,智能体数,敌方数量,以及对战最大的时间步
maplist中依次是地图名字,智能体数,敌方数量,以及对战最长的时间步

4.Testing SMAC

安装完smac后,需要进行测试确保安装成功,测试命令如下:

python -m smac.examples.random_agents

结果应该是能把星际争霸客户端起起来,并生成如下的结果:

测试smac环境,运行了10个episode
做到了这里基本的星际争霸强化学习环境就搭好了,后面就是搭进行训练的框架

PYMARL框架实现和调试

GitHub链接PYMARL框架

PyMARL is WhiRL’s framework for deep multi-agent reinforcement learning and includes implementations of the following algorithms:
QMIX: QMIX: Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning
COMA: Counterfactual Multi-Agent Policy Gradients
VDN: Value-Decomposition Networks For Cooperative Multi-Agent Learning
IQL: Independent Q-Learning
QTRAN: QTRAN: Learning to Factorize with Transformation for Cooperative Multi-Agent Reinforcement Learning
PyMARL is written in PyTorch and uses SMAC as its environment.

1.创建PYMARL conda 环境

conda create _n pymarl python==3.7 -y
conda activate pymarl

安装需要的包,pymarl的代码中有一个requirements.txt的文件详细说明了各个包的版本,直接安装就好了。(注意要进入pymarl所在的路径)自己下的话,就不能保证包的版本等问题。

pip install -r requirements.txt

装好需要的各种包之后就可以开始调试并运行代码了。

2.调试PYMARL代码

运行pymarl上的实验可以在anaconda的cmd里用以下的默认代码(如果不是在pymarl的路径下,main.py要加上文件所在路径)

python3 src/main.py --config=qmix --env-config=sc2 with env_args.map_name=2s3z

不出意外的话,就会出意外了,基本是跑不起来。首先的一个问题是yaml文件加载的问题,可能由于这个环境写的时间比较久,yaml需要换其他的用法,具体要上网查找。在main文件中加载default.yaml文件需要用safe_load函数,问题就是f的输入格式和加载格式不一致需要在字符串和字典转换

config_dict = yaml.safe_load(f)

解决这个问题之后应该是能把config导入程序中,但是依然有错误。在sacred包中,需要在环境中找到这个包,并进入dependencies.py文件,在C:\Users.conda\envs\pymarl\Lib\site-packages\sacred\dependencies.py下。需要在第422行加上

os.environ[“GIT_PYTHON_REFRESH”] = “quiet”
这里引号格式会变,需要自己调整一下

原因好像是git但是也没搞清楚具体问题,反正git也不影响框架,所以没有管它。
在这里插入图片描述
弄完这两步应该是没有太大的问题了,应该能起来客户端,并把实验跑起来了。但是用命令行,我不是很习惯,在windows下是可以在pycharm里跑起来的,只需要把参数的输入位置改一改就好

params = deepcopy([ ‘main.py’,
‘–config=qmix’,
‘–env-config=sc2’,
‘with’,
‘env_args.map_name=2s3z’
])

在命令中需要注意with是一个单独的参数,在with后可以调整你想要的各种参数

3. 运行pymarl实验并保存和查看回放

在运行实验时,如果对参数没有改变,实验运行的就是默认的实验参数,对实验的算法和环境都没有改变,具体的实验参数配置在src/config文件配置里。–config配置的文件在src/config/algs中是对算法的配置,–env_args相对应的配置文件在src/config/envs中。在algs中可以选用不同的算法,并改变算法的参数配置,在envs中可以选择不同的实验环境和不同的奖励配置。
重点的参数解释:

  • t_max环境运行的总步数
  • save_model是否保存模型,save_model_interval保存模型间隔
  • local_results_path模型结果存放位置,checkpoint_path模型加载位置
  • save_replay保存加载后的模型测试结果回放

保存模型

  • 可以通过设置 save_model = True(默认情况下设置为 False)将学习的模型保存到磁盘。
  • 保存模型的频率可以使用save_model_interval配置进行调整。
  • 需要设置 local_results_path ,模型将保存在设置的结果目录中名为 models 的文件夹下。
  • 整个实验保存的模型包含了每次运行对应的目录,每个模型都位于一个文件夹中,对应于自开始学习过程以来经过的时间步长数。

加载模型

  • 通过checkpoint_path参数的配置,程序会加载path下的模型,会接着对应的时间步继续学习。

观看StarCraft2的回放

save_replay选项允许保存使用checkpoint_path加载的模型的回放。成功加载模型后,将在测试模式下运行test_nepisode集数,并在 .SC2重播文件保存在星际争霸II的重播目录中。如果希望保存重播,请确保使用runner=episode。保存的重播文件的名称以给定的 env_args.save_replay_prefix 开头(如果为空,则为 map_name),后跟当前时间戳,如 3m_2022-11-10-08-57-39

总结

基本上完成上面的步骤能把pymarl的框架跑起来了,后面就是仔细了解pymarl框架的代码了,在这个过程中也参考了不少博主和网上的资料就不一一列举了,后面会继续更新PYMARL的框架结构和对算法的改进实验,以及连续的多智能体强化学习算法epymarl框架。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/85772
推荐阅读
相关标签
  

闽ICP备14008679号