[ PROMPT_NODE_27072 ]
Pufferlib 集成
[ SKILL_DOCUMENTATION ]
# PufferLib 集成指南
## 概述
PufferLib 提供了一个仿真层,能够与包括 Gymnasium、OpenAI Gym、PettingZoo 以及许多专业环境库在内的流行 RL 框架无缝集成。该仿真层平铺了观测和动作空间以实现高效向量化,同时保持了兼容性。
## Gymnasium 集成
### 基础 Gymnasium 环境
python
import gymnasium as gym
import pufferlib
# 方法 1: 直接包装
gym_env = gym.make('CartPole-v1')
puffer_env = pufferlib.emulate(gym_env, num_envs=256)
# 方法 2: 使用 make
env = pufferlib.make('gym-CartPole-v1', num_envs=256)
# 方法 3: 自定义 Gymnasium 环境
class MyGymEnv(gym.Env):
def __init__(self):
self.observation_space = gym.spaces.Box(low=-1, high=1, shape=(4,))
self.action_space = gym.spaces.Discrete(2)
def reset(self, seed=None, options=None):
super().reset(seed=seed)
return self.observation_space.sample(), {}
def step(self, action):
obs = self.observation_space.sample()
reward = 1.0
terminated = False
truncated = False
info = {}
return obs, reward, terminated, truncated, info
# 包装自定义环境
puffer_env = pufferlib.emulate(MyGymEnv, num_envs=128)
### Atari 环境
python
import gymnasium as gym
from gymnasium.wrappers import AtariPreprocessing, FrameStack
import pufferlib
# 标准 Atari 设置
def make_atari_env(env_name='ALE/Pong-v5'):
env = gym.make(env_name)
env = AtariPreprocessing(env, frame_skip=4)
env = FrameStack(env, num_stack=4)
return env
# 使用 PufferLib 向量化
env = pufferlib.emulate(make_atari_env, num_envs=256)
# 或者使用内置功能
env = pufferlib.make('atari-pong', num_envs=256, frameskip=4, framestack=4)
### 复杂观测空间
python
import gymnasium as gym
from gymnasium.spaces import Dict, Box, Discrete
import pufferlib
class ComplexObsEnv(gym.Env):
def __init__(self):
# 字典观测空间
self.observation_space = Dict({
'image': Box(low=0, high=255, shape=(84, 84, 3), dtype=np.uint8),
'vector': Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32),
'discrete': Discrete(5)
})
self.action_space = Discrete(4)
def reset(self, seed=None, options=None):
return {
'image': np.zeros((84, 84, 3), dtype=np.uint8),
'vector': np.zeros(