use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct BanditConfig {
pub exploration_constant: f64,
pub rave_bias: f64,
pub max_pulls: u64,
}
impl Default for BanditConfig {
fn default() -> Self {
Self {
exploration_constant: std::f64::consts::SQRT_2,
rave_bias: 500.0,
max_pulls: 0,
}
}
}
impl BanditConfig {
#[must_use]
pub fn builder() -> BanditConfigBuilder {
BanditConfigBuilder(Self::default())
}
}
pub struct BanditConfigBuilder(BanditConfig);
impl BanditConfigBuilder {
#[must_use]
pub fn exploration_constant(mut self, c: f64) -> Self {
self.0.exploration_constant = c;
self
}
#[must_use]
pub fn rave_bias(mut self, bias: f64) -> Self {
self.0.rave_bias = bias;
self
}
#[must_use]
pub fn max_pulls(mut self, n: u64) -> Self {
self.0.max_pulls = n;
self
}
#[must_use]
pub fn build(self) -> BanditConfig {
self.0
}
}