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

news2024/11/20 21:34:03

【学习之路】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.coloradmin.cn/o/1088417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

A星寻路优化方案

1.存储常用位置间的路径信息(此优化方案一般用于地图较大,且起始点离终点较远情况下) 对于地图信息已知且各障碍位置固定的情况下,可以将常用的位置及其之间的路径信息保存,然后寻路时分别找到离开始点,结…

【JUC】原子操作类及LongAddr源码分析

文章目录 1. 十八罗汉2. 原子类再分类2.1 基本类型原子类2.2 数组类型原子类2.3 引用类型原子类2.4 对象的属性修改原子类2.5 原子操作增强类 3. 代码演示及性能比较:4. LongAddr原理5. LongAddr源码分析5.1 add()5.2 longAccumulate()5.3 sum() 6. 小总结6.1 Atomi…

【JUC】CAS原理

CAS原理 文章目录 CAS原理1. 概述2. 原理3. Unsafe4. CAS与自旋锁 1. 概述 compare and swap的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它包含三个操作数一一内存位置、预期原值及更新值 执行CAS操作的时候,将内存位置的值与预期原…

和鲸 × 北中医:高规格、高并发,一场真正的人工智能分析应用临场实践考核

百舸争流,奋楫者先,2023 年,人工智能已逐渐成为引发千行百业产生颠覆性变革的前沿技术。随着人工智能时代的加速到来,我国政产学研各界对于创新型、复合型 AI 人才的能力要求正不断提升。 面对一批又一批激流勇进、乘风破浪的莘莘…

【Leetcode】 738. 单调递增的数字

当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9 示例 2: 输入: n 1234 输出: 1234 示例3 : …

精通Maven的捷径:一文包揽所有必知必学

Maven是每个Java程序都会遇到的包管理工具&#xff0c;今天整理一下Maven的相关知识&#xff0c;从青铜到王者&#xff0c;一文全了解&#xff0c;我们开始吧&#xff01; 1、maven是什么&#xff0c;为什么存在&#xff1f;项目结构是什么样子&#xff0c;怎么定位jar 官方网…

【ROS】ros-noetic和anaconda联合使用【教程】

【ROS】ros-noetic和anaconda联合使用【教程】 文章目录 【ROS】ros-noetic和anaconda联合使用【教程】1. 安装anaconda2. 创建虚拟环境3. 查看python解释器路径4. 在虚拟环境中使用任意的包5. 创建工作空间和ros功能包进行测试Reference 1. 安装anaconda 在Ubuntu20.04中安装…

统一观测丨使用 Prometheus 监控 SQL Server 最佳实践

作者&#xff1a;啃唯 SQL Server 简介 SQL Server 是什么&#xff1f; Microsoft SQL Server 是 Microsoft 推出的关系型数据库解决方案&#xff0c;支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。Microsoft SQL Server 是市场领先的数据库技术之一。 SQL S…

【算法-动态规划】最长上升子序列-力扣 300

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

无限连接:前端跨页面通信的实现与应用

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. 前端跨页面通信的概述 2. 前端跨页…

RunnerGo测试平台,无代码玩转UI自动化测试

首先需要进入官网&#xff0c;RunnerGo支持开源&#xff0c;可以自行下载安装&#xff0c;也可以点击右上角体验企业版按钮快速体验 点击体验企业版进入工作台后可以点击页面上方的UI自动化 进入到测试页面 创建元素 我们可以在元素管理中创建我们测试时需要的元素 这里我们以…

PPT制作软件哪个好?各种类型的10款好用PPT软件盘点!

想必大家对PPT并不陌生&#xff0c;它在日常的工作或学习中有诸多应用场景&#xff0c;小到制作一份电子相册&#xff0c;大到一场产品发布会&#xff0c;都可以看到PPT的影子。 如果我们细究PPT的话&#xff0c;会发现可以细分出各种类型的PPT软件&#xff0c;诸如&#xff1…

Linux指令集合

磁盘相关命令 df//查看磁盘整体状况df -h //查看磁盘整体状况du //查看磁盘使用情况&#xff0c;如果不加目录&#xff0c;默认为当前目录du -h -d 0//表示我们只希望看当前目录磁盘使用情况&#xff0c;不会继续展示这层目录的下一级目录 du -h -d 1//表示展示当前目录的下一…

微信自动批量添加好友的方法

在现在的营销中微信已成为一种重要的沟通方式。微信目前是没有自动批量添加好友的功能&#xff0c;需要运营者一个一个手动去添加&#xff0c;这样太过于浪费时间&#xff0c;并且加频繁了还容易被封号&#xff0c;今天给大家介绍几种手动批量加好友的方式以及怎么借助第三方软…

深入理解AQS之ReentrantLock源码分析

开题&#xff1a;如何自己生成一把独占锁&#xff1f; 1. 管程 — Java同步的设计思想 管程&#xff1a;指的是管理共享变量以及对共享变量的操作过程&#xff0c;让他们支持并发。 互斥&#xff1a;同一时刻只允许一个线程访问共享资源&#xff1b; 同步&#xff1a;线程之间…

【测试】丝滑版本测试记录2023-10-13

目录 四组24个视频拉取 视频拉取的带宽 本地内存不足 四组24个视频拉取 视频拉取的带宽 本地内存不足 由于 edge需要内存大几百M,加截wasm要更多一点&#xff0c;只剩下 400M,不足以使用

git+gitee代码上传

gitgitee代码上传 1、git应用工具下载安装 gitee应用注册并创建仓库点创建后进入到仓库 git命令关于.gitignore只执行一次的命令经常执行的命令 1、git应用工具 下载安装 https://git-scm.com/downloads $ git --version git version 2.39.0.windows.2代码仓库&#xff1a; …

全力以赴,火山引擎边缘云代表团出战亚运会

END 未来&#xff0c;火山引擎边缘云赛事阵容将继续全力以赴&#xff0c;通过领先、可信赖的云和智能技术&#xff0c;助力游戏行业呈现更加精彩的竞技赛事。

LeetCode【240】搜索二维矩阵

题目&#xff1a; 思路&#xff1a; 1、单靠对角线元素无法判定位置 2、主要逐行进行二分 代码&#xff1a; public boolean searchMatrix(int[][] matrix, int target) {int rows matrix.length;int columns matrix[0].length;// 按行进行二分for (int i 0; i < rows…

Apipost连接数据库详解

Apipost提供了数据库连接功能&#xff0c;在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持&#xff1a;Mysql、SQL Sever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB 8种数据库的连接操作 新建数据库连接&#xff1a; 在「项目设置…