多智能体强化学习之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,即只需要利用觀測到的局部信息。
下面以兩個智能體的情況為例:
r1(s,a1)=Ea2∈A,s′∈S[r1(s′)p(s′∣s,a1,a2)π2(a2∣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?)=Ea2?∈A,s′∈S?[r1?(s′)p(s′∣s,a1?,a2?)π2?(a2?∣s)]
p1(s′∣s,a1)=∑a2∈Ap(s′∣s,a1,a2)π2(a2∣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?(s′∣s,a1?)=a2?∈A∑?p(s′∣s,a1?,a2?)π2?(a2?∣s)
根據論文描述,算法在以下約束條件下運行:(1)學習的策略只能在執行時只能使用本地信息(即它們自己的觀察結果),(2)我們無需知道環境的可微分動力學模型(3)我們對智能體之間的通信方法不做任何結構上的假設(即,我們不假設一個可區分的通信渠道)。 一旦滿足上述要求,那么將產生一個通用的多智能體學習算法,不僅可以應用于具有明確通信渠道的合作博弈,還可以應用競爭性博弈和只涉及主體之間物理交互的博弈。
論文中三個改進是:
代碼
def actor_network(name):with tf.variable_scope(name) as scope:x = state_inputx = 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 xdef critic_network(name, action_input, reuse=False):with tf.variable_scope(name) as scope:if reuse:scope.reuse_variables()x = state_inputx = 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不但要儲存自身的可觀察的狀態信息,還要儲存的是其它智能體的可觀測狀態信息。同時儲存自身和他人的動作信息。以及每個智能體的下一個狀態。
總結
以上是生活随笔為你收集整理的多智能体强化学习之MADDPG的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何采集淘宝最新价格
- 下一篇: 小新air15为啥没人买_联想小新Air