40 TMVA::ConvergenceTest::ConvergenceTest()
45 fConvValue( FLT_MAX ),
47 fBestResult( FLT_MAX ),
48 fLastResult( FLT_MAX )
55 TMVA::ConvergenceTest::~ConvergenceTest()
66 Bool_t TMVA::ConvergenceTest::HasConverged( Bool_t withinConvergenceBand )
68 if( fSteps < 0 || fImprovement < 0 )
return kFALSE;
71 fConvValue = fCurrentValue;
73 Float_t improvement = 0;
74 if( withinConvergenceBand )
75 improvement = TMath::Abs(fCurrentValue - fConvValue);
77 improvement = fConvValue - fCurrentValue;
78 if ( improvement <= fImprovement || fSteps<0) {
82 fConvValue = fCurrentValue;
84 if (fCounter < fSteps)
return kFALSE;
91 Float_t TMVA::ConvergenceTest::Progress()
93 if( fCounter > fMaxCounter )
94 fMaxCounter = fCounter;
95 return Float_t(fMaxCounter)/Float_t(fSteps);
112 Float_t TMVA::ConvergenceTest::SpeedControl( UInt_t ofSteps )
115 if ( fBestResult > fLastResult || fSuccessList.size() <=0 ) {
116 fLastResult = fBestResult;
117 fSuccessList.push_front( 1 );
119 fSuccessList.push_front( 0 );
121 while( ofSteps <= fSuccessList.size() )
122 fSuccessList.erase( fSuccessList.begin() );
125 std::deque<Short_t>::iterator vec = fSuccessList.begin();
126 for (; vec != fSuccessList.end() ; ++vec) {
131 return n ? sum/Float_t(n) : 0;