#reinforcement-learning #learning #reinforcement #machine-learning #rl #machine #ai

rsrl

一个快速、可扩展的强化学习框架,用 Rust 实现

17 个不稳定版本 (7 个破坏性更新)

0.8.1 2020年6月18日
0.7.1 2020年4月15日
0.7.0 2019年11月8日
0.6.0 2018年11月22日
0.1.0 2017年12月24日

#366 in 机器学习

MIT 许可证

280KB
7.5K SLoC

RSRL (api)

Crates.io Build Status Coverage Status

强化学习应该是 快速安全易于使用

概述

rsrl 提供了强化学习 (RL) 实验的通用构造,在可扩展的框架中高效实现现有方法,以实现快速原型设计。

安装

[dependencies]
rsrl = "0.8"

请注意,rsrl 启用了其 ndarray 依赖项的 blas 功能,因此如果您正在构建二进制文件,您还需要指定与 ndarray 兼容的 BLAS 后端。例如,您可以添加以下依赖项

blas-src = { version = "0.2.0", default-features = false, features = ["openblas"] }
openblas-src = { version = "0.6.0", default-features = false, features = ["cblas", "system"] }

有关更多信息,请参阅 ndarrayREADME

使用方法

以下代码演示了如何使用 rsrl 通过具有傅里叶基投影的线性函数逼近器评估 QLearning 代理,以解决标准山车问题。

有关更多信息,请参阅 examples/

let env = MountainCar::default();
let n_actions = env.action_space().card().into();

let mut rng = StdRng::seed_from_u64(0);
let (mut ql, policy) = {
    let basis = Fourier::from_space(5, env.state_space()).with_bias();
    let q_func = make_shared(LFA::vector(basis, SGD(0.001), n_actions));
    let policy = Greedy::new(q_func.clone());

    (QLearning {
        q_func,
        gamma: 0.9,
    }, policy)
};

for e in 0..200 {
    // Episode loop:
    let mut j = 0;
    let mut env = MountainCar::default();
    let mut action = policy.sample(&mut rng, env.emit().state());

    for i in 0.. {
        // Trajectory loop:
        j = i;

        let t = env.transition(action);

        ql.handle(&t).ok();
        action = policy.sample(&mut rng, t.to.state());

        if t.terminated() {
            break;
        }
    }

    println!("Batch {}: {} steps...", e + 1, j + 1);
}

let traj = MountainCar::default().rollout(|s| policy.mode(s), Some(500));

println!("OOS: {} states...", traj.n_states());

贡献

欢迎提交拉取请求。对于重大更改,请首先提交问题以讨论您想要进行的更改。

请确保根据需要更新测试,并遵守 angularjs 提交信息约定(请参阅 此处)。

许可证

MIT

依赖项

~9MB
~247K SLoC