50: fKernelTemperature (kIncreasingAdaptive),
55 fInitialTemperature ( 1000 ),
56 fMinTemperature ( 0 ),
58 fTemperatureScale ( 0.06 ),
59 fAdaptiveSpeed ( 1.0 ),
60 fTemperatureAdaptiveStep( 0.0 ),
61 fUseDefaultScale (
kFALSE ),
62 fUseDefaultTemperature (
kFALSE ),
89 fKernelTemperature = kIncreasingAdaptive;
90 Log() << kINFO <<
"Using increasing adaptive algorithm" <<
Endl;
93 fKernelTemperature = kDecreasingAdaptive;
94 Log() << kINFO <<
"Using decreasing adaptive algorithm" <<
Endl;
97 fKernelTemperature = kSqrt;
98 Log() << kINFO <<
"Using \"Sqrt\" algorithm" <<
Endl;
101 fKernelTemperature = kHomo;
102 Log() << kINFO <<
"Using \"Homo\" algorithm" <<
Endl;
105 fKernelTemperature = kLog;
106 Log() << kINFO <<
"Using \"Log\" algorithm" <<
Endl;
109 fKernelTemperature = kSin;
110 Log() << kINFO <<
"Using \"Sin\" algorithm" <<
Endl;
134 parameters[
rIter] = fRandom->Uniform(0.0,1.0)*(fRanges[
rIter]->GetMax() - fRanges[
rIter]->GetMin()) + fRanges[
rIter]->GetMin();
157 uni = fRandom->Uniform(0.0,1.0);
158 sign = (
uni - 0.5 >= 0.0) ? (1.0) : (-1.0);
162 while (parameters[
rIter] < fRanges[
rIter]->GetMin() || parameters[
rIter] > fRanges[
rIter]->GetMax() );
175 uni = fRandom->Uniform(0.0,1.0);
176 sign = (
uni - 0.5 >= 0.0) ? (1.0) : (-1.0);
191 if (fKernelTemperature == kSqrt) {
194 else if (fKernelTemperature == kLog) {
197 else if (fKernelTemperature == kHomo) {
200 else if (fKernelTemperature == kSin) {
203 else if (fKernelTemperature == kGeo) {
206 else if (fKernelTemperature == kIncreasingAdaptive) {
209 else if (fKernelTemperature == kDecreasingAdaptive) {
212 else Log() << kFATAL <<
"No such kernel!" <<
Endl;
231 if (fKernelTemperature == kSqrt) fTemperatureScale = 1.0;
232 else if (fKernelTemperature == kLog) fTemperatureScale = 1.0;
233 else if (fKernelTemperature == kHomo) fTemperatureScale = 1.0;
234 else if (fKernelTemperature == kSin) fTemperatureScale = 20.0;
235 else if (fKernelTemperature == kGeo) fTemperatureScale = 0.99997;
236 else if (fKernelTemperature == kDecreasingAdaptive) {
237 fTemperatureScale = 1.0;
240 fTemperatureScale -= 0.000001;
243 else if (fKernelTemperature == kIncreasingAdaptive) fTemperatureScale = 0.15*( 1.0 / (
Double_t)(fRanges.size() ) );
244 else Log() << kFATAL <<
"No such kernel!" <<
Endl;
255 std::vector<Double_t>
x( fRanges.size() ),
xNew( fRanges.size() ),
xBest( fRanges.size() ),
xOld( fRanges.size() );
258 dT = fTemperatureAdaptiveStep;
262 for (
Int_t i=0; i<fMaxCalls/50; i++) {
263 if ((i>0) && (
deltaY>0.0)) {
268 x =
xOld = GenerateNeighbour(
x,t);
269 y =
yOld = fFitterTarget.EstimatorFunction(
xOld );
272 xNew = GenerateNeighbour(
x,t);
274 yNew = fFitterTarget.EstimatorFunction(
xNew );
284 if (
y != 0.0) delta /=
y;
285 else if (
yNew != 0.0) delta /=
y;
295 yNew = fFitterTarget.EstimatorFunction(
xNew );
321 if (fUseDefaultTemperature) {
322 if (fKernelTemperature == kIncreasingAdaptive) {
324 FillWithRandomValues( parameters );
329 if (fKernelTemperature == kIncreasingAdaptive)
333 FillWithRandomValues( parameters );
336 if (fUseDefaultScale) SetDefaultScale();
339 <<
"Temperatur scale = " << fTemperatureScale
349 Timer timer( fMaxCalls, fLogger->GetSource().c_str() );
352 if (fIPyCurrentIter) *fIPyCurrentIter =
sample;
353 if (fExitFromTraining && *fExitFromTraining)
break;
391 Log() << kINFO <<
"Elapsed time: " <<
timer.GetElapsedTime()
int Int_t
Signed integer 4 bytes (int)
double Double_t
Double 8 bytes.
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
Interface for a fitter 'target'.
ostringstream derivative to redirect and format output
void GenerateNeighbour(std::vector< Double_t > ¶meters, std::vector< Double_t > &oldParameters, Double_t currentTemperature)
generate adjacent parameters
Double_t Minimize(std::vector< Double_t > ¶meters)
minimisation algorithm
virtual ~SimulatedAnnealing()
destructor
Double_t GenerateMaxTemperature(std::vector< Double_t > ¶meters)
maximum temperature
void SetOptions(Int_t maxCalls, Double_t initialTemperature, Double_t minTemperature, Double_t eps, TString kernelTemperatureS, Double_t temperatureScale, Double_t adaptiveSpeed, Double_t temperatureAdaptiveStep, Bool_t useDefaultScale, Bool_t useDefaultTemperature)
option setter
void SetDefaultScale()
setting of default scale
void GenerateNewTemperature(Double_t ¤tTemperature, Int_t Iter)
generate new temperature
void FillWithRandomValues(std::vector< Double_t > ¶meters)
random starting parameters
void ReWriteParameters(std::vector< Double_t > &from, std::vector< Double_t > &to)
copy parameters
enum TMVA::SimulatedAnnealing::EKernelTemperature fKernelTemperature
SimulatedAnnealing(IFitterTarget &target, const std::vector< TMVA::Interval * > &ranges)
constructor
Bool_t ShouldGoIn(Double_t currentFit, Double_t localFit, Double_t currentTemperature)
result checker
Timing information for training and evaluation of MVA methods.
Random number generator class based on M.
MsgLogger & Endl(MsgLogger &ml)
Double_t Exp(Double_t x)
Returns the base-e exponential function of x, which is e raised to the power x.
Double_t Log(Double_t x)
Returns the natural logarithm of x.
Double_t Sqrt(Double_t x)
Returns the square root of x.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.