You are looking at historical revision 39572 of this page. It may differ significantly from its current revision.
Outdated egg!
This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.
If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.
cmaes
CMA-ES (Evolution Strategy with Covariance Matrix Adaptation) optimization library.
Usage
(require-extension cmaes)
Documentation
The CMA-ES CMA-ES (Covariance Matrix Adaptation Evolution Strategy) is an evolutionary algorithm for difficult non-linear non-convex optimization problems in a continuous domain.
The Chicken cmaes library provides a Scheme interface to the core procedures of CMA-ES.
High-level procedures
[procedure] init:: PARAMETERS -> [H FUNVALS]Creates a new optimization problem based on the given parameters. PARAMETERS is an alist of parameter values, as defined in the CMA-ES documentation.
[procedure] run:: FN * H * FUNVALS * SIGNALS [output-file: "all.dat"] [result-values: '(xbest xmean)] -> RESULTExecutes the optimizer and returns the solution. FN is the objective function: it must take an SRFI-4 f64vector of state value and return the objective value corresponding to this state fector. H is the problem handle returned by init. FUNVALS is the initial state vector (must be SRFI-4 f64vector). SIGNALS is an alist of runtime signals to be evaluated.
Initialization procedures
[procedure] init-from-file:: FILEPATH -> [H FUNVALS][procedure] read-signals:: H * [PARAMETER1 ...] -> VOID
[procedure] read-signals-from-file:: H * FILEPATH -> VOID
Core procedures
[procedure] sample-population:: H -> VECTORComputes a population of lambda N-dimensional multivariate normally distributed samples.
[procedure] update-distribution:: H -> F64VECTORSets a new mean value and estimates the new covariance matrix and a new step size for the normal search distribution. Returns the new mean value.
Support procedures
Examples
High-level procedures
(use srfi-4 cmaes) (define (minimize f N) (let-values (((h funvals) (init `((N . ,N) ;; Problem dimension (initialX 0.5e0) ;; Initial search point (typicalX 0.0) ;; Typical search point (useful for restarts) (initialStandardDeviations 0.3) ;; numbers should not differ by orders of magnitude ;; should be roughly 1/4 of the search interval ;; this number essentially influences the global ;; search ability (ie. the horizon where to search ;; at all) on multimodal functions (stopMaxFunEvals . 1e299) ;; max number of f-evaluations, 900*(N+3)*(N+3) is default (stopMaxIter . 1e299) ;; max number of iterations (generations), inf is default (stopTolFun . 1e-12) ;; stop if function value differences are ;; smaller than stopTolFun, default=1e-12 (stopTolFunHist . 1e-13) ;; stop if function value differences of best values are ;; smaller than stopTolFunHist, default was 0 (stopTolX . 1e-11) ;; stop if step sizes/steps in x-space are ;; smaller than TolX, default=0 (stopTolUpXFactor . 1e3) ;; stop if std dev increases more than by TolUpXFactor, default 1e3 (seed . 0) )))) (pp (run f h funvals `((print fewinfo 200) ;; print every 200 seconds (print few+clock 2 ) ;; clock: used processor time since start (write "iter+eval+sigma+0+0+xmean" outcmaesxmean.dat ) (write "iter+eval+sigma+0+fitness+xbest" outcmaesxrecentbest.dat ) ))) )) ;; an objective (fitness) function to be minimized (define (f1 x) (let ((N (f64vector-length x))) (let recur ((i 2) (sum (+ (* 1e4 (f64vector-ref x 0) (f64vector-ref x 0)) (* 1e4 (f64vector-ref x 1) (f64vector-ref x 1)) ))) (if (< i N) (recur (+ 1 i) (+ sum (* (f64vector-ref x i) (f64vector-ref x i)))) sum)) )) (minimize f1 22)
Core procedures
(use srfi-4 cmaes) ;; the objective (fitness) function to be minimized (define (fitfun x N) (let recur ((i 2) (sum (+ (* 1e4 (f64vector-ref x 0) (f64vector-ref x 0)) (* 1e4 (f64vector-ref x 1) (f64vector-ref x 1)) ))) (if (< i N) (recur (+ 1 i) (+ sum (* (f64vector-ref x i) (f64vector-ref x i)))) sum)) ) (let-values (((h funvals) (init-from-file "initials.par"))) (read-signals-from-file h "signals.par") (let recur ((h h)) (let ((stop (terminated? h))) (if (not stop) (let ((pop (sample-population h)) (lam (get-parameter h 'lambda)) (n (get-parameter h 'dim))) (let inner-recur ((i 0)) (if (< i lam) (begin (f64vector-set! funvals i (fitfun (vector-ref pop i) n)) (inner-recur (+ 1 i))))) (update-distribution h funvals) (read-signals-from-file h "signals.par") (recur h) ) (print stop) ))) (write-to-file h 'all "allcmaes.dat") (let ((xfinal (get-new h "xmean"))) (printf "xmean = ~A~%" xfinal) (terminate h) (free h) ))
About this egg
Author
The CMA-ES C library was written by Nikolaus Hansen. The Chicken Scheme cmaes library was written by Ivan Raikov.
Version history
- 1.0
- Initial release
License
CMA-ES C library is copyright 1996, 2003, 2007 Nikolaus Hansen. Chicken Scheme bindings for CMA-ES are copyright 2012 Ivan Raikov. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A full copy of the GPL license can be found at <http://www.gnu.org/licenses/>.