由于强化学习领域目前还有很多的问题,如数据利用率,收敛,调参玄学等,对于单个Agent的训练就已经很难了。但是在实际生活中单一代理所能做的事情还是太少了,而且按照群体的智慧,不考虑训练硬件和时长问题,使用多个agent同时进行学习,会不会有奇招呢?另外如果在需要multi-agent的场景下,如想要完成多人游戏的话,也必须要考虑到多代理的问题。

博弈论(game theory)
在单个agent中只需要考虑到自己,把自己优化的最好就可以了,但是涉及到Multi-Agent,研究多个代理之间的关系以提升整体效果或者完成多agent的目标任务时,首当其冲需要参考博弈论的成果。
博弈论是数学的一个分支,也是运筹学的一个重要学科。博弈论主要研究公式化了的激励结构间的相互作用,研究具有斗争或竞争性质现象的数学理论和方法,考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。不仅在多代理强化学习中,在深度学习,生成对抗都有应用,主要是用来模拟在有预定规则和结果的情况下不同参与者(agent)的策略互动。

一般根据游戏类型主要可以分为:

  • 合作vs非合作:即人多力量大,合作状态下尝试建立一个联盟共同赢得游戏。
  • 对称vs非对称:对称游戏所有人的目标相同。
  • 完美信息vs非完美信息:能看到所有人的举动(象棋vs德州扑克)
  • 同时vs顺序:同时行动还是顺序的比如棋盘游戏
  • 零和vs非零和:零和中一个玩家的获利一定意味着其他玩家的损失。

​纳什均衡(Nash Equilibrium)
即在一策略组合中,所有的参与者面临这样一种情况,当其他人不改变策略时,他此时的策略是最好的。此时的状况既不是基于个人的利益,也不是基于整体的效果,但是在概率上是最容易产生的结果,所以在多代理的环境下,是很容易收敛到纳什均衡状态的。比如博弈论中经典的囚徒困境(prisoner’s dilemma):

  • 假设有两个小偷A和B联合犯事、私入民宅被警察抓住。警方将两人分别置于不同的两个房间内进行审讯,对每一个犯罪嫌疑人,警方给出的政策是:如果两个犯罪嫌疑人都坦白了罪行,交出了赃物,于是证据确凿,两人都被判有罪,各被判刑8年;如果只有一个犯罪嫌疑人坦白,另一个人没有坦白而是抵赖,则以妨碍公务罪(因已有证据表明其有罪)再加刑2年,而坦白者有功被减刑8年,立即释放。如果两人都抵赖,则警方因证据不足不能判两人的偷窃罪,但可以私入民宅的罪名将两人各判入狱1年。
坦白 抵赖
坦白 8,8 0,10
抵赖 10,0 1,1

虽然看起来如果两个合作的话(即两个人抵赖)是最好的结果,但是实际上对某一个人A来说,尽管他不知道B作何选择,但他知道无论B选择什么,他选择"坦白"总是最优的。显然,根据对称性,B也会选择"坦白",结果是两人都被判刑8年。所以此时如果直接两个采用普通的RL的做法,它们都最大化自己的累积收益,最终应该收敛到 坦白-坦白,即纳什均衡,但此时对自身与整体的来说都不是一个很好的结果。这种情况在这种“对称游戏”中更容易达到。

MARL(Multi-Agent Reinforcement Learning)
这就使得在multi-agent下,探索的随机性以外,还存在这样的困惑,即不知道对方的选择,以及两者的选择是否能够得到最佳的效果。为了解决这样的困惑:

  • 以促进agent间合作的解决MARL的问题分为两条路:
    • modelling other agents in system。单代理的扩展,尝试用多个agent去共同决策其他agent的action;
    • communication for coordination。既然不确定其他代理的选择,那么就通过信息交换,去促进agent间的合作。
  • 以相互竞争为纲,最终完成共同进步的思路:类似GAN,这些算法往往会使用minimax的思想,比如minimax Q-learning。
  • 另外还有纳什均衡也不错的思路,毕竟类似囚徒困境的博弈太少了,网络收敛到纳什均衡的结果也能接受,代表算法就是Nash-Q。

MADDPG(Multi-Agent Deep Deterministic Policy Gradient)
MADDPG属于合作类别的思路,实现是流行的MARL以集中式训练,分布式执行的思想。

  • 集中式训练:每个agent不仅仅根据自身的情况,还根据其他智能体的行为来评估当前动作的价值
  • 分布式执行:当agent都训练完成后,每个agent就可以自己根据状态采取合适的动作,此时不需要其他agent的参与

    大致的训练上与DDPG很相似,只是在输入Critic时不仅仅是自己的[s,a]了,还有其他agent的信息,进行共同更新训练。
#会输入所有agent的action信息
def critic_network(name, action_input, reuse=False):with tf.variable_scope(name) as scope:if reuse:scope.reuse_variables()x = state_inputx = tf.layers.dense(x, 64)if self.layer_norm:x = tc.layers.layer_norm(x, center=True, scale=True)x = tf.nn.relu(x)x = tf.concat([x, action_input], axis=-1)x = tf.layers.dense(x, 64)if self.layer_norm:x = tc.layers.layer_norm(x, center=True, scale=True)x = tf.nn.relu(x)x = tf.layers.dense(x, 1, kernel_initializer=tf.random_uniform_initializer(minval=-3e-3, maxval=3e-3))return x

详细细节可以参拜原文paper:https://arxiv.org/pdf/1706.02275.pdf
目前communication工作开始聚焦于limited communication,或者decentralized training。

Minimax-Q
主要应用于两个玩家的零和随机博弈中,需要优化的对象就是
V∗(s)=maxπmina−∑aQ∗(s,a,a−)π(s,a)V^*(s)=max_{\pi} min_{a^-} \sum_a Q^*(s,a,a^-)\pi(s,a)V∗(s)=maxπ​mina−​a∑​Q∗(s,a,a−)π(s,a)
–是代表竞争对手,Q∗Q^*Q∗是联合动作值函数。即在当前agent在状态s时,执行动作a到下一个状态s‘,在更新Q时,会观察对手在同样的状态s下的动作a−a^-a−,再借鉴Q-Learning中的TD方法来更新。

def getReward(self, initialState, finalState, actions, reward, restrictActions=None):if not self.learning:returnactionA, actionB = actionsself.Q[initialState, actionA, actionB] = (1 - self.alpha) * self.Q[initialState, actionA, actionB] + \self.alpha * (reward + self.gamma * self.V[finalState])# EQUIVALENT TO : min(np.sum(self.Q[initialState].T * self.pi[initialState], axis=1))self.V[initialState] = self.updatePolicy(initialState) self.alpha *= self.decaydef updatePolicy(self, state, retry=False):#建立tablec = np.zeros(self.numActionsA + 1)c[0] = -1A_ub = np.ones((self.numActionsB, self.numActionsA + 1))A_ub[:, 1:] = -self.Q[state].Tb_ub = np.zeros(self.numActionsB)A_eq = np.ones((1, self.numActionsA + 1))A_eq[0, 0] = 0b_eq = [1]bounds = ((None, None),) + ((0, 1),) * self.numActionsA#纳什均衡问题使用线性规划求解res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq=b_eq, bounds=bounds)if res.success:self.pi[state] = res.x[1:]elif not retry:return self.updatePolicy(state, retry=True)else:print("Alert : %s" % res.message)return self.V[state]return res.x[0]

Nash Q-Learning
目标是能收敛到纳什均衡点,即在每一个状态s的阶段博弈中,都能够找到一个全局最优点或者鞍点。纳什均衡一般使用线性规划求解,即对于
R1=[[r11,r12][r21,r22]]R2=−R1R_1=[[r_{11},r_{12}][r_{21},r_{22}]]\\R_2=-R_1R1​=[[r11​,r12​][r21​,r22​]]R2​=−R1​可以得到其中某一个agent的线性规划:maxp1,p2V1r11p1+r21p2>=V1r12p1+r22p2>=V1p1+p2=1pj>=0,j=1,2max_{p_1,p_2} V_1 \\ r_{11}p_1+r_{21}p_2>=V_1\\ r_{12}p_1+r_{22}p_2>=V_1\\ p_1+p_2=1\\ p_j>=0,j=1,2maxp1​,p2​​V1​r11​p1​+r21​p2​>=V1​r12​p1​+r22​p2​>=V1​p1​+p2​=1pj​>=0,j=1,2
其中p表示选择动作的概率。整个线性规划看起来就是在类似囚徒困境的表中,对每个agent尝试找到最好的策略。

#利用对手的action计算Q
def compute_q(self, state, reward, opponent_action, q):if (self.previous_action, opponent_action) not in q[state].keys():q[state][(self.previous_action, opponent_action)] = 0.0q_old = q[state][(self.previous_action, opponent_action)]#更新Q值updated_q = q_old + (self.alpha * (reward+ self.gamma*self.nashq[state]- q_old))def compute_nashq(self, state):nashq = 0#遍历nash表for action1 in self.actions:for action2 in self.actions:nashq += self.pi[state][action1]*self.pi_o[state][action2] * self.q[state][(action1, action2)]

多代理强化学习MARL(MADDPG,Minimax-Q,Nash Q-Learning)相关推荐

  1. 强化学习(一)Fundamentals of Reinforcement Learning

    强化学习(一)Fundamentals of Reinforcement Learning 第〇章 An Introduction to Sequential Decision-Making 0.1 ...

  2. 多智能体强化学习(MARL)训练环境总结

    目前开源的多智能体强化学习项目都是需要在特定多智能体环境下交互运行,为了更好的学习MARL code,需要先大致了解一些常见的MARL环境以及库 文章目录 1.Farama Foundation 2. ...

  3. 多智能体强化学习之MADDPG

    论文原文:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 论文翻译:MADDPG翻译 阅读本文需要强化学 ...

  4. 用多智能体强化学习算法MADDPG解决“老鹰捉小鸡“问题

    点击左上方蓝字关注我们 [飞桨开发者说]郑博培:北京联合大学机器人学院2018级自动化专业本科生,深圳市柴火创客空间认证会员,百度大脑智能对话训练师,百度强化学习7日营学员 MADDPG算法是强化学习 ...

  5. 强化学习用于金融时序问题(Q,DQN,AC)

    前一篇博文所整理的模型中,主要有ARMA.RL.SVM.LSTM方法,本篇主要以强化学习方法来解决相关问题.强化学习是关于Agent与环境之间进行的互动,通过不断与环境状况的交互来进行"学习 ...

  6. 强化学习实践(2):Q Leaning

    文章目录 Q?V? Q-learning: 小code 大CODE Q learning是基于Value价值函数的RL算法,Q是一个数值表,收敛后我们通过Q表选择Q值最大的动作. 在讲解Q-learn ...

  7. 【强化学习】Playing Atari with Deep Reinforcement Learning (2013)

    Playing Atari with Deep Reinforcement Learning (2013) 这篇文章提出了第一个可以直接用强化学习成功学习控制policies的深度学习模型. 输入是r ...

  8. 基于强化学习的图像配准 - Image Registration: Reinforcement Learning Approaches

    配准定义 给定参考图像 I_f 和浮动图像 I_m ,所谓的配准就是寻找一个图像变换T,将浮动图像I_m变换到和 I_f 相同的坐标空间下,使得两个图像中对应的点处于同一坐标下,从而达到信息聚合的目的 ...

  9. 强化学习论文分析4---异构网络_强化学习_功率控制《Deep Reinforcement Learning for Multi-Agent....》

    目录 一.文章概述 二.系统目标 三.应用场景 四.算法架构 1.微基站处----DQN 2.宏基站处---Actor-Critic 五.伪代码 六.算法流程图 七.性能表征 1.收敛时间 2.信道总 ...

最新文章

  1. JavaWeb——jsp-config
  2. cpu性能排名学习笔记
  3. plsql如何连接oracle11g_64位win7 plsql连不上oracle11gr2 64位—plsql连接配置
  4. thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生sql语句查询
  5. boost::histogram::histogram::fill用法的测试程序
  6. #22. 【UR #1】外星人
  7. Linux内核ARM构架中原子变量的底层实现研究
  8. C#原型模式之深复制实现
  9. Linux格式化异常,Linux下DateFormat的parse方法出现”ParseException”异常
  10. 鹰角网络全球海量数据,一键轻松统一存储与处理
  11. 计算机丢失w95scm.dll,修复w95scm.dll
  12. linux 安装pinphp遇到的“系统不支持curl!”问题
  13. AdapterView.AdapterContextMenuInfo
  14. java 调用图灵接口_图灵机器人(问答机器人)API调用示例
  15. 【自动化】车间自动化十大必备装置!
  16. 【Tushare转存SQL】可转债数据(待续)
  17. List和Map集合遍历的3种方式
  18. React16版本更新的新特性
  19. 基于图像的三维建模——特征点检测与匹配
  20. 2022年全球市场工业访问控制解决方案总体规模、主要企业、主要地区、产品和应用细分研究报告

热门文章

  1. Python中 axis=0、axis=1是行还是列?
  2. 如何彻底删除windows10自带的美式键盘
  3. 计算机主机光驱弹不出来怎么办,台式机光驱弹不出来怎么办
  4. Prometheus-基于Consul的自动注册
  5. mysql视图高级设置_MySQL 视图高级属性知多少?
  6. 消灭该死的重复 下(4)pass 通过
  7. Docker Swarm 快速入门
  8. Golang优秀开源项目汇总(持续更新。。。)
  9. 微信小程序宠物商城项目源码来了~
  10. Windows7旗舰版安装Pytorch(CPU版)