186 if (ievt == jevt)
return kFALSE;
187 std::vector<TMVA::SVEvent*>::iterator idIter;
194 Float_t newAlpha_I, newAlpha_J;
208 s =
Int_t( type_I * type_J );
216 if (type_I == type_J) {
217 Float_t gamma = alpha_I + alpha_J;
247 Float_t gamma = alpha_I - alpha_J;
250 if ( gamma >= (c_i - c_j) )
257 if ( (c_i - c_j) >= gamma)
265 Float_t kernel_II, kernel_IJ, kernel_JJ;
271 eta = 2*kernel_IJ - kernel_II - kernel_JJ;
273 newAlpha_J = alpha_J + (type_J*( errorC_J - errorC_I ))/eta;
274 if (newAlpha_J <
l) newAlpha_J =
l;
275 else if (newAlpha_J >
h) newAlpha_J =
h;
282 Float_t c_J = type_J*( errorC_I - errorC_J ) - eta * alpha_J;
283 lobj = c_I *
l *
l + c_J *
l;
284 hobj = c_I *
h *
h + c_J *
h;
286 if (lobj > hobj + epsilon) newAlpha_J =
l;
287 else if (lobj < hobj - epsilon) newAlpha_J =
h;
288 else newAlpha_J = alpha_J;
291 if (
TMath::Abs( newAlpha_J - alpha_J ) < ( epsilon * ( newAlpha_J + alpha_J+ epsilon ))){
295 newAlpha_I = alpha_I - s*( newAlpha_J - alpha_J );
297 if (newAlpha_I < 0) {
298 newAlpha_J += s* newAlpha_I;
301 else if (newAlpha_I > c_i) {
302 Float_t temp = newAlpha_I - c_i;
303 newAlpha_J += s * temp;
307 Float_t dL_I = type_I * ( newAlpha_I - alpha_I );
308 Float_t dL_J = type_J * ( newAlpha_J - alpha_J );
311 if((*idIter)->GetIdx()==0){
315 (*idIter)->UpdateErrorCache(dL_I * ii + dL_J * jj);
325 ievt->
SetErrorCache(errorC_I + dL_I*kernel_II + dL_J*kernel_IJ);
326 jevt->
SetErrorCache(errorC_J + dL_I*kernel_IJ + dL_J*kernel_JJ);
334 if((*idIter)->GetIdx()==0){
335 if((*idIter)->GetErrorCache()>
fB_low){
336 fB_low = (*idIter)->GetErrorCache();
339 if( (*idIter)->GetErrorCache()<
fB_up){
340 fB_up =(*idIter)->GetErrorCache();
475 if (ievt == jevt)
return kFALSE;
476 std::vector<TMVA::SVEvent*>::iterator idIter;
484 const Float_t eta = -2*kernel_IJ + kernel_II + kernel_JJ;
490 Bool_t caseA, caseB, caseC, caseD, terminated;
491 caseA = caseB = caseC = caseD = terminated =
kFALSE;
492 Float_t b_alpha_i, b_alpha_j, b_alpha_i_p, b_alpha_j_p;
508 Float_t tmp_alpha_i, tmp_alpha_j;
509 tmp_alpha_i = tmp_alpha_j = 0.;
512 if((caseA ==
kFALSE) && (b_alpha_i > 0 || (b_alpha_i_p == 0 && deltafi > 0)) && (b_alpha_j > 0 || (b_alpha_j_p == 0 && deltafi < 0)))
519 tmp_alpha_j = b_alpha_j - (deltafi/eta);
522 tmp_alpha_i = b_alpha_i - (tmp_alpha_j - b_alpha_j);
526 b_alpha_j = tmp_alpha_j;
527 b_alpha_i = tmp_alpha_i;
536 else if((caseB==
kFALSE) && (b_alpha_i>0 || (b_alpha_i_p==0 && deltafi >2*epsilon )) && (b_alpha_j_p>0 || (b_alpha_j==0 && deltafi>2*epsilon)))
540 high =
TMath::Min( b_cost_i , b_cost_j + gamma);
544 tmp_alpha_j = b_alpha_j_p - ((deltafi-2*epsilon)/eta);
547 tmp_alpha_i = b_alpha_i - (tmp_alpha_j - b_alpha_j_p);
551 b_alpha_j_p = tmp_alpha_j;
552 b_alpha_i = tmp_alpha_i;
560 else if((caseC==
kFALSE) && (b_alpha_i_p>0 || (b_alpha_i==0 && deltafi < -2*epsilon )) && (b_alpha_j>0 || (b_alpha_j_p==0 && deltafi< -2*epsilon)))
567 tmp_alpha_j = b_alpha_j - ((deltafi+2*epsilon)/eta);
570 tmp_alpha_i = b_alpha_i_p - (tmp_alpha_j - b_alpha_j);
574 b_alpha_j = tmp_alpha_j;
575 b_alpha_i_p = tmp_alpha_i;
583 else if((caseD ==
kFALSE) &&
584 (b_alpha_i_p>0 || (b_alpha_i==0 && deltafi <0 )) &&
585 (b_alpha_j_p>0 || (b_alpha_j==0 && deltafi >0 )))
592 tmp_alpha_j = b_alpha_j_p + (deltafi/eta);
595 tmp_alpha_i = b_alpha_i_p - (tmp_alpha_j - b_alpha_j_p);
598 b_alpha_j_p = tmp_alpha_j;
599 b_alpha_i_p = tmp_alpha_i;
626 if((*idIter)->GetIdx()==0){
630 (*idIter)->UpdateErrorCache(diff_alpha_i * k_ii + diff_alpha_j * k_jj);
648 if((!(*idIter)->IsInI3()) && ((*idIter)->GetErrorCache()>
fB_low)){
649 fB_low = (*idIter)->GetErrorCache();
653 if((!(*idIter)->IsInI2()) && ((*idIter)->GetErrorCache()<
fB_up)){
654 fB_up =(*idIter)->GetErrorCache();