extern crate nalgebra as na; #[path = "./xorwow.rs"] mod xorwow; use xorwow::Xorwow; /// A particle in the particle swarm optimization algorithm struct Particle { x: na::DVector,// position v: na::DVector,// velocity fx: f64, // function value at x } impl Particle { fn new(x: na::DVector, v: na::DVector, fx: f64) -> Particle { Particle { x: x, v: v, fx: fx, } } } pub fn particle_swarm_minimize) -> f64>(f: F, n_particles: u32, lb: &na::DVector, ub: &na::DVector, tol: f64, n_iter_max: u32, rng_seed: u32) -> f64 { let mut particles: Vec = Vec::new(); let mut rng = Xorwow::new(rng_seed); for _ in 0..n_particles { let x = lb + (ub - lb) * rng.rand_vec(lb.len()); let v = (lb - ub) * rng.rand_vec(lb.len()); let fx = f(&x); println!("x = {}\tv = {}\tf(x) = {}", &x, &v, fx);// DEBUG particles.push(Particle::new(x, v, fx)); } let x = (lb + ub) / 2.0; return f(&x); }