5 个版本
0.1.4 | 2023 年 11 月 17 日 |
---|---|
0.1.3 | 2023 年 11 月 15 日 |
0.1.2 | 2023 年 11 月 15 日 |
0.1.1 | 2023 年 11 月 13 日 |
0.1.0 | 2023 年 11 月 13 日 |
#193 in 机器学习
每月 56 次下载
295KB
593 行
Forger - Rust 中的强化学习库
简介
Forger 是一个 Rust 编写的强化学习(RL)库,提供了一个强大且高效的框架来实施 RL 算法。它具有模块化设计,包括代理、环境、策略和实用工具的组件,便于实验和开发 RL 模型。
特性
- 模块化组件:包括代理、环境和策略作为独立的模块。
- 高效且安全:在 Rust 中构建,确保高性能和安全。
- 自定义环境:提供一个框架来创建和管理不同的 RL 环境。
- 灵活的代理实现:支持各种代理策略和学习算法。
- 可扩展的策略框架:允许实现各种动作选择策略。
模块
-
策略 (
policy
):- 定义动作选择策略的接口。
- 包括 Epsilon Greedy(带有衰减)策略的实现。
-
代理 (
agent
):- 概述 RL 代理的结构。
- 实现了值迭代 - 每次访问蒙特卡洛 (
VEveryVisitMC
) 和 Q-学习 - 每次访问蒙特卡洛 (QEveryVisitMC
)。
-
环境 (
env
):- 提供
Env
trait 来定义 RL 环境。 - 包含
LineWorld
,一个用于实验的简单线性世界环境。
- 提供
-
预编译文件 (
prelude
):- 从
env
、agent
和policy
模块导出常用项,以便于访问。
- 从
入门
先决条件
- Rust 编程环境
安装
在您的项目目录中,运行以下命令
cargo add forger
基本用法
use forger::prelude::*;
use forger::env::lineworld::{LineWorld, LineWorldAction};
pub type S = usize; // State
pub type A = LineWorldAction; // Action
pub type P = EGreedyPolicy<A>; // Policy
pub type E = LineWorld; // Environment
fn main() {
let env = LineWorld::new(
5, // number of states
1, // initial state
4, // goal state
vec![0] // terminal states
);
let mut agent = QEveryVisitMC::<S, A, P, E>::new(0.9); // Q-learning (Everyvisit MC, gamma = 0.9)
let mut policy = EGreedyPolicy::new(0.5, 0.95); // Epsilon Greedy Policy (epsilon = 0.5, decay = 0.95)
for _ in 0 .. 200 {
let mut episode = vec![];
let mut state = env.get_init_state();
loop {
let action = agent.select_action(&state, &mut policy, &env);
let (next_state, reward) = env.transition(&state, &action);
episode.push((state, action.unwrap(), reward));
match next_state {
Some(s) => state = s,
None => break,
}
}
agent.update(&episode);
policy.decay_epsilon();
}
}
示例
-
在
LineWorld
中使用 Epsilon Decay 的蒙特卡洛:- 演示了在
LineWorld
环境中使用Q-Learning Every Visit Monte Carlo (QEveryVisitMC
)智能体和带衰减的Epsilon Greedy策略。 - 展示了运行多个回合、选择动作、更新智能体和随时间衰减epsilon值的过程。
- 在每个回合后更新智能体。
- 演示了在
-
- 演示了在
GridWorld
环境中使用TD0 (TD0
)智能体和带衰减的Epsilon Greedy策略。 - 展示了运行多个回合、选择动作、更新智能体和随时间衰减epsilon值的过程。
- 在每个回合的每一步更新智能体。
- 包含训练后智能体的测试过程。
- 演示了在
贡献
欢迎对Forger做出贡献!如果您想做出贡献,请fork仓库并使用功能分支。拉取请求非常受欢迎。
许可
Forger受MIT许可证或Apache 2.0许可证的许可。
依赖
~11MB
~220K SLoC