27 #ifndef ROOT_Math_GSLSimAnnealing
28 #define ROOT_Math_GSLSimAnnealing
38 class GSLRandomEngine;
56 GSLSimAnFunc(
const ROOT::Math::IMultiGenFunction & func,
const double * x);
63 GSLSimAnFunc(
const ROOT::Math::IMultiGenFunction & func,
const double * x,
const double * scale);
78 virtual ~GSLSimAnFunc() { }
86 virtual GSLSimAnFunc & FastCopy(
const GSLSimAnFunc & f);
92 virtual GSLSimAnFunc * Clone()
const {
93 return new GSLSimAnFunc(*
this);
100 virtual double Energy()
const;
107 virtual void Step(
const GSLRandomEngine & r,
double maxstep);
114 virtual double Distance(
const GSLSimAnFunc & func)
const;
121 virtual void Print();
126 void SetX(
const double * x) {
127 std::copy(x, x+ fX.size(), fX.begin() );
131 void SetX(IT begin, IT end) {
132 std::copy(begin, end, fX.begin() );
135 unsigned int NDim()
const {
return fX.size(); }
137 double X(
unsigned int i)
const {
return fX[i]; }
139 const std::vector<double> & X()
const {
return fX; }
141 double Scale(
unsigned int i)
const {
return fScale[i]; }
143 void SetX(
unsigned int i,
double x) { fX[i] = x; }
149 std::vector<double> fX;
150 std::vector<double> fScale;
151 const ROOT::Math::IMultiGenFunction * fFunc;
161 struct GSLSimAnParams {
193 class GSLSimAnnealing {
205 ~GSLSimAnnealing () {}
213 GSLSimAnnealing(
const GSLSimAnnealing &) {}
218 GSLSimAnnealing & operator = (
const GSLSimAnnealing & rhs) {
219 if (
this == &rhs)
return *
this;
230 int Solve(
const ROOT::Math::IMultiGenFunction & func,
const double * x0,
const double * scale,
double * xmin,
bool debug =
false);
236 int Solve(GSLSimAnFunc & func,
bool debug =
false);
239 GSLSimAnParams & Params() {
return fParams; }
240 const GSLSimAnParams & Params()
const {
return fParams; }
241 void SetParams(
const GSLSimAnParams & params) { fParams = params; }
249 GSLSimAnParams fParams;