赞
踩
SMAC是WhiRL基于暴雪星际争霸II RTS游戏的协作多智能体强化学习(MARL)领域的研究环境。SMAC利用暴雪的StarCraft II机器学习API和DeepMind的PySC2为自主代理提供了一个方便的界面,以便与StarCraft II进行交互,获取观察和执行操作。与PySC2不同,SMAC专注于分散的微观管理场景,其中游戏的每个单元都由单独的RL代理控制。
安装前要保证有anaconda和pycharm等环境,smac环境运行也需要各种包的支持,具体安装要求看官方的文件
官方安装SMAC的方式在readme文件中有详细解释,可以自行查阅。(嫌麻烦可以看我这个,哈哈哈)首先我们需要下载git工具,记得把git加入环境变量,然后再进行操作,(好像也可以把文件放到本地再安装,但是我好像有问题,没成功)
运用如下命令行直接安装:
pip install git+https://github.com/oxwhirl/smac.git
这个好像安装有点慢,我也没弄成
用git将文件克隆到本地再安装
git clone https://github.com/oxwhirl/smac.git
pip install -e smac/
除了安装,smac环境还支持扩展,具体的东西我也没仔细看。
在Windows系统下,直接去官网安装星际争霸2就可以了,记得把游戏加入环境变量中就可以。在Linux的系统下就需要查看文档自行解决啦。
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中依次是地图名字,智能体数,敌方数量,以及对战最长的时间步
安装完smac后,需要进行测试确保安装成功,测试命令如下:
python -m smac.examples.random_agents
结果应该是能把星际争霸客户端起起来,并生成如下的结果:
做到了这里基本的星际争霸强化学习环境就搭好了,后面就是搭进行训练的框架
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.
conda create _n pymarl python==3.7 -y
conda activate pymarl
安装需要的包,pymarl的代码中有一个requirements.txt的文件详细说明了各个包的版本,直接安装就好了。(注意要进入pymarl所在的路径)自己下的话,就不能保证包的版本等问题。
pip install -r requirements.txt
装好需要的各种包之后就可以开始调试并运行代码了。
运行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后可以调整你想要的各种参数
在运行实验时,如果对参数没有改变,实验运行的就是默认的实验参数,对实验的算法和环境都没有改变,具体的实验参数配置在src/config文件配置里。–config配置的文件在src/config/algs中是对算法的配置,–env_args相对应的配置文件在src/config/envs中。在algs中可以选用不同的算法,并改变算法的参数配置,在envs中可以选择不同的实验环境和不同的奖励配置。
重点的参数解释:
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框架。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。