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 机器学习

Download history 11/week @ 2024-07-01 45/week @ 2024-07-22

每月 56 次下载

MIT/Apache

295KB
593

Forger - Rust 中的强化学习库

简介

Forger 是一个 Rust 编写的强化学习(RL)库,提供了一个强大且高效的框架来实施 RL 算法。它具有模块化设计,包括代理、环境、策略和实用工具的组件,便于实验和开发 RL 模型。

特性

  • 模块化组件:包括代理、环境和策略作为独立的模块。
  • 高效且安全:在 Rust 中构建,确保高性能和安全。
  • 自定义环境:提供一个框架来创建和管理不同的 RL 环境。
  • 灵活的代理实现:支持各种代理策略和学习算法。
  • 可扩展的策略框架:允许实现各种动作选择策略。

模块

  1. 策略 (policy):

    • 定义动作选择策略的接口。
    • 包括 Epsilon Greedy(带有衰减)策略的实现。
  2. 代理 (agent):

    • 概述 RL 代理的结构。
    • 实现了值迭代 - 每次访问蒙特卡洛 (VEveryVisitMC) 和 Q-学习 - 每次访问蒙特卡洛 (QEveryVisitMC)。
  3. 环境 (env):

    • 提供 Env trait 来定义 RL 环境。
    • 包含 LineWorld,一个用于实验的简单线性世界环境。
  4. 预编译文件 (prelude):

    • envagentpolicy 模块导出常用项,以便于访问。

入门

先决条件

  • 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();
    }
}

示例

  1. LineWorld 中使用 Epsilon Decay 的蒙特卡洛:

    • 演示了在LineWorld环境中使用Q-Learning Every Visit Monte Carlo (QEveryVisitMC)智能体和带衰减的Epsilon Greedy策略。
    • 展示了运行多个回合、选择动作、更新智能体和随时间衰减epsilon值的过程。
    • 在每个回合后更新智能体。
  2. GridWorld中的TD0与Epsilon衰减:

    • 演示了在GridWorld环境中使用TD0 (TD0)智能体和带衰减的Epsilon Greedy策略。
    • 展示了运行多个回合、选择动作、更新智能体和随时间衰减epsilon值的过程。
    • 在每个回合的每一步更新智能体。
    • 包含训练后智能体的测试过程。

贡献

欢迎对Forger做出贡献!如果您想做出贡献,请fork仓库并使用功能分支。拉取请求非常受欢迎。

许可

Forger受MIT许可证或Apache 2.0许可证的许可。

依赖

~11MB
~220K SLoC