阅读QTRAN:Learning to Factorize with Transformation for Cooperative Multi-Agent Reinforcement Learning

写在前面:这篇文章我也是前前后后看了几遍,还在网上找了一些资料,但是感觉始终也没太看明白,就先把目前的理解写在这里,等以后有了新的理解再更新。要强调一点的是,这篇文章我刚读的时候是真的超级懵,但是不放弃偶尔就读偶尔就读,再结合别人的理解确实还是会有逐渐深入的理解的,所以以后遇到难的文章也不要丧气,平常心慢慢来(当然主要可能还是我的水平不行,读起来才这么难,hh)


题目作者

在这里插入图片描述
ICML 19,作者的单位是KAIST,韩国科学技术院,韩国比较好的一个大学,这个组在多智能体强化学习上也是颇多产出的。

摘要

这篇文章是延续VDN,QMIX的工作,也是基于值分解的思路来解决多智能体强化学习合作问题。文章提出虽然VDN,QMIX都是IGM(后文解释)的充分条件,但是在具体的实现上分别引入了 Q i , Q t o t Q_i,Q_{tot} Qi,Qtot之间的加性、单调性假设限制,从而只能解决一部分的多智能体合作问题,对于一些可分解但是 Q i , Q t o t Q_i,Q_{tot} Qi,Qtot之间并不满足加和或者单调性性质的问题,就不能很好解决了。对此,本文中提出了一种新的分解方法,QTRAN,满足了IGM条件,而且并没有引入其他的假设限制,因此适用于更加广泛的问题。

相关工作介绍

注:后文中的 Q j t Q_{jt} Qjt和前面提到的 Q t o t Q_{tot} Qtot是一个意思,不同文章中符号不太一样。
IGM:对于 Q j t Q_{jt} Qjt,若存在 [ Q i ] [Q_i] [Qi]满足
在这里插入图片描述
也就是说对于一个联合动作价值函数 Q j t Q_{jt} Qjt,如果存在 [ Q i ] [Q_i] [Qi],使得 Q j t Q_{jt} Qjt的最优联合动作和对于 [ Q i ] [Q_i] [Qi]的最优动作联合相同,则可以认为 [ Q i ] [Q_i] [Qi]对于 Q j t Q_{jt} Qjt满足IGM,实际中我们在值分解的过程中所求的也就是对于 Q j t Q_{jt} Qjt满足IGM的 [ Q i ] [Q_i] [Qi],因为只有这样在分散执行的时候每个智能体根据自己的 Q i Q_i Qi选择 a i a_i ai组成a,和从集中式的角度选择联合动作 a ˉ \bar{a} aˉ才是一致的。

而前面的论文,即VDN,QMIX都提供了一种设计 [ Q i ] [Q_i] [Qi]或者说分解 Q j t Q_{jt} Qjt的方式,都是满足IGM的充分条件,写作如下(2)(3):
在这里插入图片描述
但是显然虽然这两个方法都满足IGM,但是都分别对 Q i , Q t o t Q_i,Q_{tot} Qi,Qtot之间的关系进行了限制,即认为它们之间的关系式加和或者单调的,因此对于一些多智能体合作任务,然而 Q i , Q t o t Q_i,Q_{tot} Qi,Qtot之间的关系并不是这种的问题,这两种方法就未必会应用的很好了,对此,本文提供了一种新的设计/产生 [ Q i ] [Q_i] [Qi]的方法,QTRAN,既满足IGM,且没有提出额外的假设。

方法

作者证明了,只要 [ Q i ] [Q_i] [Qi] Q j t Q_{jt} Qjt之间满足如下关系,则 [ Q i ] [Q_i] [Qi]对于 Q j t Q_{jt} Qjt满足IGM:

在这里插入图片描述
符号说明:
在这里插入图片描述
根据这个定理,我们可以把 [ Q i ] [Q_i] [Qi]的求解/或者说 Q j t Q_{jt} Qjt的分解问题建模成一个优化问题,决策变量就是 [ Q i ] [Q_i] [Qi],约束条件就是定理1,也就是当 u = u ˉ u=\bar{u} u=uˉ时,定理1中左式要尽可能靠近0,当 u ≠ u ˉ u \neq \bar{u} u=uˉ时,左式要为正,这样优化出来的 [ Q i ] [Q_i] [Qi]对于 Q j t Q_{jt} Qjt满足就IGM了。

在具体的实现中,QTRAN的说明图如下:
在这里插入图片描述
可以看出,对于定理一的左式, Q i Q_i Qi是用网络表示的,同时利用各个智能体的状态信息 h i ( t i , u i ) h_i(t_i,u_i) hi(ti,ui)的联合去估计了 V j t , Q j t V_{jt},Q_{jt} Vjt,Qjt,算法的loss定义为:
在这里插入图片描述
在这里插入图片描述
L o p t , L n o p t L_{opt},L_{nopt} Lopt,Lnopt分别是满足定理一的约束,因为这里的 Q j t Q_{jt} Qjt是使用网络估计的,因此还需要借助真实的奖励信息r来算一个TD-Loss
另外其他的一些说明:
在这里插入图片描述

当然论文里实现了两个版本的QTRAN,QTRAN-base和QTRAN-alt,后者的提出是因为作者发现当 u ≠ u ˉ u \neq \bar{u} u=uˉ时,定理一中的约束太松了导致训练很容易不稳定,因此提出了一个更紧的约束(道理是这样的但其实我还没太仔细看)。

写在后面

这篇文章目前我就读到这里了,但是其实这里我还有一个迷惑。在文章中可以推出 V j t V_{jt} Vjt需要是这个形式:在这里插入图片描述
但是在实际的算法中, V j t V_{jt} Vjt是用网络估计出来的,也不是很明确这个估计出来的值到底是表示什么,也没有别的东西来直接约束它,这样是合理的吗?

另外好多人说QTRAN的算法理论性很好,但是后续在求解的时候引入了很多近似、松弛,使得算法的实际性能不是很好,这一点我还没有具体体会和认识到,还需要继续学习。

最后推荐一个知乎的文章,对值分解这块讲得还挺好的,尤其是QTRAN的推导,链接在这里:知乎文章,这篇文章里说 V j t V_{jt} Vjt可以先是一个定义 Q j t , ∑ Q i Q_{jt},\sum Q_i Qjt,Qi之间差距的量,然后只要满足定理一的约束,那么 V j t V_{jt} Vjt就是上面这个形式,这样理解好像怎么定义 V j t V_{jt} Vjt都可以了,先暂定这样吧。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
出现这个错误是因为你的数据集中有一个字符串类型的值 "Self-emp-not-inc",而某些算法只能处理数值类型的值。你需要将这些字符串类型的值转换为数值类型的值。 有几种方法可以解决这个问题: 1. 将字符串值映射到数字。例如,将 "Self-emp-not-inc" 映射到 0,"Private" 映射到 1,"Public" 映射到 2 等等。你可以使用 Pandas 库的 map() 方法来实现这一点。 2. 将所有的字符串值都转换为数字。你可以使用 Pandas 库的 factorize() 方法将每个唯一的字符串值映射到一个唯一的整数。例如,"Self-emp-not-inc" 可以被映射到 0,"Private" 可以被映射到 1,"Public" 可以被映射到 2 等等。 3. 使用 Pandas 库的 get_dummies() 方法将所有的字符串值转换为二进制数。例如,"Self-emp-not-inc" 可以被转换为 [1,0,0,0,0,0,0,0,0,0],"Private" 可以被转换为 [0,1,0,0,0,0,0,0,0,0],"Public" 可以被转换为 [0,0,1,0,0,0,0,0,0,0] 等等。这种方法在某些情况下可能会导致维度爆炸,所以需要谨慎使用。 下面是一些示例代码,可以帮助你更好地理解这些方法: ``` python import pandas as pd # 创建一个包含字符串值的数据集 data = pd.DataFrame({"income": ["Self-emp-not-inc", "Private", "Public", "Private", "Self-emp-not-inc"]}) # 方法 1: 将字符串值映射到数字 mapping = {"Self-emp-not-inc": 0, "Private": 1, "Public": 2} data["income"] = data["income"].map(mapping) # 方法 2: 将所有的字符串值都转换为数字 data["income"] = pd.factorize(data["income"])[0] # 方法 3: 使用 get_dummies() 方法将所有的字符串值转换为二进制数 dummies = pd.get_dummies(data["income"], prefix="income") data = pd.concat([data, dummies], axis=1) ``` 希望能帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值