use serde::{Deserialize, Serialize};
use std::path::{Path, PathBuf};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptimizerState {
pub best_params: Vec<f64>,
pub current_params: Vec<f64>,
pub best_loss: f64,
pub iteration: usize,
pub total_iterations: usize,
pub converged: bool,
pub seed: Option<u64>,
pub timestamp: chrono::DateTime<chrono::Utc>,
}
pub fn save_optimizer_state(
state: &OptimizerState,
path: &Path,
) -> Result<(), Box<dyn std::error::Error>> {
let json = serde_json::to_string_pretty(state)?;
std::fs::write(path, json)?;
Ok(())
}
pub fn load_optimizer_state(
path: &Path,
) -> Result<Option<OptimizerState>, Box<dyn std::error::Error>> {
if !path.exists() {
return Ok(None);
}
let json = std::fs::read_to_string(path)?;
let state = serde_json::from_str(&json)?;
Ok(Some(state))
}
pub fn get_state_file_path(output_dir: &Path) -> PathBuf {
output_dir.join("optimizer_state.json")
}