radiate_engines/builder/
objectives.rs1use crate::GeneticEngineBuilder;
2use radiate_core::{Chromosome, Front, Objective, Optimize, Phenotype};
3use std::ops::Range;
4
5#[derive(Clone)]
6pub struct OptimizeParams<C: Chromosome> {
7 pub objectives: Objective,
8 pub front_range: Range<usize>,
9 pub front: Option<Front<Phenotype<C>>>,
10}
11
12impl<C, T> GeneticEngineBuilder<C, T>
13where
14 C: Chromosome + PartialEq + Clone,
15 T: Clone + Send,
16{
17 pub fn minimizing(mut self) -> Self {
19 self.params.optimization_params.objectives = Objective::Single(Optimize::Minimize);
20 self
21 }
22
23 pub fn maximizing(mut self) -> Self {
25 self.params.optimization_params.objectives = Objective::Single(Optimize::Maximize);
26 self
27 }
28
29 pub fn multi_objective(
30 mut self,
31 objectives: impl Into<Vec<Optimize>>,
32 ) -> GeneticEngineBuilder<C, T> {
33 self.params.optimization_params.objectives = Objective::Multi(objectives.into());
34 self
35 }
36
37 pub fn front_size(mut self, range: Range<usize>) -> GeneticEngineBuilder<C, T> {
41 self.add_error_if(
42 || range.start > range.end,
43 "Front range start must be less than end",
44 );
45
46 self.params.optimization_params.front_range = range;
47 self
48 }
49}