MAAC代码分析
对于算法部分的分析请看这里:MAAC算法总结 - 简书 (jianshu.com)
我稍作改动之后的代码(目前已经可以在我的电脑上跑通了):ThorBarrad/MAAC: Multi-agent-Advantage-Actor-Critic论文代码 (github.com)
为了运行这个代码,首先需要安装以下package:
Python3.6.1+Pytorch+OpenAi Gym+tensorboardX
以及下面两个github上的代码:
multi-agent environment:shariqiqbal2810/multiagent-particle-envs (github.com)
这两个代码git下来之后,放到python目录下[pip install -e .]即可
在安装完上述包之后,就可以把代码git下来运行了
项目的结构如下:
由于电脑算力有限,所以对一些地方进行了修改:
把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()
最后,在运行main.py的时候要把参数带上:
在pycharm中修改参数的方法:
其中fullobs_collect_treasure是环境名称,mymodel是自定义的模型名字
都设置好之后就可以运行了
由于电脑性能原因,估计是看不到训练效果了,所以接下来就分析一下MAAC是怎么实现的吧。
main.py中的run()函数基本上可以说是主函数了,其作用就是把环境读入进来,然后在每个episode中与环境交互,将transaction保存到replay_buffer中,并定期更新网络参数。
神经网络更新的代码在attention_sac.py中,critic网络定义在critics.py中
critic网络的前向传播forward():
第一部分是在对每一个agent进行embedding
第二部分是计算每一个head的attention:
第三部分是在计算每个agent的Q值:
attention_sac.py中,中心critic网络更新的代码:
同时,代码中还使用了"软更新",在misc.py中可以见到