文章目录
前言
认识到自己确实没有很多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:
这是所有可以被表示为表格的