# Forger - Reinforcement Learning Library in Rust
## Introduction Forger is a Reinforcement Learning (RL) library in Rust, offering a robust and efficient framework for implementing RL algorithms. It features a modular design with components for agents, environments, policies, and utilities, facilitating easy experimentation and development of RL models. ## Features - **Modular Components**: Includes agents, environments, and policies as separate modules. - **Efficient and Safe**: Built in Rust, ensuring high performance and safety. - **Customizable Environments**: Provides a framework to create and manage different RL environments. - **Flexible Agent Implementations**: Supports various agent strategies and learning algorithms. - **Extensible Policy Framework**: Allows for the implementation of diverse action selection policies. ## Modules 1. **Policy (`policy`)**: - Defines the interface for action selection policies. - Includes an implementation of Epsilon Greedy (with Decay) Policy. 2. **Agent (`agent`)**: - Outlines the structure for RL agents. - Implements Value Iteration - Every Visit Monte Carlo (`VEveryVisitMC`) and Q-Learning - Every Visit Monte Carlo (`QEveryVisitMC`). 3. **Environment (`env`)**: - Provides the `Env` trait to define RL environments. - Contains `LineWorld`, a simple linear world environment for experimentation. 4. **Prelude (`prelude`)**: - Exports commonly used items from the `env`, `agent`, and `policy` modules for convenient access. ## Getting Started ### Prerequisites - Rust Programming Environment ### Installation In your project directory, run the following command: ```shell cargo add forger ``` ### Basic Usage ```rust use forger::prelude::*; use forger::env::lineworld::{LineWorld, LineWorldAction}; pub type S = usize; // State pub type A = LineWorldAction; // Action pub type P = EGreedyPolicy; // 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::