什么是 Tianshou?
Tianshou 是一个基于 PyTorch 和 Gymnasium 的强化学习(RL)库。它旨在为研究人员和开发者提供一个高性能、模块化和用户友好的框架,用于构建深度强化学习智能体。
Tianshou 的主要特点
-
模块化和灵活性:
- Tianshou 提供了模块化的底层接口,方便研究人员设计和实现新的 RL 算法。
- 支持在线和离线 RL、多智能体 RL(MARL)以及基于模型的 RL 算法。
-
高级接口和易用性:
- 提供便捷的高级接口,方便用户将已实现的 RL 算法应用到自定义环境中。
- 支持各种类型的环境状态和动作,例如字典或自定义类。
-
广泛的算法支持:
- 支持大量的 RL 算法,包括 DQN、PPO、DDPG、SAC 等,可用于解决各种控制、决策和优化问题。
-
多智能体支持:
- 实验性地支持多智能体强化学习,允许用户在多个智能体相互作用的环境中训练 Agent。
-
离线学习能力:
- 支持离线强化学习算法,允许 Agent 从预先收集的数据中学习,而无需与环境进行交互。
Tianshou 的优势
- 高性能:利用 PyTorch 的高效计算能力和 numba 的 JIT 编译,Tianshou 的训练速度非常快。
- 轻量化:整体代码量相对较小,易于理解和修改。
- 可扩展性:允许用户轻松扩展其功能,编写自定义的强化学习算法。
实例代码:使用 Tianshou 运行 DQN
以下是一个使用 Tianshou 运行 DQN 算法的简单示例:
ini
python
import gym
import torch
from tianshou.env import DummyVectorEnv
from tianshou.policy import DQNPolicy
from tianshou.trainer import offpolicy_trainer
from tianshou.data import Collector, ReplayBuffer
# 创建环境
env = gym.make('CartPole-v1')
envs = DummyVectorEnv([lambda: env for _ in range(1)])
# 定义网络
net = torch.nn.Sequential(
torch.nn.Linear(env.observation_space.shape[0], 128),
torch.nn.ReLU(),
torch.nn.Linear(128, env.action_space.n)
)
# 创建策略
policy = DQNPolicy(net, optim=torch.optim.Adam(net.parameters(), lr=0.001))
# 创建数据收集器
collector = Collector(policy, envs, ReplayBuffer(20000))
# 训练
result = offpolicy_trainer(
policy, collector, envs, 100, 8, 1, 0.9, 0.1, 0.995, 0.5, True
)
实例代码:使用 Tianshou 进行多智能体学习
以下是使用 Tianshou 和 PettingZoo 进行多智能体学习的示例:
ini
python
import gym
import torch
from tianshou.env import PettingZooEnv
from tianshou.data import Collector, VectorReplayBuffer
# 创建环境
env = PettingZooEnv(gym.make('tictactoe_v3'))
# 定义网络和策略
net = torch.nn.Sequential(
torch.nn.Linear(env.observation_space["observation"].shape[0], 128),
torch.nn.ReLU(),
torch.nn.Linear(128, env.action_space.shape[0])
)
# 创建数据收集器
collector = Collector(policy, env, VectorReplayBuffer(20000))
# 训练
# ... (训练过程与单智能体类似)
总结
Tianshou 是一个强大且易用的强化学习库,适用于算法研究、实际应用和特定任务的解决。它提供了高性能、模块化和用户友好的框架,支持广泛的 RL 算法和多智能体场景。