[NIPS2020] Weighted QMIX: Expanding Monotonic Value Function Factorisation 笔记

本文是对NIPS2020中Weighted QMIX论文的笔记,探讨了QMIX算子的局限性和解决方案。作者指出QMIX在处理依赖其他agent动作的值函数时存在困难,提出了加权QMIX算子,通过调整权重来更准确地估计最优联合动作的值,以改进多智能体强化学习中的价值函数分解。文章介绍了两种赋权方式,即Idealised Central Weighting和Optimistic Weighting,并在星际争霸2实验中验证了效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

认识到自己确实没有很多MARL的经验,最近就进行了代码实践,不然看论文想idea总是空中楼阁,而且就算有好的想法,没有对比的算法也不行,所以还是要有自己的算法库,这样不论做项目还是做实验都会方便。最近照着师兄的代码实现了一遍QMIX,值分解的套路算是明白了。代码经验真的得靠实践,实践才会知道paper之外的各种问题。而且算法效率很重要,可以帮忙缩短一半时间。但是不要陷入代码改进的泥潭,比如为了更好的可视化搞半天,或者是项目结构调来调去,纠结哪些封装哪些不封装。这是无底洞,我的目标还是实现更多的SOTA,正好QMIX出后续了,研究研究,实现一波。

我的实现可以在这里获得,欢迎给star,提意见。

Introduction

QMIX通过将联合动作的Q值表示限制为每个agent效用的单调混合来实现简单的分布式。然而这种限制使其难以表示依赖其他agent动作的值函数。如果一个agent对动作的选择依赖其他agent的动作,那么这就不是单调的。因此QMIX难以解决在一个时间步里需要明显协作的任务。作者分析认为QMIX是一个算子,首先计算Q-learning targets,然后将他们映射到 Q m i x Q^{mix} Qmix ,最小化所有联合动作上的无权均方差。 Q ∗ Q^* Q 的投影记做 Q t o t Q_{tot} Qtot。由于 Q ∗ Q^* Q 不属于 Q m i x Q^{mix} Qmix,因此对最优联合动作的估计是不正确的,甚至在可以获得真实 Q ∗ Q^* Q 的时候也恢复不了最优策略。如果我们最终关心贪心最优策略,那么准确表示最优联合动作的值比次优动作的更重要。作者为了准确的映射,加入权值。

QMIX Operator

这里审查一个表示表格设置中理想化版本的QMIX的算子,从而从根本上理解来源于其训练目标的根本性限制因素和它使用的局限的函数类。这里将函数类记做 Q m i x Q^{mix} Qmix:
在这里插入图片描述
这是所有可以被表示为表格的

【项目介绍】 基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip 基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip 基于python实现多智能体强化学习VDN、QMIX、QTRAN、QPLEX算法源码+对应模型文件.zip 【说明】 1、项目源码在上传前,都经过本地成功运行,功能测试无误。请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、机械电子信息等相关专业背景的在校大学生、专业老师 行业从业人员等下载使用。 3、用途:项目代表性强,具有创新性和启发性,故具有挺高的学习借鉴价值。不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您有价值,欢迎下载使用! 无论您是运行还是二次开发,遇到问题或困惑,欢迎私信交流学习。
### QMIX算法概述 QMIX是一种用于多智能体系统的分布式强化学习算法,其核心思想在于通过集中式的全局奖励函数来优化各个独立智能体的行为策略[^1]。该算法利用了一个混合网络结构,能够将局部动作价值函数组合成一个全局的动作价值函数。 #### QMIX的核心概念 QMIX的关键创新点之一是引入了一种称为 **单调约束** 的机制,这种机制确保了个体智能体的价值函数可以被线性或非线性地聚合到全局价值函数中。具体来说,它定义了一个全局状态-动作值函数 \(Q_{\text{total}}(s, \mathbf{a})\),其中 \(s\) 表示当前的状态,而 \(\mathbf{a}\) 是所有智能体联合采取的动作集合。 为了实现这一目标,QMIX设计了一个双层神经网络架构: 1. **底层网络**:负责估计单个智能体的本地动作价值函数 \(q_i(s, a_i)\),即每个智能体在其特定状态下执行某个动作所获得的预期回报。 2. **顶层网络 (混合适应器)**:接收来自所有智能体的本地动作价值作为输入,并输出整个团队的全局动作价值 \(Q_{\text{total}}(s, \mathbf{a})\)。 此过程可以通过以下公式表示: \[ Q_{\text{total}}(s,\mathbf{a};\theta,\phi)=U^\phi(S;\sum _i W_i ^{\phi}(S)* q_i(s,a_i;\theta)) \] 这里, - \(W_i^{\phi}(S)\): 权重矩阵; - \(U^{\phi}(){}\): 转换操作;两者均由参数化函数给出并由超网生成。 #### 技术细节与训练流程 在实际应用过程中,QMIX采用经验回放技术存储交互数据,并基于这些历史样本更新模型权重。以下是其实现中的几个重要方面: - **状态分解**: 将复杂的环境状态划分为更易于处理的小部分,使得每名成员仅需关注与其最相关的子集即可做出决策。 - **去中心化的推理阶段**: 即使是在具有共享信息源的情况下运行,在测试期间仍然允许各单元单独行动而不依赖额外通信渠道的支持。 下面展示的是一个简单的伪代码版本描述如何构建以及调整上述提到过的两个主要组件——局部代理及其对应的总效用评估模块: ```python def train_qmix(agent_networks, mixer_network, memory_buffer): # Sample transitions from replay buffer. batch = memory_buffer.sample_batch() states, actions, rewards, next_states, dones = process_batch(batch) with torch.no_grad(): target_local_qs = [] for i in range(num_agents): agent_net = agent_networks[i] next_state_inputs = extract_agent_input(next_states[:, :, :], i) max_next_action = select_max_action(agent_net, next_state_inputs) next_q_value = compute_target_q(agent_net, next_state_inputs, max_next_action).unsqueeze(-1) target_local_qs.append(next_q_value) target_total_q = mix_local_qs(mixer_network.target_mixer(), target_local_qs, next_states) y_true = rewards + gamma * (1-dones) * target_total_q local_qs = [agent(state) for state, agent in zip(states.permute(1,0,2), agent_networks)] total_q = mix_local_qs(mixer_network.mixer(), local_qs, states) loss = F.mse_loss(total_q.squeeze(), y_true.detach().squeeze()) optimizer.zero_grad() loss.backward() clip_gradients(optimizer.param_groups) optimizer.step() return loss.item() ``` #### 总结 综上所述,QMIX提供了一条有效的路径让多个相互协作或者竞争关系下的实体共同探索最优解空间的同时保持较高的灵活性和可扩展性。这种方法不仅适用于静态场景也适合动态变化频繁的任务设定下寻求平衡点的需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值