extern crate abc;
extern crate rand;
use rand::{Rng, thread_rng};
use abc::{Context, Candidate, HiveBuilder, scaling};
#[derive(Clone, Debug)]
struct Foo;
impl Context for Foo {
type Solution = i32;
fn make(&self) -> i32 {
thread_rng().gen_range(0, 100)
}
fn evaluate_fitness(&self, solution: &Self::Solution) -> f64 {
let mut x = 0;
for _ in 0..1_000 {
x += 1;
}
(x - x) as f64 + *solution as f64
}
fn explore(&self, field: &[Candidate<i32>], n: usize) -> i32 {
field[n].solution + thread_rng().gen_range(-10, 10)
}
}
fn main() {
let hive = HiveBuilder::<Foo>::new(Foo, 5)
.set_threads(5)
.set_scaling(scaling::power_rank(10_f64));
println!("{:?}", hive.build().unwrap().run_for_rounds(1_000));
}