当前位置: 首页 > news >正文

【动手学强化学习】番外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 代码解析

后续补充

三、疑问

暂无。

四、总结

后续补充

相关文章:

  • QT开发之Mysql数据库(一)
  • 赶集网(Python)
  • C++ 指针从入门到精通实战:全面掌握指针的概念与应用
  • 第六讲 | vector的使用及其模拟实现
  • 绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力
  • 敏感数据触发后怎么保障安全?
  • Windows10 微软五笔 造词造句
  • 矩阵求导 Ref 0
  • 跨境电商中的几种支付方式——T/T、L/C、D/P、D/A、O/A
  • 【新能源汽车压力采集与数据处理技术方案:从传感器到智能分析的硬核实战指南】
  • The first day of vue
  • openGauss新特性 | 自动参数化执行计划缓存
  • 三层架构与分层解耦:深入理解IOC与DI设计模式
  • 微信小程序实现table样式,自带合并行合并列
  • 网络中的基本概念
  • 虚幻引擎 Anim To Tex| RVT | RT
  • CTF web入门之文件上传
  • 【STL】set
  • 判断一棵树是不是另一棵树的子树
  • 容器实战高手课笔记 ----来源《极客时间》
  • 新经济与法|如何治理网购刷单与控评?数据合规管理是关键
  • 消费维权周报|上周违规经营类投诉较多,涉诱导加盟等
  • 牛市早报|今年国内核电项目审批首次开闸,离境退税起退点下调
  • 伊朗国防部发言人:发生爆炸的港口无进出口军用物资
  • 党旗下的青春|83岁仍在“下生活”,他说生活是创作的源泉
  • 国家统计局:一季度规模以上工业企业利润延续持续恢复态势