00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
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
00048
00049
00050 DeclareOptions();
00051 ParseOptions();
00052 }
00053
00054
00055 void TMVA::SimulatedAnnealingFitter::DeclareOptions()
00056 {
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
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
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
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
00133 sa.SetOptions( fMaxCalls, fInitialTemperature, fMinTemperature, fEps, fKernelTemperatureS,
00134 fTemperatureScale, fAdaptiveSpeed, fTemperatureAdaptiveStep,
00135 fUseDefaultScale, fUseDefaultTemperature );
00136
00137 Double_t fcn = sa.Minimize( pars );
00138
00139 return fcn;
00140 }