日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多智能体强化学习之MADDPG

發布時間:2024/3/24 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多智能体强化学习之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,sS?[r1?(s)p(ss,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?(ss,a1?)=a2?A?p(ss,a1?,a2?)π2?(a2?s)

根據論文描述,算法在以下約束條件下運行:(1)學習的策略只能在執行時只能使用本地信息(即它們自己的觀察結果),(2)我們無需知道環境的可微分動力學模型(3)我們對智能體之間的通信方法不做任何結構上的假設(即,我們不假設一個可區分的通信渠道)。 一旦滿足上述要求,那么將產生一個通用的多智能體學習算法,不僅可以應用于具有明確通信渠道的合作博弈,還可以應用競爭性博弈和只涉及主體之間物理交互的博弈。

論文中三個改進是:

  • 集中式訓練,分布式執行:訓練時采用集中式學習訓練critic與actor,使用時actor只用知道局部信息就能運行。critic需要其他智能體的策略信息,本文給了一種估計其他智能體策略的方法,能夠只用知道其他智能體的觀測與動作。
  • 改進了經驗回放記錄的數據。為了能夠適用于動態環境,每一條信息由(x,x′,aq,...,an,r1,...,rn)(x,x',a_q,...,a_n,r_1,...,r_n)(x,x,aq?,...,an?,r1?,...,rn?) 組成,x=(o1,...,on)x = (o_1,...,o_n)x=(o1?,...,on?) 表示每個智能體的觀測。
  • 利用策略集合效果優化(policy ensemble):對每個智能體學習多個策略,改進時利用所有策略的整體效果進行優化。以提高算法的穩定性以及魯棒性。
  • 代碼

    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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。