reinforcex 0.0.5

Deep Reinforcement Learning Framework
use std::path::Path;

use tch::Tensor;

use ulid::Ulid;

pub trait BaseAgent {
    fn act_and_train(&mut self, obs: &Tensor, reward: f64) -> Tensor;
    fn act(&self, obs: &Tensor) -> Tensor;
    fn stop_episode_and_train(&mut self, obs: &Tensor, reward: f64);
    fn get_statistics(&self) -> Vec<(String, f64)>;
    fn get_agent_id(&self) -> &Ulid;
    fn save(&self);
    fn load(&mut self);
}

pub(crate) fn ensure_parent_dir(path: &str) {
    let path = Path::new(path);
    if let Some(parent) = path.parent() {
        if !parent.as_os_str().is_empty() {
            std::fs::create_dir_all(parent)
                .unwrap_or_else(|e| panic!("failed to create model directory {:?}: {}", parent, e));
        }
    }
}