Skip to main content

lgp/extensions/
classification.rs

1use crate::core::{
2    engines::fitness_engine::{Fitness, FitnessEngine},
3    environment::State,
4    program::Program,
5    registers::{ActionRegister, ArgmaxInput},
6};
7
8impl<T> Fitness<Program, T, ()> for FitnessEngine
9where
10    T: State,
11{
12    fn eval_fitness(program: &mut Program, states: &mut T) -> f64 {
13        let mut n_correct = 0.;
14        let mut n_total = 0.;
15
16        while let Some(state) = states.get() {
17            program.run(state);
18
19            match program.registers.argmax(ArgmaxInput::ActionRegisters).one() {
20                ActionRegister::Overflow => {
21                    return f64::NEG_INFINITY;
22                }
23                ActionRegister::Value(predicted_class) => {
24                    n_correct += state.execute_action(predicted_class);
25                }
26            };
27
28            n_total += 1.;
29        }
30
31        n_correct / n_total
32    }
33}