10MARL深度强化学习 Value Decomposition in Common-Reward Games

2024-02-22 23:28

本文主要是介绍10MARL深度强化学习 Value Decomposition in Common-Reward Games,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 1、价值分解的研究现状
  • 2、Individual-Global-Max Property
  • 3、Linear and Monotonic Value Decomposition
    • 3.1线性值分解
    • 3.2 单调值分解

前言

中心化价值函数能够缓解一些多智能体强化学习当中的问题,如非平稳性、局部可观测、信用分配与均衡选择等问题,然而存在很难直接学习价值函数等问题,特别是动作价值函数难以学习,原因是联合动作空间随智能体个数呈指数增长的问题,因此本文章学习如何有效的学习价值函数且最大化共同和奖励过程


1、价值分解的研究现状

价值函数如何分解才能更好的学习已经具有很长的研究历史,通过多智能体在交互过程中并非所有智能体互相之间都存在交互过程这一观点,提出了coordination graph,稀疏的协作图能够近似联合动作函数作为交互智能体的价值和,能够更高效的评估价值,例子如下:
在这里插入图片描述
在共同和奖励过程,已经有很多成功的价值分解算法应用到价值函数的学习中,价值分解算法能够将价值函数分解为更简单的函数,在共同和奖励过程能够更高效的学习,中心动作价值函数能够表示为如下(共同奖励过程):在这里插入图片描述

2、Individual-Global-Max Property

最简单的分解Q函数的方法便是每个智能体单独学习效用函数,只与其历史观测序列与动作有关,这些效用函数采用相同的结构如下所示:
在这里插入图片描述
之所以称为效用函数是这些函数并不会去学习如何近似自身的期望回报,而是将所有智能体的效用函数联合优化近似中心动作价值函数并且满足individual-global-max(IGM)性质
为了定义IGM性质,引入中心化动作价值函数与效用函数的贪婪动作,如下所示:在这里插入图片描述
其中 Q ( s , a ; θ ) Q(s,a;\theta) Q(s,a;θ)表示中心动作价值函数、 Q ( h i , a i ; θ i ) Q(h_{i},a_{i};\theta_{i}) Q(hi,ai;θi)表示智能体i的效用函数
IGM性质满足以下关系:
在这里插入图片描述
解释:如果联合动作相对于中心动作价值函数是贪婪的,那么相对于效用函数来说每个智能体i在联合动作中自身的动作也是贪婪的,也就是说如果智能体i相对于自身的效用函数选择贪婪动作,那么相对于分解中心动作价值函数,单个贪婪动作组成的联合动作也是贪婪的
在满足IGM的条件下,每个智能体能够根据自身的效用函数选择贪婪动作,那么所有的智能体能够一起选择贪婪的联合动作,效用函数除了能够简单的分解中心动作价值函数之外,还能够评估每个智能体在共同奖励过程中的贡献,这样来看,价值分解还能够在一定程度上减轻信用分配问题

3、Linear and Monotonic Value Decomposition

在这里插入图片描述

3.1线性值分解

满足IGM性质是假设共同奖励过程满足线性分解,每个智能体单独的奖励等于整体的奖励
r t = r ‾ 1 t + ⋯ + r ‾ n t r^{t}=\overline{r}_{1}^{t}+\cdots+\overline{r}_{n}^{t} rt=r1t++rnt
在改假设的基础之上,中心动作价值函数能够分解为如下:
在这里插入图片描述
基于线性的分解方法提出VDN算法,通过维护包含所有智能体经验的回收池以及采用所有智能体联合优化得到近似中心化价值函数,其损失函数如下:
在这里插入图片描述

3.2 单调值分解

在一些情况下,每个智能体的贡献在非线性的情况下具有更好的表现,线性分解无法起到作用
在满足IGM的前提下,还需要满足中心化动作价值函数相对于每个智能体的效用函数的导数为正,如下图所示:
在这里插入图片描述
那就意味着每个智能体采取动作后效用函数增加,那么采取相对应联合动作后中心价值函数也会增加

QMIX网络采用DQN作为每个智能体的效用函数,同时定义了一个混合网络用于聚合所有智能体的效用网络近似中心化的动作价值函数
在这里插入图片描述
在实际应用中,mix网络对于输入的权重均为正,通常mixing函数的参数通过额外的超参数网络获得,该网络用所有的状态作为输入,输出mixing网络的参数,为了保证mixing网络参数为正,超参网络采用绝对值函数作为激活函数,联合优化损失函数如下:
在这里插入图片描述
中心动作价值函数能够用如下的等式简单表达
在这里插入图片描述
其中的权重系数均大于等于0,代表对应智能体的贡献,若系数为1,则代表线性分解
**一些值得注意的点:**首先所有的智能体的效用网络参数是共享的、智能体通过onehot编码进行区别、智能体效用网络能够建模成RNN网络、每个episode会存储所有的经验,在其结束后进行更新

这篇关于10MARL深度强化学习 Value Decomposition in Common-Reward Games的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736819

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总