Integrating a new optimizer


I am specialist for black-box optimization in continuous search spaces and involved in a physics project partly related to the Pierre Auger Observatory. We plan to use stochastic optimization routines (with some history of applications in physics, but not available in root, namely CMA-ES) in the context of root and roofit. My question is: how should we link a new optimization routine to roofit (or root), in particular to maximize the chances that it can, at some point, become an integral part of roofit? Would be C or Python code acceptable for an integration? Any hints or pointers to start from are appreciated (apologies for my ignorance, but I am completely new to root and roofit).


Any intelligent fool can make things bigger, more complex, and more
violent. It takes a touch of genius, and a lot of courage, to move
in the opposite direction. – Albert Einstein

Nikolaus Hansen
INRIA, Research Centre Saclay – Ile-de-France
Machine Learning and Optimization group (TAO)
University Paris-Sud (Orsay)
LRI (UMR 8623), building 490
91405 ORSAY Cedex, France
Phone: +33-1-691-56495, Fax: +33-1-691-54240


You can integrate a new optimizer (minimiser) algorithm in ROOT and RooFit as well, by implementing a class deriving from the ROOT::Math::Minimizer interface which can then be loaded at run time by th eplug-in manager.
Here you see example on how to use that class, … idim_minim
There are several examples of different minimisers in ROOT, like

ROOT::Minuit2::Minuit2Minimizer, for Minuit2, ROOT::Math::GSLMinimizer based on GSL or ROOT::Math::GSLSimAnMinimizer based on simulated annealing from GSL.

See … mizer.html … mizer.html … mizer.html