ES-Optimizer [esopt]

General Evolution-Strategy-Optimizer implementation according to https://arxiv.org/abs/1703.03864 in Rust.

Usage

There are examples in the examples folder and below is the simplest one:

Simple example (see examples/simple.rs): ```rust extern crate esopt; use esopt::*;

fn main() { //create required evaluator let eval = ExampleEval { target: 25.0 };

//create Evolution-Strategy-Optimizer
let mut es = ES::new_with_sgd(eval, 0.75, 0.0, 0.0); //using evaluator, lr, beta(momentum), lambda(weight decay)
es.set_params(vec![0.0]) //initial parameters (important to specify the problem dimension, default is vec![0.0])
    .set_std(50.0) //parameter noise standard deviation to approximate the gradient
    .set_samples(50); //number of mirrored samples to use to approximate the gradient

//track the optimizer's results
for _ in 0..5
{
    let res = es.optimize(2); //optimize for n steps
    println!("(Score, Gradnorm): {:?}", res);
    println!("Params: {:?}", es.get_params());
}

}

//carrier object for evaluator, which can include training data or target information

[derive(Clone)]

struct ExampleEval { target:Float, }

//implement Evaluator trait to allow usage in the optimizer impl Evaluator for ExampleEval { //compute the negative absolute error (maximize to get close to target) fn eval_test(&self, params:&[Float]) -> Float { let error = self.target - params[0]; -error.abs() }

fn eval_train(&self, params:&[Float], _:usize) -> Float
{
    self.eval_test(params)
}

} ```