多智能体MAPPO代码环境配置以及代码讲解

MAPPO代码环境配置

MAPPO是2021年一篇将PPO算法扩展至多智能体的论文,其论文链接地址为:https://arxiv.org/abs/2103.01955
对应的官方代码链接为https://github.com/marlbenchmark/on-policy

代码文件夹内容讲解

所有核心代码都位于 onpolicy 文件夹中。 algorithms/子文件夹包含 MAPPO 的特定于算法的代码。

 envs/ 文件夹包含 MPE、SMAC 和 Hanabi 的环境的实现。

 用于执行训练部署和策略更新的代码包含在 runner/ 文件夹中 - 每个环境都有一个runner。

 可以在 scripts/ 文件夹中找到用于使用默认超参数进行训练的可执行脚本。 这些文件按以下方式命名:train_algo_environment.sh。 在每个文件中,映射名称(在 SMAC 和 MPE 的情况下)可以更改。

 可以在 scripts/train/ 文件夹中找到每个环境的 Python 训练脚本。

 config.py 文件包含相关的超参数和环境设置。

配置开始

本配置在Ubuntu 16/18/20,可以在CPUGPU上跑程序,本文按照GPU版本配置环境

  1. 创建虚拟环境: conda create -n MAPPO python==3.6.1
  2. 激活环境: conda activate MAPPO
  3. 安装GPU版本的pytorch:torch1.5.1+cuda10.1以及torchision0.6.1+cuda10.1
  4. 下载MAPPO代码后进入on-poilcy文件夹:cd on-policy
  5. 安装本环境:pip install -e
  6. 按照requirement.txt文件选择性安装包,其中tensorboard如果用gpu版本的话:安装tensorboard-gpu2.0.0,然后安装tensorboardX:pip install tensorboardX=2.0.0,若用cpu版本的tensorboard可以pip install tensorboard==1.14
  7. 最后一步:安装seaborn:pip install seaborn
  8. 三步进行运行程序:
  9. cd onpolicy/scripts
  10. chmod +x ./train_mpe.sh
  11. ./train_mpe.sh

配置完成后的一些常见问题

1.出现ImportError: cannot import name ‘get_backend’
解决方法:tensorflow版本问题:sudo pip install tensorflow --upgrade,如果还不行查看:

内容概要:本文详细介绍了在掼蛋游戏中应用多代理PPO(MAPPO)算法的过程。主要步骤包括在预训练的DMC模型基础上构建PPO网络架构,创建符合游戏特点的MAPPO智能体以完成集中式训练,还实现了模拟掼蛋游戏操作与决策流程的核心逻辑,并采用多线程技术实现了自博弈机制确保智能体的有效迭代进化。文中不仅展示了详细的代码实现路径如策略网络和价值网络的设计及其相互协作机制还有状态储存、评价和优化更新机制。还包括自博弈训练时对智能体表现的评估,从而有效提升了智能体的学习效率。 适合人群:从事强化学习研究、对棋牌游戏算法感兴趣的开发者或研究人员,具备一定的PythonPyTorch编程基础,熟悉多线程并发处理机制的人士。 使用场景及目标:通过在掼蛋这种复杂且具挑战性的多人非完全信息环境下进行MAPPO算法的应用,旨在解决传统单代理方法难以直接迁移的问题。该实验有助于加深对于MAPPO机制的理解,在提高智能体策略表现的同时也为其他类似领域的探索提供了新的思路和技术支持。 其他说明:需要注意的是,提供的代码中包含了一个简化版本的掼蛋游戏操作逻辑以及部分未明确给出细节的组件如DMC预训练模型,实际应用可能还需进一步改进和定制化修改。此外,考虑到多线程带来的性能优化及潜在同步问题,在大规模并行训练场景下,应该更加关注线程安全性和性能瓶颈。
### 关于独立智能体使用MAPPO算法的代码实现 对于多个独立智能体应用MAPPO(Multi-Agent Proximal Policy Optimization),核心在于如何处理集中式的评论家(critic)以及分布式的行为者(actor)。为了确保每个智能体能够基于全局信息优化策略,同时保持计算效率和简化设计[^1],通常采用的方法是在训练过程中引入一个共享的中央评论家来评估状态价值。 下面是一个简单的Python代码框架用于展示两个独立智能体环境下的MAPPO实现: ```python import torch from torch import nn, optim import numpy as np class ActorCritic(nn.Module): def __init__(self, obs_dim, action_dim): super(ActorCritic, self).__init__() # 定义行为者的网络结构 self.actor = nn.Sequential( nn.Linear(obs_dim, 64), nn.ReLU(), nn.Linear(64, action_dim), nn.Softmax(dim=-1)) # 定义评论家的网络结构 (仅用于中心化学习) self.critic = nn.Sequential( nn.Linear(sum([obs_dim]*num_agents), 64), # 假设有 num_agents 数量的智能体 nn.ReLU(), nn.Linear(64, 1)) def forward(self, x): raise NotImplementedError def act(self, state): probs = self.actor(state) dist = Categorical(probs=probs) action = dist.sample() log_prob = dist.log_prob(action).unsqueeze(-1) return action.item(), log_prob def train_policy(agent_policies, central_critic, transitions): states_list, actions_list, rewards_list, next_states_list, dones_list = zip(*transitions) all_states = torch.cat(states_list, dim=0) # 将所有智能体的状态拼接在一起形成全局视图 values = central_critic(all_states) advantages = compute_advantages(rewards_list, values.detach().numpy()) policy_losses = [] for i in range(num_agents): actor = agent_policies[i] _, old_log_probs = map(lambda s: actor.act(s)[1], states_list[i]) new_log_probs = list(map(lambda s,a: actor.act(torch.tensor(s))[1], next_states_list[i],actions_list[i])) ratio = torch.exp(new_log_probs - old_log_probs) surr1 = ratio * advantages[:,i].reshape((-1,1)) surr2 = torch.clamp(ratio, 1-eps_clip, 1+eps_clip)*advantages[:,i].reshape((-1,1)) loss = (-torch.min(surr1,surr2)).mean() optimizer.zero_grad() loss.backward(retain_graph=True) optimizer.step() policy_losses.append(loss.item()) return sum(policy_losses)/len(policy_losses) # 初始化参数和其他组件... num_agents = 2 agent_policies = [ActorCritic(input_dims, output_dims) for _ in range(num_agents)] central_critic = CentralizedCritic(sum([input_dims]*num_agents)) optimizer = Optimizer(...) ``` 此段代码展示了如何构建一个多智能体系统的模型,在该系统中每个智能体都有自己的行动决策机制(即`actor`部分),而所有的智能体会共同依赖同一个评价体系(即`central_critic`部分)。通过这种方式可以在不违反单一职责原则的情况下提高整体表现力[^2]。当涉及到更多数量级上的智能体时,这种方法的优势尤为明显,因为其允许更有效的协作并超越传统的单智能体强化学习方法[^3]。
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值