use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
pub struct IwScheduler {
pub beta_0: f32,
pub beta_final: f32,
pub n_opts_final: usize,
pub n_opts: usize,
}
impl IwScheduler {
pub fn new(beta_0: f32, beta_final: f32, n_opts_final: usize) -> Self {
Self { beta_0, beta_final, n_opts_final, n_opts: 0 }
}
pub fn beta(&self) -> f32 {
let n_opts = self.n_opts;
if n_opts >= self.n_opts_final {
self.beta_final
} else {
let d = self.beta_final - self.beta_0;
self.beta_0 + d * (n_opts as f32 / self.n_opts_final as f32)
}
}
pub fn add_n_opts(&mut self) {
self.n_opts += 1;
}
}