概念引入

强化学习

马尔可夫决策过程

算法思想

VDN可以说是QMIX算法的前身

主要思想是把总的Q分解为多个Q之和,Q即对应智能体的动作价值


即:视多为一

但是也有副作用,那就是,累计出来的Q并不是针对具体情况,具体条件的Q,并没有具体意义。

算法复现

首先定义每个智能体的 QLearner类,将默认参数初始化后,判断为VDN网络,则将self.mixer初始化为VDNMixer(),并将网络参数复制给 self.optimiser使用优化算法RMSprop,其中参数根据类中的默认参数设置。

class QLearner:def __init__(self,mac,scheme,logger,args):self.args = argsself.mac=macself.logger = loggerself.params = list(mac.parametes())self.last_target_update_episode=0self.mixer = Noneif args.mixer is not None:if args.mixer == "vdn":self.mixer = VDNMixer()else:raise ValueError("Mixer {} not recognised.".format(args.mixer))self.params += list(self.mixer.parametes())self.target_mixer = copy,deepcopy(self.mixer)self.optimiser = RMSprop(params = self.params,lr = args.lr,alpha = args.optm_alpha,eps = args.optm_eps)self.log_stats_t = -self.args.leraner_log_interval -1

在训练函数中,先获取有关参数的值,之后计算估计Q的值,将 agent_outs 存入 mac_out中,循环结束后,将 mac_out第一个维度数值进行叠加,形成新的tensor,最后为每个智能体所采取的操作选择Q值

def train(self,batch:EpisodeBatch,t_env:int,episode_num:int):rewards = batch["rewards"][:,:-1]#视多为一actions = batch["actions"][:,:-1]terminated = batch["terminated"][:,:-1].float()mask = batch["filled"][:,:-1].float()mask[:,:-1]=mask[:,:-1]*(1 - terminated[:,:-1])avail_actions = batch["avail_actions"]mac_out = []self.mac.init_hidden(batch.batch_size)for t in range(batch.max_seq_length):agent_outs = self.max.forward(batch,t = t)mac_out.append(agent_outs)mac_out - torch.stack(mac,dim = 1)chosen_action_qvals = th.gather(mac_out[:,:-1],dim = 3,index = actions).squeeze(3)

之后计算目标网络所需的Q值,得到 target_mac_out.同上,对第一个维度进行叠加, target_mac_out = th.stack(target_mac_out[1:],dim=1)
剔除不可用动作,target_mac_out[avail_actions[:,1:]==0] = -9999999若设置为双Qlearning则同样的操作用于 mac_out
即原网络的Q值并得到其中的最大值索引,并提取 target_mac_out中对应的值,target_max_qvals = torch.gather(target_mac_out,3,cur_max_actions).squeeze(3)
否则,target_max_qvals = target_mac_out.max(dim=3)[0]

target_mac_out = []
self.target_mac.init_hidden(batch.batch_size)
for t in range(batch.max_seq_length):target_agent_outs = self.target_mac.forward(batch,t=t)target_mac_out.append(target_agent_outs)target_mac_out = th.stack(target_mac_out[1:],dim=1)target_mac_out[avail_actions[:,1:]==0] = -9999999if self.args.double_q:mac_out[avail_actions==0] = -9999999cur_max_actions = mac_out[:,1:].max(dim=3,keepdim = True)[1]
else:target_max_qvals = target_mac_out.max(dim=3)[0]

原网络和目标网络分别将操作选择Q值和最大Q值估计输入网络,之后计算1步Q-learning目标,targets = rewards + self.args.gamma * (1 - terminated) * target_max_qvals
和 td_error = (chosen_action_qvals - targets.detach())输出来自填充数据的目标,masked_td_error = td_error * mask最后计算l2损失,即实际数据的平均值


if self,mixer is not None:chosen_action_qvals = self.mixer(chosen_action_qvals,batch["state"][:,:-1])target_max_qvals = self.target_mixer(target_max_qvals,batch["state"][:,:-1])
targets = rewards + self.args.gamma * (1 - terminated) * target_max_qvals
td_error = (chosen_action_qvals - targets.detach())
mask = mask.expend_as(td_error)
masked_td_error = td_error * mask
loss = (masked_td_error **2).sum()/mask.sum()

协同多智能体学习的价值分解网络的原理与代码复现相关推荐

  1. 牛津教授吐槽DeepMind心智神经网络,还推荐了这些多智能体学习论文

    夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI DeepMind最近又有一篇论文刷了屏: 在Machine Theory of Mind中,DeepMind提出了"机器心智理论网 ...

  2. 【深度学习】搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了

    作者丨科技猛兽 编辑丨极市平台 导读 本文对Vision Transformer的原理和代码进行了非常全面详细的解读,一切从Self-attention开始.Transformer的实现和代码以及Tr ...

  3. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第3章-具有扩散作用的多智能体系统领导-跟随一致性

    第2章 回到目录 第4章 第3章-具有扩散作用的多智能体系统领导-跟随一致性 3.1 引言 3.2 问题描述 3.3 准备工作 3.4 多智能体系统领导-跟随一致性控制 3.5 具有扩散作用的多智能体 ...

  4. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第2章-一类多智能体系统的领导-跟随一致性

    第1章 回到目录 第3章 第2章-一类多智能体系统的领导-跟随一致性 2.1 引言 2.2 问题描述 2.3 无时滞的多智能体系统领导-跟随一致性 2.3.1 固定拓扑结构 2.3.2 切换拓扑结构 ...

  5. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第1章-绪论

    无 回到目录 第2章 第1章-绪论 1.1 多智能体系统的一致性 1.1.1 研究背景 1.1.2 研究现状 1. 一阶积分器系统 2. 二阶系统 3. 高阶系统 4. 线性系统 5. 非线性系统 1 ...

  6. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-目录

    无 回到目录 第1章 目录 跳转链接 第1章-绪论 跳转链接 章节 跳转链接 第1章 绪论 第2章 一类多智能体系统的领导-跟随一致性 第3章 具有扩散作用的多智能体系统领导-跟随一致性 第4章 具有 ...

  7. 控制智能体学习21点游戏最佳策略

    关于强化学习可以看之前文章:强化学习介绍 MC常量控制 最优策略 灰色:要牌 绿色:停牌 MC常量控制 有可用王牌 状态动作价值函数 MC常量控制 无可用王牌 状态动作价值函数

  8. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第9章-结论与展望

    第8章 回到目录 无 第9章-结论与展望 9.1 主要结论 9.2 研究工作展望 9.1 主要结论 9.2 研究工作展望

  9. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第8章-Lurie 型动态网络自适应牵制控制

    第7章 回到目录 第9章 第8章-Lurie 型动态网络自适应牵制控制 8.1 引言 8.2 问题描述 8.3 无时滞和干扰的系统簇同步分析 8.4 外部干扰的系统簇同步分析 8.5 时滞和干扰的系统 ...

  10. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第7章-Lurie 型动态网络的鲁棒 H 无穷簇同步

    第6章 回到目录 第8章 第7章-Lurie 型动态网络的鲁棒 H 无穷簇同步 7.1 引言 7.2 问题描述 7.3 主要结果 7.3.1 无时滞 Lurie 型子系统 7.3.2 时滞 Lurie ...

最新文章

  1. mysql简易oa系统_基于mybatis设计简单OA系统问题2
  2. EOS/普元:中国IT业的悲哀
  3. Golang之envconfig的使用
  4. python3中zip()函数的用法
  5. java linux 串口_Linux Java 串口通信 | 学步园
  6. P4929-[模板]舞蹈链(DLX)
  7. JNI_Android项目中调用.so动态库实现详解【转】
  8. Skype for Business Server 2015-13-IISARR-2-发布-2-前端服务器
  9. 对我有利就契约,不利就废纸
  10. android textview 字体边框,为TextView添加一个边框的几种办法
  11. 国民岳父的“屁民理论”
  12. springboot操作ES之ElasticSearch_EasyEs
  13. 英语单词: entropy;熵
  14. 2021华为软挑部分答疑——哪些你有错却总是找不到的地方,我来带你找啦(含标准输入代码)
  15. 视口锁定解锁lisp_CAD锁定和解锁视口的快捷键分别是什么
  16. RISC-V又一开源SoC-zqh_riscv
  17. Service 定义(startService、bindService、IntentService)
  18. RabbitMq工具类(springboot)
  19. 将指定的时间戳转换为日期格式
  20. 网安学习-内网渗透3

热门文章

  1. 青山遮不住——2020的10大技术趋势
  2. 利用局域网,传输文件
  3. layUI中table重载后表头时间控件失效解决方法,已实践
  4. 批判性思维-真理符合论
  5. linux下sybase创建数据库,sybase数据库环境搭建教程(多图教程)
  6. linux上的mysql数据库恢复
  7. html5新增graph,Qunee for HTML5 - 中文 : Graph组件介绍
  8. YALMIP学习(一):入门
  9. 树状数组专题【完结】
  10. rtmp代理php源码_RTMP直播系统(示例代码)