【动手学强化学习】番外6-MAPPO应用框架学习
文章目录
- 一、待解决问题
- 1.1 问题描述
- 1.2 解决方法
- 二、方法详述
- 2.1 必要说明
- 2.2 应用步骤
- 2.2.1 下载light_mappo 源码
- 2.2.2 light_mappo 代码解析
- 三、疑问
- 四、总结
一、待解决问题
1.1 问题描述
由于有自建环境的需求,但想使用MAPPO的算法,但MAPPO benchmark没有可以直接应用的框架,因此在网上参考学习。
1.2 解决方法
(1)下载light_mappo 源码
(2)light_mappo 代码解析
二、方法详述
2.1 必要说明
MAPPO 框架讲解参考链接:多智能体强化学习(二) MAPPO算法详解
MAPPO 框架讲解(视频)参考链接:MAPPO的代码框架解析
light_mappo 源码链接: github/ tinyzqh /light_mappo
2.2 应用步骤
2.2.1 下载light_mappo 源码
根据源码链接下载对应源码,得到目录如下:
首先查看对应
README_CN.md
说明
## 背景
MAPPO原版代码对于环境的封装过于复杂,本项目直接将环境封装抽取出来。更加方便将MAPPO代码移植到自己的项目上。
## 安装
直接将代码下载下来,创建一个Conda环境,然后运行代码,缺啥补啥包。具体什么包以后再添加。
## 用法
- 环境部分是一个空的的实现,文件`light_mappo/envs/env_core.py`里面环境部分的实现:[Code](https://github.com/tinyzqh/light_mappo/blob/main/envs/env_core.py)
import numpy as np
class EnvCore(object):
"""
# 环境中的智能体
"""
def __init__(self):
self.agent_num = 2 # 设置智能体(小飞机)的个数,这里设置为两个
self.obs_dim = 14 # 设置智能体的观测维度
self.action_dim = 5 # 设置智能体的动作维度,这里假定为一个五个维度的
def reset(self):
"""
# self.agent_num设定为2个智能体时,返回值为一个list,每个list里面为一个shape = (self.obs_dim, )的观测数据
"""
sub_agent_obs = []
for i in range(self.agent_num):
sub_obs = np.random.random(size=(14, ))
sub_agent_obs.append(sub_obs)
return sub_agent_obs
def step(self, actions):
"""
# self.agent_num设定为2个智能体时,actions的输入为一个2纬的list,每个list里面为一个shape = (self.action_dim, )的动作数据
# 默认参数情况下,输入为一个list,里面含有两个元素,因为动作维度为5,所里每个元素shape = (5, )
"""
sub_agent_obs = []
sub_agent_reward = []
sub_agent_done = []
sub_agent_info = []
for i in range(self.agent_num):
sub_agent_obs.append(np.random.random(size=(14,)))
sub_agent_reward.append([np.random.rand()])
sub_agent_done.append(False)
sub_agent_info.append({})
return [sub_agent_obs, sub_agent_reward, sub_agent_done, sub_agent_info]
只需要编写这一部分的代码,就可以无缝衔接MAPPO。在env_core.py之后,单独提出来了两个文件env_discrete.py和env_continuous.py这两个文件用于封装处理动作空间和离散动作空间。在algorithms/utils/act.py中elif self.continuous_action:这个判断逻辑也是用来处理连续动作空间的。和runner/shared/env_runner.py部分的# TODO 这里改造成自己环境需要的形式即可都是用来处理连续动作空间的。
在train.py文件里面,选择注释连续环境,或者离散环境进行demo环境的切换。
核心点总结:
(1)直接下载源码后,创建conda虚拟环境,并运行
light_mappo-main/train/train.py
可直接调用mappo算法,缺少什么包安装什么依赖;
(2)该框架已经把mappo benchmark中的env环境
的代码抽离了出来,可以在light_mappo/envs/env_core.py
源码上修改为自己的env环境
。
2.2.2 light_mappo 代码解析
(后续补充)
三、疑问
暂无。
四、总结
(后续补充)