SimulatedAnnealingFitter.cxx

Go to the documentation of this file.
00001 // @(#)root/tmva $Id: SimulatedAnnealingFitter.cxx 29195 2009-06-24 10:39:49Z brun $ 
00002 // Author: Andraes Hoecker, Kamil Kraszewski, Maciej Kruk
00003 
00004 /**********************************************************************************
00005  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
00006  * Package: TMVA                                                                  *
00007  * Class  : SimulatedAnnealingFitter                                              *
00008  * Web    : http://tmva.sourceforge.net                                           *
00009  *                                                                                *
00010  * Description:                                                                   *
00011  *      Implementation                                                            *
00012  *                                                                                *
00013  * Authors (alphabetical):                                                        *
00014  *      Krzysztof Danielowski <danielow@cern.ch>       - IFJ & AGH, Poland        *
00015  *      Andreas Hoecker       <Andreas.Hocker@cern.ch> - CERN, Switzerland        *
00016  *      Kamil Kraszewski      <kalq@cern.ch>           - IFJ & UJ, Poland         *
00017  *      Maciej Kruk           <mkruk@cern.ch>          - IFJ & AGH, Poland        *
00018  *                                                                                *
00019  * Copyright (c) 2008:                                                            *
00020  *      IFJ-Krakow, Poland                                                        *
00021  *      CERN, Switzerland                                                         * 
00022  *      MPI-K Heidelberg, Germany                                                 * 
00023  *                                                                                *
00024  * Redistribution and use in source and binary forms, with or without             *
00025  * modification, are permitted according to the terms listed in LICENSE           *
00026  * (http://tmva.sourceforge.net/LICENSE)                                          *
00027  **********************************************************************************/
00028 
00029 //_______________________________________________________________________
00030 //                                                                      
00031 // Fitter using a Simulated Annealing Algorithm
00032 //_______________________________________________________________________
00033 
00034 #include "TMVA/SimulatedAnnealingFitter.h"
00035 #include "TMVA/SimulatedAnnealing.h"
00036 #include "TMVA/Interval.h"
00037 
00038 ClassImp(TMVA::SimulatedAnnealingFitter)
00039 
00040 //_______________________________________________________________________
00041 TMVA::SimulatedAnnealingFitter::SimulatedAnnealingFitter( IFitterTarget& target, 
00042                                                           const TString& name, 
00043                                                           const std::vector<Interval*>& ranges, 
00044                                                           const TString& theOption ) 
00045    : TMVA::FitterBase( target, name, ranges, theOption )
00046 {
00047    // constructor
00048 
00049    // default parameters settings for Simulated Annealing algorithm
00050    DeclareOptions();
00051    ParseOptions();
00052 }
00053 
00054 //_______________________________________________________________________
00055 void TMVA::SimulatedAnnealingFitter::DeclareOptions() 
00056 {
00057    // declare SA options
00058 
00059    // MaxCalls                 <int>      maximum number of calls for simulated annealing
00060    // TemperatureGradient      <float>    temperature gradient for simulated annealing
00061    // UseAdaptiveTemperature   <bool>     use of adaptive temperature for simulated annealing
00062    // InitialTemperature       <float>    initial temperature for simulated annealing
00063    // MinTemperature           <float>    minimum temperature for simulated annealing 
00064    // Eps                      <int>      number of epochs for simulated annealing
00065    // NFunLoops                <int>      number of loops for simulated annealing      
00066    // NEps                     <int>      number of epochs for simulated annealing
00067 
00068    // default settings
00069    fMaxCalls                = 100000;
00070    fInitialTemperature      = 1e+6;
00071    fMinTemperature          = 1e-6;
00072    fEps                     = 1e-10;
00073    fTemperatureScale        = 1.0;
00074    fAdaptiveSpeed           = 1.0;
00075    fTemperatureAdaptiveStep = 0.009875;
00076    fKernelTemperatureS      = "IncAdaptive";
00077    fUseDefaultScale         = kFALSE;
00078    fUseDefaultTemperature   = kFALSE;
00079 
00080    DeclareOptionRef(fMaxCalls,               "MaxCalls",              "Maximum number of minimisation calls");
00081    DeclareOptionRef(fInitialTemperature,     "InitialTemp",           "Initial temperature");  
00082    DeclareOptionRef(fMinTemperature,         "MinTemp",               "Mimimum temperature");
00083    DeclareOptionRef(fEps,                    "Eps",                   "Epsilon");  
00084    DeclareOptionRef(fTemperatureScale,       "TempScale",             "Temperature scale");
00085    DeclareOptionRef(fAdaptiveSpeed,          "AdaptiveSpeed",         "Adaptive speed");
00086    DeclareOptionRef(fTemperatureAdaptiveStep,"TempAdaptiveStep",      "Step made in each generation temperature adaptive");
00087    DeclareOptionRef(fUseDefaultScale,        "UseDefaultScale",       "Use default temperature scale for temperature minimisation algorithm");
00088    DeclareOptionRef(fUseDefaultTemperature,  "UseDefaultTemp",        "Use default initial temperature");
00089 
00090    DeclareOptionRef(fKernelTemperatureS,     "KernelTemp",            "Temperature minimisation algorithm");
00091    AddPreDefVal(TString("IncAdaptive"));
00092    AddPreDefVal(TString("DecAdaptive"));
00093    AddPreDefVal(TString("Sqrt"));
00094    AddPreDefVal(TString("Log"));
00095    AddPreDefVal(TString("Sin"));
00096    AddPreDefVal(TString("Homo"));
00097    AddPreDefVal(TString("Geo"));
00098 }
00099 
00100 //_______________________________________________________________________
00101 void TMVA::SimulatedAnnealingFitter::SetParameters( Int_t    maxCalls,
00102                                                     Double_t initialTemperature,
00103                                                     Double_t minTemperature,
00104                                                     Double_t eps,
00105                                                     TString  kernelTemperatureS,
00106                                                     Double_t temperatureScale,
00107                                                     Double_t temperatureAdaptiveStep,
00108                                                     Bool_t   useDefaultScale,
00109                                                     Bool_t   useDefaultTemperature)
00110 {
00111    // set SA configuration parameters
00112    fMaxCalls                 = maxCalls;
00113    fInitialTemperature       = initialTemperature;
00114    fMinTemperature           = minTemperature; 
00115    fEps                      = eps;
00116    fKernelTemperatureS       = kernelTemperatureS;
00117    fTemperatureScale         = temperatureScale;
00118    fTemperatureAdaptiveStep = temperatureAdaptiveStep;
00119    fUseDefaultScale          = useDefaultScale;
00120    fUseDefaultTemperature    = useDefaultTemperature;
00121 }
00122 
00123 //_______________________________________________________________________
00124 Double_t TMVA::SimulatedAnnealingFitter::Run( std::vector<Double_t>& pars )
00125 {
00126    // Execute fitting
00127    Log() << kINFO << "<SimulatedAnnealingFitter> Optimisation, please be patient ... " << Endl;
00128    Log() << kINFO << "(progress timing may be inaccurate for SA)" << Endl;
00129 
00130    SimulatedAnnealing sa( GetFitterTarget(), fRanges );
00131 
00132    // set driving parameters
00133    sa.SetOptions( fMaxCalls, fInitialTemperature, fMinTemperature, fEps, fKernelTemperatureS,
00134                   fTemperatureScale, fAdaptiveSpeed, fTemperatureAdaptiveStep, 
00135                   fUseDefaultScale, fUseDefaultTemperature );
00136    // minimise
00137    Double_t fcn = sa.Minimize( pars );
00138 
00139    return fcn;
00140 }

Generated on Tue Jul 5 15:25:36 2011 for ROOT_528-00b_version by  doxygen 1.5.1