多智能体强化学习之MADDPG

论文原文:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments

论文翻译:MADDPG翻译

阅读本文需要强化学习基础,可以参考我前面的文章:多智能体强化学习入门

关于MADDPG强化学习算法的基础DDPG的可以查看我的文章:强化学习实践教学

对于MADDPG推荐的博客有:探秘多智能体强化学习-MADDPG算法原理及简单实现,里面包含代码实现。

github代码(基于Tensorflow):https://github.com/princewen/tensorflow_practice/tree/master/RL/Basic-MADDPG-Demo

MADDPG算法是单智能体算法DDPG在多智能体环境下的改进。其中最核心的差别就是,每个Agent的Critic部分都能够获取所有Agent的动作信息,进行中心化训练和非中心化执行。即在训练的时候,引入可以观察全局的critic来指导actor训练,而测试的时候只使用有局部观测的actor采取行动。off-line采用中心化训练,on-line采用非中心化执行,on-line与off-line的共同点就是actor,即只需要利用观测到的局部信息。

下面以两个智能体的情况为例:
r 1 ( s , a 1 ) = E a 2 ∈ A , s ′ ∈ S [ r 1 ( s ′ ) p ( s ′ ∣ s , a 1 , a 2 ) π 2 ( a 2 ∣ s ) ] r_1(s,a_1) = E_{a_2 \in A,s' \in S}[r_1(s')p(s'|s,a_1,a_2) \pi_2(a_2| s)] r1(s,a1)=Ea2A,sS[r1(s)p(ss,a1,a2)π2(a2s)]

p 1 ( s ′ ∣ s , a 1 ) = ∑ a 2 ∈ A p ( s ′ ∣ s , a 1 , a 2 ) π 2 ( a 2 ∣ s ) p_1(s' |s ,a_1) = \sum_{a_2 \in A} p(s' |s,a_1,a_2) \pi_2 (a_2| s) p1(ss,a1)=a2Ap(ss,a1,a2)π2(a2s)

根据论文描述,算法在以下约束条件下运行:(1)学习的策略只能在执行时只能使用本地信息(即它们自己的观察结果),(2)我们无需知道环境的可微分动力学模型(3)我们对智能体之间的通信方法不做任何结构上的假设(即,我们不假设一个可区分的通信渠道)。 一旦满足上述要求,那么将产生一个通用的多智能体学习算法,不仅可以应用于具有明确通信渠道的合作博弈,还可以应用竞争性博弈和只涉及主体之间物理交互的博弈。

论文中三个改进是:

  1. 集中式训练,分布式执行:训练时采用集中式学习训练critic与actor,使用时actor只用知道局部信息就能运行。critic需要其他智能体的策略信息,本文给了一种估计其他智能体策略的方法,能够只用知道其他智能体的观测与动作。
  2. 改进了经验回放记录的数据。为了能够适用于动态环境,每一条信息由 ( x , x ′ , a q , . . . , a n , r 1 , . . . , r n ) (x,x',a_q,...,a_n,r_1,...,r_n) (x,x,aq,...,an,r1,...,rn) 组成, x = ( o 1 , . . . , o n ) x = (o_1,...,o_n) x=(o1,...,on) 表示每个智能体的观测。
  3. 利用策略集合效果优化(policy ensemble):对每个智能体学习多个策略,改进时利用所有策略的整体效果进行优化。以提高算法的稳定性以及鲁棒性。

在这里插入图片描述

代码

def actor_network(name):
    with tf.variable_scope(name) as scope:
        x = state_input
        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, 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, self.nb_actions,
        kernel_initializer=tf.random_uniform_initializer(minval=-3e-3, maxval=3e-3))
        x = tf.nn.tanh(x)
    return x


def critic_network(name, action_input, reuse=False):
    with tf.variable_scope(name) as scope:
        if reuse:
            scope.reuse_variables()

        x = state_input
        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.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

上面是模型部分的代码,actor部分相对于DDPG没有变化,Critic部分只需要加入其它智能体的动作作为输入即可。

 # 最大化Q值
self.actor_loss = -tf.reduce_mean(
critic_network(name + '_critic', action_input=tf.concat([self.action_output, other_action_input], axis=1),
reuse=True))
self.actor_train = self.actor_optimizer.minimize(self.actor_loss)

self.target_Q = tf.placeholder(shape=[None, 1], dtype=tf.float32)
self.critic_loss = tf.reduce_mean(tf.square(self.target_Q - self.critic_output))
self.critic_train = self.critic_optimizer.minimize(self.critic_loss)

在Loss计算上可以看到依旧遵循DDPG的方法。Critic的估计值尽量靠近预测值,actor尽量使得Critic的估计值越大越好。

agent1_memory.add(np.vstack([o_n[0], o_n[1], o_n[2]]),
                  np.vstack([agent1_action[0], agent2_action[0], agent3_action[0]]),
                  r_n[0], np.vstack([o_n_next[0], o_n_next[1], o_n_next[2]]), False)

agent2_memory.add(np.vstack([o_n[1], o_n[2], o_n[0]]),
                  np.vstack([agent2_action[0], agent3_action[0], agent1_action[0]]),
                  r_n[1], np.vstack([o_n_next[1], o_n_next[2], o_n_next[0]]), False)

agent3_memory.add(np.vstack([o_n[2], o_n[0], o_n[1]]),
                  np.vstack([agent3_action[0], agent1_action[0], agent2_action[0]]),
                  r_n[2], np.vstack([o_n_next[2], o_n_next[0], o_n_next[1]]), False)

在经验池储存上,MADDPG不但要储存自身的可观察的状态信息,还要储存的是其它智能体的可观测状态信息。同时储存自身和他人的动作信息。以及每个智能体的下一个状态。

  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
多智能体强化学习是指在一个环境中存在多个智能体,每个智能体都有自己的观察状态和可以执行的动作,并且它们通过相互作用来实现某种任务的学习过程。在构建多智能体强化学习系统时,我们需要考虑每个智能体的决策策略、交互方式以及如何协调它们的行为。 引用中提到了传统算法在多智能体环境下的一些短板。传统的Q学习算法在多智能体环境中不适用,因为每个智能体的策略都在发生变化,导致环境的不稳定性,从而带来学习稳定性的挑战。经典的DQN算法也不适用,因为不知道其他智能体的状态会导致自身状态转移的不确定性,阻止了以往经验重放的直接使用。此外,策略梯度(PG)算法在多智能体环境中也不适用,因为智能体数量的增加会加剧固有的方差大的问题。 为了解决这些问题,引用提到了一种名为MADDPG(Multi-Agent Deep Deterministic Policy Gradient)的算法。MADDPG采用了集中式训练和分散式执行的框架。在训练时,每个智能体的Critic接收除了自身的状态-动作信息外,还包括其他智能体的动作和状态信息。而在应用时,只利用局部信息即可给出最优动作。这种框架的优势是不仅适用于合作,还适用于竞争性或合作竞争混合的情况。此外,MADDPG算法不需要知道环境的动力学模型以及特殊的通信需求。 因此,在构建多智能体强化学习系统时,我们可以考虑使用MADDPG算法,采用集中式训练和分散式执行的框架,使智能体能够通过相互协作或竞争来学习并完成任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [多智能体强化学习在智能工厂在线调度中应用](https://blog.csdn.net/crazy_girl_me/article/details/123138099)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [多智能体强化学习算法MADDPG(一:由单智能体强化学习多智能体强化学习)](https://blog.csdn.net/qq_40089637/article/details/108377307)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值