use smarty_pants::neural_network::*;
use std::time::Instant;
fn main() {
const TARGET:f64 = 10.0;
const MARGIN:f64 = 0.1;
const INPUT:f64 = 1.0;
const GENERATIONS:usize = 10_000;
let mut networks:Vec<NeuralNetwork> = batch_mutate(5,0.25,&mut NeuralNetwork::new(1.0,1,3,1), true);
let mut closest_value:f64 = f64::NEG_INFINITY;
let time:Instant = Instant::now();
for generation in 0..GENERATIONS {
let outputs:Vec<Vec<f64>> = batch_run(&mut networks, &vec![INPUT]);
let mut closest_network:usize = 0;
for output in 0..outputs.len() {
if (TARGET-MARGIN..=TARGET+MARGIN).contains(&outputs[output][0]) {
println!("Finished in {:?}!\nGeneration: {:?}\nValue: {:?}\nNetwork: {{\nHiddenLayers: {:?}\nOutputLayer: {:?}\n}}", time.elapsed(),generation, outputs[output][0], networks[output].get_weights(), networks[output].get_output_weights());
std::process::exit(0);
} else {
if outputs[output][0] < TARGET && outputs[output][0] > closest_value {
closest_value = outputs[output][0];
closest_network = output;
} else if outputs[output][0] > TARGET && outputs[output][0] < closest_value {
closest_value = outputs[output][0];
closest_network = output;
}
}
}
networks = batch_mutate(5, 0.25, &networks[closest_network], true);
}
println!("Failed to get within `MARGIN` within {:?} number of generations, this is the `closest_value` obtained: {:?}. In {:?}", GENERATIONS, closest_value, time.elapsed());
}