entrenar/merge/ensemble/
config.rs1use super::strategy::EnsembleStrategy;
4use super::Model;
5
6#[derive(Clone, Debug, Default)]
8pub struct EnsembleConfig {
9 pub base: Option<Model>,
12
13 pub strategy: EnsembleStrategy,
15}
16
17impl EnsembleConfig {
18 pub fn weighted_average(weights: Vec<f32>) -> Self {
20 Self { base: None, strategy: EnsembleStrategy::WeightedAverage { weights } }
21 }
22
23 pub fn uniform_average() -> Self {
25 Self { base: None, strategy: EnsembleStrategy::WeightedAverage { weights: Vec::new() } }
26 }
27
28 pub fn ties(base: Model, density: f32) -> Self {
30 Self { base: Some(base), strategy: EnsembleStrategy::Ties { density } }
31 }
32
33 pub fn dare(base: Model, drop_prob: f32, seed: Option<u64>) -> Self {
35 Self { base: Some(base), strategy: EnsembleStrategy::Dare { drop_prob, seed } }
36 }
37
38 pub fn iterative_slerp(t: f32) -> Self {
40 Self { base: None, strategy: EnsembleStrategy::IterativeSlerp { t } }
41 }
42
43 pub fn hierarchical(leaf_strategy: EnsembleStrategy) -> Self {
45 Self {
46 base: None,
47 strategy: EnsembleStrategy::Hierarchical { leaf_strategy: Box::new(leaf_strategy) },
48 }
49 }
50
51 pub fn with_base(mut self, base: Model) -> Self {
53 self.base = Some(base);
54 self
55 }
56}