From d04cb601134af34b88877a622e941decab9e9180 Mon Sep 17 00:00:00 2001
From: Erik Strand <erik.strand@cba.mit.edu>
Date: Thu, 16 Apr 2020 16:37:18 -0400
Subject: [PATCH] Add CMA-ES method that uses with a single std dev

---
 optimization/optimizers/cma_es/cma_es.h | 20 ++++++++++++++++++++
 optimization/optimizers/cma_es/main.cpp |  2 +-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/optimization/optimizers/cma_es/cma_es.h b/optimization/optimizers/cma_es/cma_es.h
index 0101af8..8fb5e6f 100644
--- a/optimization/optimizers/cma_es/cma_es.h
+++ b/optimization/optimizers/cma_es/cma_es.h
@@ -30,6 +30,13 @@ public:
     uint32_t pop_size() const { return pop_size_; }
     uint32_t& pop_size() { return pop_size_; }
 
+    template <typename Objective>
+    VectorXs optimize(
+        Objective& objective,
+        VectorXs const& initial_point,
+        Scalar initial_std_dev = 0.3
+    );
+
     template <typename Objective>
     VectorXs optimize(
         Objective& objective,
@@ -49,6 +56,19 @@ private:
     uint32_t n_iterations_;
 };
 
+//..................................................................................................
+template <typename Objective>
+VectorXs CmaEs::optimize(
+    Objective& objective,
+    VectorXs const& initial_point,
+    Scalar initial_std_dev
+) {
+    VectorXs std_dev_vector;
+    std_dev_vector.resize(initial_point.size());
+    std_dev_vector.fill(initial_std_dev);
+    return optimize(objective, initial_point, std_dev_vector);
+}
+
 //..................................................................................................
 template <typename Objective>
 VectorXs CmaEs::optimize(
diff --git a/optimization/optimizers/cma_es/main.cpp b/optimization/optimizers/cma_es/main.cpp
index e79cb58..8148c9f 100644
--- a/optimization/optimizers/cma_es/main.cpp
+++ b/optimization/optimizers/cma_es/main.cpp
@@ -35,7 +35,7 @@ int main(int const argc, char const** argv) {
         clara::Opt(pop_size, "pop_size")["-p"]["--pop-size"]("Population size") |
         clara::Opt(seed, "seed")["-s"]["--seed"]("Seed for CMA-ES random number generator") |
         clara::Opt(max_evaluations, "max_evaluations")["-n"]["--max-evaluations"]("Max number of function evaluations") |
-        clara::Opt(max_iterations, "max_iterations")["-n"]["--max-iterations"]("Max number of generations") |
+        clara::Opt(max_iterations, "max_iterations")["-i"]["--max-iterations"]("Max number of generations") |
         clara::Opt(rel_y_tol, "rel_y_tol")["-t"]["--rel-y-tol"]("Termination condition") |
         clara::Opt(x0, "x0")["-x"]["--x0"]("X coordinate of initial point") |
         clara::Opt(y0, "y0")["-y"]["--y0"]("Y coordinate of initial point");
-- 
GitLab