[TOC]
深度解析MADDPG
MADDPG原理
OpenAI 2017论文《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》
知乎已经比较详细介绍了
本文主要分析该开源程序的架构。
该程序主要是对 文章中的environment的实验进行房展
在试验中 存在 agent 和landmarks
实验一:speak 不能动 但是可以看,listener说一个颜色 listener 就到一个颜色的landmark上去
实验二:在这种经典的捕食者-食饵游戏变体中,N个较慢的Predator在Landmark阻碍下追赶速度更快的Prey
每一个Predator碰撞到prey,代理人得到奖励,而对手受到惩罚。
实验三 agent必须通过进行合作,以达到Landmark。必须躲避其他agent 到达相同的地标。
实验四:N个agent要到N个landmark上去,然而,一个adversary也希望到达目标地标,这个adversary不知道哪个地标是正确的。agent 根据adversary到正确地点的距离受到负reward。
算法github
环境github
程序架构
强化学习的主要两个部分即 环境 和 算法
环境 主要是通过 主函数中 make-env创建
def make_env(scenario_name, arglist, benchmark=False):
from multiagent.environment import MultiAgentEnv
import multiagent.scenarios as scenarios
# load scenario from script
scenario = scenarios.load(scenario_name + ".py").Scenario()
# create world
world = scenario.make_world()
# create multiagent environment
if benchmark:
env = MultiAgentEnv(world, scenario.reset_world, scenario.reward, scenario.observation, scenario.benchmark_data)
else:
env = MultiAgentEnv(world, scenario.reset_world, scenario.reward, scenario.observation)
return env
算法 主要是通过主函数中 get_trainers创建
def get_trainers(env, num_adversaries, obs_shape_n, arglist):
trainers = []
model = mlp_model
trainer = MADDPGAgentTrainer
for i in range(num_adversaries):
trainers.append(trainer(
"agent_%d" % i, model, obs_shape_n, env.action_space, i, arglist,
local_q_func=(arglist.adv_policy=='ddpg')))
for i in range(num_adversaries, env.n):
trainers.append(trainer(
"agent_%d" % i, model, obs_shape_n, env.action_space, i, arglist,
local_q_func=(arglist.good_policy=='ddpg')))
return trainers
在每一次迭代中,都会计算所有agent的动作
然后将所有agent的动作送入 step ,并得到reward ,在这里reward对agent都是相同的。
每一个agent都拥有自己的经验池,并将所有的都进行更新。
同样每次都对所有的agent都运行一遍update