use crate::prelude::*;
mod config;
pub use self::config::*;
mod simulator;
pub use self::simulator::*;
mod telemetry;
pub use self::telemetry::*;
pub mod objectives;
pub mod strategies;
pub type EvolutionResult<S> = Result<(Vec<S>, Option<TelemetryMetrics>), GenericError>;
pub trait HeuristicContextProcessing {
type Context: HeuristicContext<Objective = Self::Objective, Solution = Self::Solution>;
type Objective: HeuristicObjective<Solution = Self::Solution>;
type Solution: HeuristicSolution;
fn pre_process(&self, context: Self::Context) -> Self::Context;
}
pub trait HeuristicSolutionProcessing {
type Solution: HeuristicSolution;
fn post_process(&self, solution: Self::Solution) -> Self::Solution;
}