lgp/extensions/
classification.rs1use 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}