多智能体的情形相比于单智能体更加复杂,因为每个智能体在和环境交互的同时也在和其他智能体进行直接或者间接的交互。多智能体强化学习可以分为以下类别
集中式强化学习
由一个全局学习单元承担学习任务,以整个多智能体系统的整体状态为输入,输出各个智能体的动作。
独立强化学习
每个智能体都是独立的学习主体,只考虑自身的观测环境和策略利益
社会强化学习
独立强化学习与社会/经济模型的结合,模拟人类社会中人类个体的交互过程,用社会学和管理学的方法调节智能体之间的关系
群体强化学习
集中训练-分布执行CTDE范式,融合集中学习和独立学习的优势。在训练阶段,智能体利用全局信息集中学习;在执行阶段,智能体仅使用自身观测状态和局部信息选择动作
7.1 IPPO算法
每个智能体独立使用单智能体算法PPO进行训练
算法流程
对于N个智能体,为每个智能体初始化各自的策略以及价值函数
for \text{for}for训练轮数k = 0 , 1 , 2 , ⋯ do k=0,1,2,\cdots\text{do}k=0,1,2,⋯do
所有智能体在环境中交互分别获得各自的的一条轨迹数据
对每个智能体,基于当前的价值函数用GAE计算优质函数的估计
对每个智能体,通过最大化其PPO-截断的目标来更新其策略
对每个智能体,通过均方误差损失函数优化其价值函数
Combat环境
Combat 是一个在二维的格子世界上进行的两个队伍的对战模拟游戏,每个智能体的动作集合为:向四周移动 1 格,攻击周围 3x3 格范围内其他敌对智能体,或者不采取任何行动。起初每个智能体有 3 点生命值,如果智能体在敌人的攻击范围内被攻击到了,则会扣 1 生命值,生命值掉为 0 则死亡,最后存活的队伍获胜。每个智能体的攻击有一轮的冷却时间。
在游戏中,我们能够控制一个队伍的所有智能体与另一个队伍的智能体对战。另一个队伍的智能体使用固定的算法:攻击在范围内最近的敌人,如果攻击范围内没有敌人,则向敌人靠近。

git clone https://github.com/boyu-ai/ma-gym.git
import torch
import torch.nn.functional as F
import numpy as np
from tqdm import tqdm
import matplotlib.pyplot as plt
import sys
sys.path.append("../ma-gym")
from ma_gym.envs.combat.combat import Combat
#PPO算法
# PPO算法
class PolicyNet(torch.nn.Module):
def __init__(self, state_dim, hidden_dim, action_dim):
super(PolicyNet, self).__init__()
self.fc1 = torch.nn.Linear(state_dim, hidden_dim)
self.fc2 = torch.nn.Linear(hidden_dim, hidden


3529

被折叠的 条评论
为什么被折叠?



