2 个不稳定版本
0.2.0 | 2020 年 6 月 14 日 |
---|---|
0.1.0 | 2019 年 11 月 8 日 |
#784 in 机器学习
用于 rsrl
78KB
2K SLoC
RSRL (api)
强化学习应该是 快速、安全 且 易于使用。
概述
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"] }
有关更多信息,请参阅 ndarray
的 README。
用法
以下代码演示了如何使用 rsrl
通过 Fourier 基投影的线性函数逼近器来评估 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());
贡献
欢迎 Pull 请求。对于主要更改,请先创建一个 issue 来讨论您希望更改的内容。
请确保适当地更新测试,并遵循 angularjs 的提交信息约定(见 此处)。
许可证
依赖项
~3MB
~49K SLoC