MAAC代码分析

MAAC代码分析

对于算法部分的分析请看这里:MAAC算法总结 - (jianshu.com)

原论文代码:shariqiqbal2810/MAAC: Code for "Actor-Attention-Critic for Multi-Agent Reinforcement Learning" ICML 2019 (github.com)

我稍作改动之后的代码(目前已经可以在我的电脑上跑通了):ThorBarrad/MAAC: Multi-agent-Advantage-Actor-Critic论文代码 (github.com)

为了运行这个代码,首先需要安装以下package:

Python3.6.1+Pytorch+OpenAi Gym+tensorboardX

以及下面两个github上的代码:

baseline:openai/baselines: OpenAI Baselines: high-quality implementations of reinforcement learning algorithms (github.com)

multi-agent environment:shariqiqbal2810/multiagent-particle-envs (github.com)

这两个代码git下来之后,放到python目录下[pip install -e .]即可

在安装完上述包之后,就可以把代码git下来运行了

项目的结构如下:

项目结构

由于电脑算力有限,所以对一些地方进行了修改:

main.py修改之处

把main.py中主函数里面rollout线程由12改为1;episode由50000改为1000

然后这时候env在reset()和step()的时候会报错,我的解决方法是把env_wrappers.py中step_wait(self)函数的env.step()改为env._step();reset(self)函数的env.reset()改为env._reset()

env_wrappers.py修改部分

最后,在运行main.py的时候要把参数带上:

在pycharm中修改参数的方法:

Run->Edit Configurations
Parameters=fullobs_collect_treasure mymodel

其中fullobs_collect_treasure是环境名称,mymodel是自定义的模型名字

都设置好之后就可以运行了

运行结果

由于电脑性能原因,估计是看不到训练效果了,所以接下来就分析一下MAAC是怎么实现的吧。

main.py中的run()函数基本上可以说是主函数了,其作用就是把环境读入进来,然后在每个episode中与环境交互,将transaction保存到replay_buffer中,并定期更新网络参数。

神经网络更新的代码在attention_sac.py中,critic网络定义在critics.py中

critic.py中对每一个agent进行embedding
critic.py中attention的部分

critic网络的前向传播forward():

第一部分是在对每一个agent进行embedding

part(1)

第二部分是计算每一个head的attention:

part(2)

第三部分是在计算每个agent的Q值:

part(3)

attention_sac.py中,中心critic网络更新的代码:

critic更新代码

同时,代码中还使用了"软更新",在misc.py中可以见到

misc.py中软更新函数

你可能感兴趣的:(MAAC代码分析)