【学习之路】Multi Agent Reinforcement Learning框架与代码

news/2024/5/18 22:16:59 标签: python, 强化学习, 多agent

【学习之路】Multi Agent Reiforcement Learning框架与代码

Introduction

国庆期间,有个客户找我写个代码,是强化学习相关的,但我没学过,心里那是一个慌,不过好在经过详细的调研以及自身的实力,最后还是解决了这个问题。

强化学习的代码也是第一次接触,在这个过程中也大概了解了多agent强化学习的大致流程,因此记录这次代码和文章学习的过程还是十分有必要的。

要完成的文章是:Flexible Formation Control Using Hausdorff Distance: A Multi-agent Reinforcement Learning Approach,该文章没有开源。

以下均为个人简介,如有不当,还请见谅。

Timeline

  • 从目标文章中查找类似文章,最好是开源的
    • Decentralized Multi-agent Formation Control via Deep Reinforcement Learning:这篇文章有算法的基本流程
    • Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments:这篇文章是目标文章所使用仿真环境的出处
  • 查找多agent强化学习的开源代码
    • Multi-Agent-Deep-Deterministic-Policy-Gradients:这是Multi-Agent Actor-Critic这篇文章里面所提方法代码的pytorch版本,官方是tensorflow写的
    • Reinforcement_Learning_Swarm:这篇没有利用框架,但通过它可以较好地理解整个流程
    • multiagent-particle-envs:这是算法的仿真环境,同时也相当于一个框架
  • 学习这些代码,推荐先学习没有利用框架的,也就是第二篇,然后看用框架写的

Code Note

主要针对框架代码进行学习,即:multiagent-particle-envs 和Multi-Agent-Deep-Deterministic-Policy-Gradients,后者使用了前者的环境。

整体流程

首先介绍一下训练的整体流程,方便更好的理解:

  • 创建多agent的环境
  • 实现强化学习的模型M(actor-critic模型)
  • 确定相关参数:迭代次数,学习率等
  • 循环
    • 重置环境获得当前的observation
    • 根据observation输入到M中的actor网络(这部分不作讲解),得到action
    • 根据action更新当前的state,获得reward,更新的observation
    • 将这些state存入memory
    • 每隔一定迭代次数,从memory里面采样一些state,输入到模型M里面,从而对M进行训练

环境代码

该项目下代码以及文件夹的功能如下:

在这里插入图片描述
下面主要介绍enviroment文件下一些函数的作用。

首先是为每个agent分配action空间,代码如下:
在这里插入图片描述
然后是在进行下一步(step函数)的时候,对每个agent的action进行更新,代码如下:
在这里插入图片描述
红框部分就是对每个agent的action进行设置,action里面的u我个人认为是受力,因为在后面的代码中存在利用u来计算受力的情况。

得到action后,利用action对state进行更新,该部分的代码在core.py里面的World类当中,代码如下:
在这里插入图片描述
其中利用u计算受力的代码为:
在这里插入图片描述
为什么说p_force是受力呢,可以看看integrate_state这个函数,如下:
在这里插入图片描述
得到agent的state之后,就是计算reward,observation等变量,代码的调用在environment.py下:

在这里插入图片描述
从make_env.py文件里面可以看出,这些函数的相关实现在scenarios文件下的py文件里面:
在这里插入图片描述

接下来看这些函数是怎么实现的,以simle_spread.py文件为例:

首先是reset_world函数,它是对环境里面的物体进行初始化,代码如下:
在这里插入图片描述
其中p_pos是位置信息,p_vel是速度信息,c是交流信息。

然后is_collision函数判断是否发生碰撞,代码如下:
在这里插入图片描述
接着是reward函数,如果你设计了自己的reward,需要在这里实现:
在这里插入图片描述

最后是observation函数,如果你有自己的设计,也要在这里实现:
在这里插入图片描述

了解了以上这些,对于一个简单的多agent强化学习的情况你也能够实现了。


http://www.niftyadmin.cn/n/5087818.html

相关文章

day05_数组

今日内容 另: return补充说明 0 数组复习 1 数组内存 2 数组其他声明方式 3 数组遍历 4 数组在方法中的使用 5 数组排序算法 0.1 复习 1 中文描述方法的定义 方法是一段功能代码,完成某些事情,是独立的有固定的写法 public static根据方法是否返回数据,来确定要不要设置返回值类…

对CU50的修改(未使用)

目的是把CU50中的选择配置拿出来,再把最后BOM的结果拿出来。2023.10.13 一、CU50里面2个标准函数有修改: ----------LCUKOF01----函数----------------CALL FUNCTION CU01_DISPLAY_BOMEXPORTINGmasterdata rcuko-ukompRESULT …

【vr】【unity】白马VR课堂系列-VR开发核心基础05-主体设置-手柄对象的引入和设置

【视频教学】 【白马VR课堂系列-VR开发核心基础05-主体设置-手柄对象的引入和设置】 https://www.bilibili.com/video/BV19D4y1N73i/?share_source=copy_web&vd_source=7f5c96f5a58b7542fc6b467a9824b04e 【内容】 上一节引入了XR Origin并进行了初步设置,运行测试时V…

架构案例2017(五十二)

第5题 阅读以下关于Web系统架构设计的叙述,在答题纸上回答问题1至问题3.【说明】某电子商务企业因发展良好,客户量逐步增大,企业业务不断扩充,导致其原有的B2C商品交易平台己不能满足现有业务需求。因此,该企业委托某…

Java系列之:深入理解设计模式

Java系列之:深入理解设计模式 一、设计模式相关技术文章二、设计原则三、设计模式概念四、设计模式的分类五、创建性模式六、创建性模式-工厂方法模式七、创建性模式-抽象工厂模式八、创建性模式-构建器模式九、面向对象设计-结构性模式十、结构性模式-适配器模式十一、结构性…

基于单目的光流法测速

目录 1.简介 2.代码实现 1.简介 基于单目的光流法是一种常见的计算机视觉技术,用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。 背景: 光流法是计算机视觉领域中最早的运动估计方法之一&#xff0c…

基于nodejs+vue校园失物招领平台设计与实现

科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机知识不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实目 录 摘 要 I ABSTRACT II 目 录 II…

c语言之strcmp函数使用和实现

文章目录 前言一、strcmp函数使用二、实现方法 前言 c语言中常用的字符串处理函数strcmp总结。 一、strcmp函数使用 原型 int strcmp ( const char * str1, const char * str2 );strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCII码比较 规定…