多智能体强化学习算法【二】【MADDPG、QMIX、MAPPO】
<p>相关文章:</p><p> </p>
<p>常见多智能体强化学习仿真环境介绍【一】{推荐收藏,真的牛}</p>
<p>多智能体强化学习算法【一】【MAPPO、MADDPG、QMIX】</p>
<p>多智能体强化学习算法【二】【MADDPG、QMIX、MAPPO】</p>
<p>多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】</p>
<h2>1. MADDPG</h2>
<h2>1.1 MADDPG简介</h2>
<p> 本章介绍OpenAI 2017发表在NIPS 上的一篇文章,《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》。主要是将AC算法进行了一系列改进,使其能够适用于传统RL算法无法处理的复杂多智能体场景。</p>
<p> 传统RL算法面临的一个主要问题是由于每个智能体都是在不断学习改进其策略,因此从每一个智能体的角度看,环境是一个动态不稳定的,这不符合传统RL收敛条件。并且在一定程度上,无法通过仅仅改变智能体自身的策略来适应动态不稳定的环境。由于环境的不稳定,将无法直接使用之前的经验回放等DQN的关键技巧。policy gradient算法会由于智能体数量的变多使得本就有的方差大的问题加剧。</p>
<p> MADDPG算法具有以下三点特征: 1. 通过学习得到的最优策略,在应用时只利用局部信息就能给出最优动作。 2. 不需要知道环境的动力学模型以及特殊的通信需求。 3. 该算法不仅能用于合作环境,也能用于竞争环境。</p>
<p><span style="color: rgba(254, 44, 36, 1)">MADDPG算法具有以下三点技巧</span>:</p>
<ol><li>集中式训练,分布式执行:训练时采用集中式学习训练critic与actor,使用时actor只用知道局部信息就能运行。critic需要其他智能体的策略信息,本文给了一种估计其他智能体策略的方法,能够只用知道其他智能体的观测与动作。</li><li>改进了经验回放记录的数据。为了能够适用于动态环境,每一条信息由<img alt="\left(x, x^{\prime}, a_{q}, \cdots, a_{n}, r_{1}, \cdots, r_{n}\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cleft%28x%2C%20x%5E%7B%5Cprime%7D%2C%20a_%7Bq%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%2C%20r_%7B1%7D%2C%20%5Ccdots%2C%20r_%7Bn%7D%5Cright%29"> 组成<img alt="x=\left(o_{1}, \cdots, o_{n}\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?x%3D%5Cleft%28o_%7B1%7D%2C%20%5Ccdots%2C%20o_%7Bn%7D%5Cright%29">表示每个智能体的观测。</li><li>利用策略集合效果优化(policy ensemble):对每个智能体学习多个策略,改进时利用所有策略的整体效果进行优化。以提高算法的稳定性以及鲁棒性。</li></ol>
<p>其实MADDPG本质上还是一个DPG算法,针对每个智能体训练一个需要全局信息的Critic以及一个需要局部信息的Actor,并且允许每个智能体有自己的奖励函数(reward function),因此可以用于合作任务或对抗任务。并且由于脱胎于DPG算法,因此动作空间可以是连续的。</p>
<h3>1) DQN</h3>
<p>DQN的思想就是设计一个<img alt="Q(s, a \mid \theta)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q%28s%2C%20a%20%5Cmid%20%5Ctheta%29">不断逼近真实的<img alt="Q(s, a )" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q%28s%2C%20a%20%29">函数。其中主要用到了两个技巧:<span style="color: rgba(254, 44, 36, 1)">1. 经验回放。2. 目标网络。</span>该技巧主要用来打破数据之间联系,因为神经网络对数据的假设是独立同分布,而MDP过程的数据前后有关联。打破数据的联系可以更好地拟合<img alt="Q(s, a )" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q%28s%2C%20a%20%29">函数。其代价函数为:</p>
<p style="text-align: center"><img alt="L(\theta)=E_{s, a, r, s^{\prime}}\left[(Q(s, a \mid \theta)-y)^{2}\right], \quad \text { where } \mathrm{y}=\mathrm{r}+\gamma \max _{\mathrm{a}^{\prime}} \overline{\mathrm{Q}}\left(\mathrm{s}^{\prime}, \mathrm{a}^{\prime} \mid \bar{\theta}\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?L%28%5Ctheta%29%3DE_%7Bs%2C%20a%2C%20r%2C%20s%5E%7B%5Cprime%7D%7D%5Cleft%5B%28Q%28s%2C%20a%20%5Cmid%20%5Ctheta%29-y%29%5E%7B2%7D%5Cright%5D%2C%20%5Cquad%20%5Ctext%20%7B%20where%20%7D%20%5Cmathrm%7By%7D%3D%5Cmathrm%7Br%7D&plus;%5Cgamma%20%5Cmax%20_%7B%5Cmathrm%7Ba%7D%5E%7B%5Cprime%7D%7D%20%5Coverline%7B%5Cmathrm%7BQ%7D%7D%5Cleft%28%5Cmathrm%7Bs%7D%5E%7B%5Cprime%7D%2C%20%5Cmathrm%7Ba%7D%5E%7B%5Cprime%7D%20%5Cmid%20%5Cbar%7B%5Ctheta%7D%5Cright%29"></p>
<p></p>
<p>其中<img alt="\bar{Q}\left(s^{\prime}, a^{\prime} \mid \bar{\theta}\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cbar%7BQ%7D%5Cleft%28s%5E%7B%5Cprime%7D%2C%20a%5E%7B%5Cprime%7D%20%5Cmid%20%5Cbar%7B%5Ctheta%7D%5Cright%29">表示目标网络,其参数更新与<img alt="\theta" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Ctheta">不同步(滞后)。具体可以参看值函数强化学习-DQN、DDQN和Dueling DQN算法公式推导分析。</p>
<h3>2)SPG(stochastic policy gradient)</h3>
<p>SPG算法不采用拟合Q函数的方式,而是直接优化累积回报来获得使回报最大的策略。假定参数化的策略为<img alt="\pi_{\theta}(a \mid s)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cpi_%7B%5Ctheta%7D%28a%20%5Cmid%20s%29">,累积回报为<img alt="J(\theta)=E_{s \sim \rho^{\pi}, a \sim \pi_{\theta}}\left[\sum_{t=0}^{\infty} \gamma^{t} r_{t}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?J%28%5Ctheta%29%3DE_%7Bs%20%5Csim%20%5Crho%5E%7B%5Cpi%7D%2C%20a%20%5Csim%20%5Cpi_%7B%5Ctheta%7D%7D%5Cleft%5B%5Csum_%7Bt%3D0%7D%5E%7B%5Cinfty%7D%20%5Cgamma%5E%7Bt%7D%20r_%7Bt%7D%5Cright%5D">。为了使<img alt="J(\theta)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?J%28%5Ctheta%29">最大化,直接对策略参数求导得到策略更新梯度:</p>
<p style="text-align: center"><img alt="\nabla_{\theta} J(\theta)=E_{s \sim \rho^{\pi}, a \sim \pi_{\theta}}\left[\nabla_{\theta} \log \pi_{\theta}(a \mid s) Q^{\pi}(s, a)\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cnabla_%7B%5Ctheta%7D%20J%28%5Ctheta%29%3DE_%7Bs%20%5Csim%20%5Crho%5E%7B%5Cpi%7D%2C%20a%20%5Csim%20%5Cpi_%7B%5Ctheta%7D%7D%5Cleft%5B%5Cnabla_%7B%5Ctheta%7D%20%5Clog%20%5Cpi_%7B%5Ctheta%7D%28a%20%5Cmid%20s%29%20Q%5E%7B%5Cpi%7D%28s%2C%20a%29%5Cright%5D"></p>
<p></p>
<p>AC算法也可以由此推出,如果按照DQN的方法拟合一个<img alt="Q(s, a \mid \theta)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q%28s%2C%20a%20%5Cmid%20%5Ctheta%29">函数,则这个参数化的<img alt="Q(s, a \mid \theta)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q%28s%2C%20a%20%5Cmid%20%5Ctheta%29">函数被称为Critic,<img alt="\pi_{\theta}(a \mid s)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cpi_%7B%5Ctheta%7D%28a%20%5Cmid%20s%29">被称为Actor。具体可以参看,随机策略梯度算法(stochastic-policy-gradient)。</p>
<h3>3) DPG</h3>
<p>上述两种算法都是针对随机策略, <img alt="\pi_{\theta}(a \mid s)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cpi_%7B%5Ctheta%7D%28a%20%5Cmid%20s%29"> 是一个在状态s对于各个动作a的条件概率分布。DPG针对确定性策略, <img alt="\mu_{\theta}(s): S \rightarrow A" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cmu_%7B%5Ctheta%7D%28s%29%3A%20S%20%5Crightarrow%20A"> 是一个状态空间到动作空间的映射。其思想与SPG相同,得到策略梯度公式为</p>
<p style="text-align: center"><img alt="\nabla_{\theta} J(\theta)=E_{s \sim \beta}\left[\left.\nabla_{\theta} \mu_{\theta}(s) \nabla_{a} Q^{\mu}(s, a)\right|_{a=\mu_{\theta}(s)}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cnabla_%7B%5Ctheta%7D%20J%28%5Ctheta%29%3DE_%7Bs%20%5Csim%20%5Cbeta%7D%5Cleft%5B%5Cleft.%5Cnabla_%7B%5Ctheta%7D%20%5Cmu_%7B%5Ctheta%7D%28s%29%20%5Cnabla_%7Ba%7D%20Q%5E%7B%5Cmu%7D%28s%2C%20a%29%5Cright%7C_%7Ba%3D%5Cmu_%7B%5Ctheta%7D%28s%29%7D%5Cright%5D"></p>
<p></p>
<p>DPG可以是使用AC的方法来估计一个Q函数,DDPG就是借用了DQN经验回放与目标网络的技巧,具体可以参看,确定性策略强化学习-DPG&DDPG算法推导及分析。</p>
<h2>1.2 MADDPG原理设计技巧</h2>
<h3>1.2.1 多智能体AC设计</h3>
<p>MADDPG集中式的学习,分布式的应用。因此我们允许使用一些额外的信息(全局信息)进行学习,只要在应用的时候使用局部信息进行决策就行。这点就是Q-learning的一个不足之处,Q-learning在学习与应用时必须采用相同的信息。所以这里MADDPG对传统的AC算法进行了一个改进,Critic扩展为可以利用其他智能体的策略进行学习,这点的进一步改进就是每个智能体对其他智能体的策略进行一个函数逼近。</p>
<p>我们用<img alt="\theta=\left[\theta_{1}, \cdots, \theta_{n}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Ctheta%3D%5Cleft%5B%5Ctheta_%7B1%7D%2C%20%5Ccdots%2C%20%5Ctheta_%7Bn%7D%5Cright%5D">表示n个智能体策略的参数, <img alt="\pi=\left[\pi_{1}, \cdot, \pi_{n}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cpi%3D%5Cleft%5B%5Cpi_%7B1%7D%2C%20%5Ccdot%2C%20%5Cpi_%7Bn%7D%5Cright%5D">表示n个智能体的策略。针对第i个智能体的累积期望奖励<img alt="J\left(\theta_{i}\right)=E_{s \sim \rho^{\pi}, a_{i} \sim \pi_{\theta_{i}}}\left[\sum_{t=0}^{\infty} \gamma^{t} r_{i, t}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?J%5Cleft%28%5Ctheta_%7Bi%7D%5Cright%29%3DE_%7Bs%20%5Csim%20%5Crho%5E%7B%5Cpi%7D%2C%20a_%7Bi%7D%20%5Csim%20%5Cpi_%7B%5Ctheta_%7Bi%7D%7D%7D%5Cleft%5B%5Csum_%7Bt%3D0%7D%5E%7B%5Cinfty%7D%20%5Cgamma%5E%7Bt%7D%20r_%7Bi%2C%20t%7D%5Cright%5D"> ,针对随机策略,求策略梯度为:</p>
<p><img alt="\nabla_{\theta_{i}} J\left(\theta_{i}\right)=E_{s \sim \rho^{\pi}, a_{i} \sim \pi_{i}}\left[\nabla_{\theta_{i}} \log \pi_{i}\left(a_{i} \mid o_{i}\right) Q_{i}^{\pi}\left(x, a_{1}, \cdots, a_{n}\right)\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cnabla_%7B%5Ctheta_%7Bi%7D%7D%20J%5Cleft%28%5Ctheta_%7Bi%7D%5Cright%29%3DE_%7Bs%20%5Csim%20%5Crho%5E%7B%5Cpi%7D%2C%20a_%7Bi%7D%20%5Csim%20%5Cpi_%7Bi%7D%7D%5Cleft%5B%5Cnabla_%7B%5Ctheta_%7Bi%7D%7D%20%5Clog%20%5Cpi_%7Bi%7D%5Cleft%28a_%7Bi%7D%20%5Cmid%20o_%7Bi%7D%5Cright%29%20Q_%7Bi%7D%5E%7B%5Cpi%7D%5Cleft%28x%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%5Cright%29%5Cright%5D"></p>
<p></p>
<p>其中<img alt="o_i" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?o_i">表示第i个智能体的观测, <img alt="x=\left" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?x%3D%5Cleft%5Bo_%7B1%7D%2C%20%5Ccdots%2C%20o_%7Bn%7D%5Cright%5D">表示观测向量,即状态。 <img alt="Q_{i}^{\pi}\left(x, a_{1}, \cdots, a_{n}\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q_%7Bi%7D%5E%7B%5Cpi%7D%5Cleft%28x%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%5Cright%29">表示第i个智能体集中式的状态-动作函数。由于是每个智能体独立学习自己的<img alt="Q_{i}^{\pi}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q_%7Bi%7D%5E%7B%5Cpi%7D">函数,因此每个智能体可以有不同的奖励函数(reward function),因此可以完成合作或竞争任务。</p>
<p>上述为随机策略梯度算法,下面我们拓展到确定性策略 <img alt="u_{\theta_{i}}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?u_%7B%5Ctheta_%7Bi%7D%7D">,梯度公式为</p>
<p><img alt="\nabla_{\theta_{i}} J\left(\mu_{i}\right)=E_{x, a \sim D}\left[\left.\nabla_{\theta_{i}} \mu_{i}\left(a_{i} \mid o_{i}\right) \nabla_{a_{i}} Q_{i}^{\mu}\left(x, a_{1}, \cdots, a_{n}\right)\right|_{a_{i}=\mu_{i}\left(o_{i}\right)}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cnabla_%7B%5Ctheta_%7Bi%7D%7D%20J%5Cleft%28%5Cmu_%7Bi%7D%5Cright%29%3DE_%7Bx%2C%20a%20%5Csim%20D%7D%5Cleft%5B%5Cleft.%5Cnabla_%7B%5Ctheta_%7Bi%7D%7D%20%5Cmu_%7Bi%7D%5Cleft%28a_%7Bi%7D%20%5Cmid%20o_%7Bi%7D%5Cright%29%20%5Cnabla_%7Ba_%7Bi%7D%7D%20Q_%7Bi%7D%5E%7B%5Cmu%7D%5Cleft%28x%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%5Cright%29%5Cright%7C_%7Ba_%7Bi%7D%3D%5Cmu_%7Bi%7D%5Cleft%28o_%7Bi%7D%5Cright%29%7D%5Cright%5D"></p>
<p></p>
<p>由以上两个梯度公式可以看出该算法与SPG与DPG十分类似,就像是将单体直接扩展到多体。但其实<img alt="Q_{i}^{u}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q_%7Bi%7D%5E%7Bu%7D">是一个非常厉害的技巧,针对每个智能体建立值函数,极大的解决了传统RL算法在Multi-agent领域的不足。D是一个经验存储(experience replay buffer),元素组成为<img alt="\left(x, x^{\prime}, a_{1}, \cdots, a_{n}, r_{1}, \cdots, r_{n}\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cleft%28x%2C%20x%5E%7B%5Cprime%7D%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%2C%20r_%7B1%7D%2C%20%5Ccdots%2C%20r_%7Bn%7D%5Cright%29"> 。集中式的critic的更新方法借鉴了DQN中TD与目标网络思想</p>
<p><img alt="L\left(\theta_{i}\right)=E_{x, a, r, x^{\prime}}\left[\left(Q_{i}^{\mu}\left(x, a_{1}, \cdots, a_{n}\right)-y\right)^{2}\right], \quad \text { where } y=r_{i}+\left.\gamma \bar{Q}_{i}^{\mu^{\prime}}\left(x^{\prime}, a_{1}^{\prime}, \cdots, a_{n}^{\prime}\right)\right|_{a_{j}^{\prime}=\mu_{j}^{\prime}\left(0_{j}\right)}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?L%5Cleft%28%5Ctheta_%7Bi%7D%5Cright%29%3DE_%7Bx%2C%20a%2C%20r%2C%20x%5E%7B%5Cprime%7D%7D%5Cleft%5B%5Cleft%28Q_%7Bi%7D%5E%7B%5Cmu%7D%5Cleft%28x%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%5Cright%29-y%5Cright%29%5E%7B2%7D%5Cright%5D%2C%20%5Cquad%20%5Ctext%20%7B%20where%20%7D%20y%3Dr_%7Bi%7D&plus;%5Cleft.%5Cgamma%20%5Cbar%7BQ%7D_%7Bi%7D%5E%7B%5Cmu%5E%7B%5Cprime%7D%7D%5Cleft%28x%5E%7B%5Cprime%7D%2C%20a_%7B1%7D%5E%7B%5Cprime%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%5E%7B%5Cprime%7D%5Cright%29%5Cright%7C_%7Ba_%7Bj%7D%5E%7B%5Cprime%7D%3D%5Cmu_%7Bj%7D%5E%7B%5Cprime%7D%5Cleft%280_%7Bj%7D%5Cright%29%7D"></p>
<p></p>
<p> <img alt="\bar{Q}_{i}^{\mu^{\prime}}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cbar%7BQ%7D_%7Bi%7D%5E%7B%5Cmu%5E%7B%5Cprime%7D%7D">表示目标网络, <img alt="\mu^{\prime}=\left[\mu_{1}^{\prime}, \cdots, \mu_{n}^{\prime}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cmu%5E%7B%5Cprime%7D%3D%5Cleft%5B%5Cmu_%7B1%7D%5E%7B%5Cprime%7D%2C%20%5Ccdots%2C%20%5Cmu_%7Bn%7D%5E%7B%5Cprime%7D%5Cright%5D">为目标策略具有滞后更新的参数 。<img alt="\theta_{j}^{\prime}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Ctheta_%7Bj%7D%5E%7B%5Cprime%7D">其他智能体的策略可以采用拟合逼近的方式得到,而不需要通信交互。</p>
<p>如上可以看出critic借用了全局信息学习,actor只是用了局部观测信息。MADDPG的一个启发就是,如果我们知道所有的智能体的动作,那么环境就是稳定的,就算策略在不断更新环境也是恒定的,因为模型动力学使稳定的 :</p>
<p><img alt="P\left(s^{\prime} \mid s, a_{1}, \cdots, a_{n}, \pi_{1}, \cdots, \pi_{n}\right)=P\left(s^{\prime} \mid s, a_{1}, \cdots, a_{n}\right)=P\left(s^{\prime} \mid s, a_{1}, \cdots, a_{n}, \pi_{1}^{\prime}, \cdots, \pi_{n}^{\prime}\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?P%5Cleft%28s%5E%7B%5Cprime%7D%20%5Cmid%20s%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%2C%20%5Cpi_%7B1%7D%2C%20%5Ccdots%2C%20%5Cpi_%7Bn%7D%5Cright%29%3DP%5Cleft%28s%5E%7B%5Cprime%7D%20%5Cmid%20s%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%5Cright%29%3DP%5Cleft%28s%5E%7B%5Cprime%7D%20%5Cmid%20s%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%2C%20%5Cpi_%7B1%7D%5E%7B%5Cprime%7D%2C%20%5Ccdots%2C%20%5Cpi_%7Bn%7D%5E%7B%5Cprime%7D%5Cright%29"></p>
<h3>1.2.2 估计其他智能体策略</h3>
<p>在(1)式中,我们用到了其他智能体的策略,这需要不断的通信来获取,但是也可以放宽这个条件,通过对其他智能体的策略进行估计来实现。每个智能体维护n-1个策略逼近函数<img alt="\hat{\mu}_{\phi_{i}^{j}}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Chat%7B%5Cmu%7D_%7B%5Cphi_%7Bi%7D%5E%7Bj%7D%7D">表示第i个智能体对第j个智能体策略<img alt="u_j" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?u_j">的函数逼近。其逼近代价为对数代价函数,并且加上策略的熵,其代价函数可以写为:</p>
<p><img alt="L\left(\phi_{i}^{j}\right)=-E_{o_{j}, a_{j}}\left[\log \hat{\mu}_{\phi_{i}^{j}}\left(a_{j} \mid o_{j}\right)+\lambda H\left(\hat{\mu}_{\phi_{i}^{j}}\right)\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?L%5Cleft%28%5Cphi_%7Bi%7D%5E%7Bj%7D%5Cright%29%3D-E_%7Bo_%7Bj%7D%2C%20a_%7Bj%7D%7D%5Cleft%5B%5Clog%20%5Chat%7B%5Cmu%7D_%7B%5Cphi_%7Bi%7D%5E%7Bj%7D%7D%5Cleft%28a_%7Bj%7D%20%5Cmid%20o_%7Bj%7D%5Cright%29&plus;%5Clambda%20H%5Cleft%28%5Chat%7B%5Cmu%7D_%7B%5Cphi_%7Bi%7D%5E%7Bj%7D%7D%5Cright%29%5Cright%5D"></p>
<p></p>
<p>只要最小化上述代价函数,就能得到其他智能体策略的逼近。因此可以替换(1)式中的y。</p>
<p><img alt="y=r_{i}+\gamma \bar{Q}_{i}^{\mu^{\prime}}\left(x^{\prime}, \hat{\mu}_{\phi_{i}^{j}}^{\prime 1}\left(o_{1}\right), \cdots, \hat{\mu}_{\phi_{i}^{j}}^{\prime n}\left(o_{n}\right)\right)" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?y%3Dr_%7Bi%7D&plus;%5Cgamma%20%5Cbar%7BQ%7D_%7Bi%7D%5E%7B%5Cmu%5E%7B%5Cprime%7D%7D%5Cleft%28x%5E%7B%5Cprime%7D%2C%20%5Chat%7B%5Cmu%7D_%7B%5Cphi_%7Bi%7D%5E%7Bj%7D%7D%5E%7B%5Cprime%201%7D%5Cleft%28o_%7B1%7D%5Cright%29%2C%20%5Ccdots%2C%20%5Chat%7B%5Cmu%7D_%7B%5Cphi_%7Bi%7D%5E%7Bj%7D%7D%5E%7B%5Cprime%20n%7D%5Cleft%28o_%7Bn%7D%5Cright%29%5Cright%29"></p>
<p></p>
<p>在更新<img alt="Q_i^{u}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?Q_i%5E%7Bu%7D">之前,利用经验回放的一个采样batch更新<img alt="\hat{\mu}_{\phi_{i}^{j}}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Chat%7B%5Cmu%7D_%7B%5Cphi_%7Bi%7D%5E%7Bj%7D%7D"> 。</p>
<h3>1.2.3. 策略集合优化(policies ensemble)</h3>
<p>这个技巧也是本文的一个亮点。多智能体强化学习一个顽固的问题是由于每个智能体的策略都在更新迭代导致环境针对一个特定的智能体是动态不稳定的。这种情况在竞争任务下尤其严重,经常会出现一个智能体针对其竞争对手过拟合出一个强策略。但是这个强策略是非常脆弱的,也是我们希望得到的,因为随着竞争对手策略的更新改变,这个强策略很难去适应新的对手策略。</p>
<p>为了能更好的应对上述情况,MADDPG提出了一种策略集合的思想,第i个智能体的策略 由一个具有K个子策略的集合构成,在每一个训练episode中只是用一个子策略 <img alt="\mu_{\theta{i}}^{(k)}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cmu_%7B%5Ctheta%7Bi%7D%7D%5E%7B%28k%29%7D"> (简写为 <img alt="\mu_{i}^{(k)}" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cmu_%7Bi%7D%5E%7B%28k%29%7D">)。对每一个智能体,我们最大化其策略集合的整体奖励 。</p>
<p><img alt="J_{e}\left(\mu_{i}\right)=E_{k \sim \operatorname{unif}(1, \mathrm{~K}), s \sim \rho^{\mu}, a \sim \mu_{i}^{(k)}}\left[\sum_{t=0}^{\infty} \gamma^{t} r_{i, t}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?J_%7Be%7D%5Cleft%28%5Cmu_%7Bi%7D%5Cright%29%3DE_%7Bk%20%5Csim%20%5Coperatorname%7Bunif%7D%281%2C%20%5Cmathrm%7B~K%7D%29%2C%20s%20%5Csim%20%5Crho%5E%7B%5Cmu%7D%2C%20a%20%5Csim%20%5Cmu_%7Bi%7D%5E%7B%28k%29%7D%7D%5Cleft%5B%5Csum_%7Bt%3D0%7D%5E%7B%5Cinfty%7D%20%5Cgamma%5E%7Bt%7D%20r_%7Bi%2C%20t%7D%5Cright%5D">并且我们为每一个子策略k构建一个记忆存储 。我们优化策略集合的整体效果,因此针对每一个子策略的更新梯度为:</p>
<p><img alt="\nabla_{\theta_{i}^{(k)}} J_{e}\left(\mu_{i}\right)=\frac{1}{K} E_{x, a \sim D_{i}^{(k)}}\left[\left.\nabla_{\theta_{i}^{(k)}} \mu_{i}^{(k)}\left(a_{i} \mid o_{i}\right) \nabla_{a_{i}} Q^{\mu_{i}}\left(x, a_{1}, \cdots, a_{n}\right)\right|_{a_{i}=\mu_{i}^{(k)}\left(o_{i}\right)}\right]" class="mathcode lazyload" data-src="https://latex.codecogs.com/gif.latex?%5Cnabla_%7B%5Ctheta_%7Bi%7D%5E%7B%28k%29%7D%7D%20J_%7Be%7D%5Cleft%28%5Cmu_%7Bi%7D%5Cright%29%3D%5Cfrac%7B1%7D%7BK%7D%20E_%7Bx%2C%20a%20%5Csim%20D_%7Bi%7D%5E%7B%28k%29%7D%7D%5Cleft%5B%5Cleft.%5Cnabla_%7B%5Ctheta_%7Bi%7D%5E%7B%28k%29%7D%7D%20%5Cmu_%7Bi%7D%5E%7B%28k%29%7D%5Cleft%28a_%7Bi%7D%20%5Cmid%20o_%7Bi%7D%5Cright%29%20%5Cnabla_%7Ba_%7Bi%7D%7D%20Q%5E%7B%5Cmu_%7Bi%7D%7D%5Cleft%28x%2C%20a_%7B1%7D%2C%20%5Ccdots%2C%20a_%7Bn%7D%5Cright%29%5Cright%7C_%7Ba_%7Bi%7D%3D%5Cmu_%7Bi%7D%5E%7B%28k%29%7D%5Cleft%28o_%7Bi%7D%5Cright%29%7D%5Cright%5D"></p>
<p></p>
<p>以上就是MADDPG所有的内容,仿真效果也很好的证明了MADDPG在多智能体系统中的有效性。 MADDPG是OpenAI给的仿真代码。</p>
<p></p>
<p></p><br><br>
来源:https://www.cnblogs.com/ting1/p/16833989.html
頁:
[1]