焦小花同学

深度强化学习新突破!用PettingZoo训练多智能体系统!

Image

点击“蓝字”  关注我们

Image

深度强化学习新突破!用PettingZoo训练多智能体系统!

多智能体强化学习最近可火了,一个智能体玩游戏已经满足不了大家了,现在都在研究让多个智能体一起协作或者竞争。说实话,以前写这种代码可费劲了,直到我发现了PettingZoo这个神器,简直是给多智能体编程带来了新的春天。


PettingZoo是啥玩意儿

说白了,PettingZoo就是一个专门为多智能体设计的环境库,跟OpenAI Gym特别像,但是厉害在它能同时支持好几个智能体一块儿训练。它把所有的环境都打包好了,啥蚂蚁觅食、捉迷藏、生存竞争,这些场景都能玩。


from pettingzoo.butterfly import knights_archers_zombies_v10

env = knights_archers_zombies_v10.env()

env.reset()

for agent in env.agent_iter():

observation, reward, termination, truncation, info = env.last()

if termination or truncation:

action = None

else:

action = env.action_space(agent).sample()

env.step(action)

环境种类有啥不同

PettingZoo把环境分成了好几类,就像动物园分区似的:


  • butterfly:这是些小游戏环境
  • mpe:多粒子环境,玩协作对抗的
  • sisl:一些仿真环境,比如交通系统啥的

小提示:刚开始玩的时候最好选个简单的环境,像knights_archers_zombies就挺好,要不然一上来就整复杂的容易劝退。


训练智能体的套路

训练多智能体跟训练单个智能体其实差不多,就是得多费点心思:


import numpy as np

from stable_baselines3 import PPO

def train_agents(env, training_steps=10000):

agents = {}

for agent in env.agents:

agents[agent] = PPO('MlpPolicy', env)

for step in range(training_steps):

for agent_id in env.agents:

current_obs = env.observe(agent_id)

action = agents[agent_id].predict(current_obs)[0]

env.step(action)

这代码看着简单,但有个坑得提醒下 - 每个智能体都得有自己的策略网络,不能共用一个,不然就乱套了。


实战经验分享

写了这么多代码,我总结了几个实用的小技巧:


  1. 奖励设计特别重要,得让每个智能体都能感受到自己的贡献
  2. 训练的时候最好给不同智能体设置不同的学习率
  3. 经常保存模型,不然训练到一半崩了就哭吧

def custom_reward(observation, action, next_observation):

team_reward = next_observation['team_score'] - observation['team_score']

individual_reward = next_observation['individual_score'] - observation['individual_score']

return 0.7 * team_reward + 0.3 * individual_reward

有时候智能体不爱配合,就得设计个这样的奖励函数,既有团队奖励又有个人奖励,让它们既顾自己又能为团队做贡献。

调参真是个技术活,我都调了好几天才找到比较合适的参数。刚开始会觉得特别烦,后面就习惯了,这就是深度学习的日常。

写到这我突然想起来,还有个好玩的事儿,有次我训练了一个多智能体系统玩捉迷藏,结果这帮家伙学会了用地形来掩护自己,这操作把我都看愣了。人工智能有时候真能给你整出点意想不到的花样来。

赶紧记下这些基础知识点:PettingZoo环境配置、多智能体训练流程、奖励函数设计、参数调优经验。搞懂这些,你就能上手搞多智能体训练了。

来都来了 点个赞再走吧~~~

Image