Skip to content
Snippets Groups Projects
Commit 136441d1 authored by Stephen D's avatar Stephen D
Browse files

Allow for randomized starting params, averaging multiple universes to calculate the fitness

parent 513fbde6
No related branches found
No related tags found
No related merge requests found
......@@ -58,16 +58,23 @@ fn sim_brains(brains: Vec<NeuralNet>) -> Vec<(NeuralNet, f32)> {
brains
.into_par_iter()
.map(|brain| {
let mut u = Universe::new_with_brain(brain, 1);
for _ in 0..1000 {
if !u.step(1.0) {
break;
}
}
let fitness = u.fitness();
(u.brain, fitness)
const COUNT: usize = 1;
let sum: f32 = (0..COUNT)
.map(|_| {
let mut u = Universe::new_with_brain(brain.clone(), 1);
for _ in 0..1000 {
if !u.step(1.0) {
break;
}
}
u.fitness()
})
.sum();
let fitness = sum / COUNT as f32;
(brain, fitness)
})
.collect()
}
......@@ -10,7 +10,7 @@ use von_neumann_probes::universe::*;
fn main() {
let mut window = Window::new("Kiss3d");
let brain = NeuralNet::load("best-400.brain");
let brain = NeuralNet::load("best-130.brain");
let mut universe = Universe::new_with_window_and_brain(&mut window, brain, 1);
for planet in &universe.planets {
......
......@@ -6,6 +6,10 @@ use na::Vector3;
use rand::prelude::*;
const MAX_ABS_COORD: f32 = 1_000_000.0;
const MIN_VAL: f32 = 20.0;
const MAX_VAL: f32 = 20.0;
const MIN_SPD: f32 = 0.05;
const MAX_SPD: f32 = 0.05;
pub struct Universe {
pub planets: Vec<Planet>,
......@@ -30,8 +34,16 @@ impl Universe {
let probes = vec![Probe::new(
window,
Vector3::new(50.0, 50.0, 50.0),
Vector3::new(0.0, 0.0, 0.0),
Vector3::new(
rng.gen_range(MIN_VAL..=MAX_VAL),
rng.gen_range(MIN_VAL..=MAX_VAL),
rng.gen_range(MIN_VAL..=MAX_VAL),
),
Vector3::new(
rng.gen_range(MIN_SPD..=MAX_SPD),
rng.gen_range(MIN_SPD..=MAX_SPD),
rng.gen_range(MIN_SPD..=MAX_SPD),
),
1.0,
)];
......@@ -60,8 +72,16 @@ impl Universe {
let probes = vec![Probe::new_with_brain(
brain.clone(),
Vector3::new(50.0, 50.0, 50.0),
Vector3::new(0.0, 0.0, 0.0),
Vector3::new(
rng.gen_range(MIN_VAL..=MAX_VAL),
rng.gen_range(MIN_VAL..=MAX_VAL),
rng.gen_range(MIN_VAL..=MAX_VAL),
),
Vector3::new(
rng.gen_range(MIN_SPD..=MAX_SPD),
rng.gen_range(MIN_SPD..=MAX_SPD),
rng.gen_range(MIN_SPD..=MAX_SPD),
),
1.0,
)];
......@@ -93,8 +113,16 @@ impl Universe {
let probes = vec![Probe::new_with_window_and_brain(
window,
brain.clone(),
Vector3::new(50.0, 50.0, 50.0),
Vector3::new(0.0, 0.0, 0.0),
Vector3::new(
rng.gen_range(MIN_VAL..=MAX_VAL),
rng.gen_range(MIN_VAL..=MAX_VAL),
rng.gen_range(MIN_VAL..=MAX_VAL),
),
Vector3::new(
rng.gen_range(MIN_SPD..=MAX_SPD),
rng.gen_range(MIN_SPD..=MAX_SPD),
rng.gen_range(MIN_SPD..=MAX_SPD),
),
1.0,
)];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment