RSRL (api)
Reinforcement learning should be fast, safe and easy to use.
Overview
rsrl
provides generic constructs for running reinforcement learning (RL)
experiments by providing a simple, extensible framework and efficient
implementations of existing methods for rapid prototyping.
Installation
[dependencies]
rsrl = "0.6"
Usage
The code below shows how one could use rsrl
to evaluate a
GreedyGQ agent
using a Fourier basis function approximator to solve the canonical mountain car
problem.
See examples/ for
more...
extern crate rsrl;
#[macro_use]
extern crate slog;
use rsrl::{
control::gtd::GreedyGQ,
core::{run, Evaluation, Parameter, SerialExperiment, make_shared, Trace},
domains::{Domain, MountainCar},
fa::{projectors::fixed::Fourier, LFA},
geometry::Space,
policies::fixed::EpsilonGreedy,
logging,
};
fn main() {
let logger = logging::root(logging::stdout());
let domain = MountainCar::default();
let mut agent = {
let n_actions = domain.action_space().card().into();
let bases = Fourier::from_space(3, domain.state_space());
let v_func = make_shared(LFA::simple(bases.clone()));
let q_func = make_shared(LFA::multi(bases, n_actions));
let eps = Parameter::exponential(0.99, 0.05, 0.99);
let policy = make_shared(EpsilonGreedy::new(q_func.clone(), eps));
GreedyGQ::new(q_func, v_func, policy, 1e-1, 1e-3, 0.99)
};
let domain_builder = Box::new(MountainCar::default);
let _training_result = {
let e = SerialExperiment::new(&mut agent, domain_builder.clone(), 1000);
run(e, 1000, Some(logger.clone()))
};
let testing_result = Evaluation::new(&mut agent, domain_builder).next().unwrap();
info!(logger, "solution"; testing_result);
}
Contributing
Pull requests are welcome. For major changes, please open an issue first to
discuss what you would like to change.
Please make sure to update tests as appropriate and adhere to the angularjs commit message conventions (see here).
License
MIT