use num_traits::ToPrimitive;
pub trait Bandit<T: ToPrimitive> {
fn arms(&self) -> usize;
fn best_arm(&self) -> usize;
fn max_reward(&self) -> f64 {
self.mean(self.best_arm())
}
fn mean(&self, arm: usize) -> f64;
fn means(&self) -> Vec<f64> {
(0..self.arms()).map(|arm| self.mean(arm)).collect()
}
fn reward(&self, arm: usize) -> T;
fn std(&self, arm: usize) -> f64;
fn stds(&self) -> Vec<f64> {
(0..self.arms()).map(|arm| self.std(arm)).collect()
}
}