53     libqp_state_T qp_exitflag={0, 0, 0, 0}, qp_exitflag_good={0, 0, 0, 0};
 
   54     float64_t *b, *b2, *beta, *beta_good, *beta_start, *diag_H, *diag_H2;
 
   55     float64_t R, *Rt, **subgrad_t, *A, QPSolverTolRel, *C=NULL;
 
   56     float64_t *prevW, *wt, alpha, alpha_start, alpha_good=0.0, Fd_alpha0=0.0;
 
   58     floatmax_t rsum, sq_norm_W, sq_norm_Wdiff, sq_norm_prevW, eps;
 
   59     uint32_t *I, *I2, *I_start, *I_good, *ICPcounter, *ACPs, cntICP=0, cntACP=0;
 
   61     uint32_t nCP_new=0, qp_cnt=0;
 
   62     bmrm_ll *CPList_head, *CPList_tail, *cp_ptr, *cp_ptr2, *cp_list=NULL;
 
   64     bool *map=NULL, tuneAlpha=
true, flag=
true;
 
   65     bool alphaChanged=
false, isThereGoodSolution=
false;
 
   68     uint32_t to=0, N=0, cp_i=0;
 
  119     ICPcounter= (uint32_t*) 
LIBBMRM_CALLOC(BufSize, 
sizeof(uint32_t));
 
  139     if (
H==NULL || A==NULL || b==NULL || beta==NULL || subgrad_t==NULL ||
 
  140             diag_H==NULL || I==NULL || ICPcounter==NULL || ICPs==NULL || ACPs==NULL ||
 
  141             cp_list==NULL || prevW==NULL || wt==NULL || Rt==NULL || C==NULL ||
 
  142             S==NULL || info==NULL)
 
  153     for (uint32_t p=0; p<cp_models; ++p)
 
  160         if (subgrad_t[p]==NULL || info[p]==NULL)
 
  167         to=((p+1)*N > (uint32_t)num_feats) ? (uint32_t)num_feats : (p+1)*N;
 
  168         info[p]->
N=to-info[p]->
_from;
 
  179     memset( (
bool*) map, 
true, BufSize);
 
  207     if (beta_start==NULL || beta_good==NULL || b2==NULL || diag_H2==NULL ||
 
  208             I_start==NULL || I_good==NULL || I2==NULL || 
H2==NULL)
 
  219     Rt[0] = model->
risk(subgrad_t[0], W, info[0]);
 
  237     for (uint32_t p=1; p<cp_models; ++p)
 
  239         Rt[p] = model->
risk(subgrad_t[p], W, info[p]);
 
  247     for (uint32_t p=0; p<cp_models; ++p)
 
  253     for (uint32_t j=0; j<nDim; ++j)
 
  255         for (uint32_t p=0; p<cp_models; ++p)
 
  256             b[p]+=subgrad_t[p][j]*W[j];
 
  258         sq_norm_W+=W[j]*W[j];
 
  259         sq_norm_Wdiff+=(W[j]-prevW[j])*(W[j]-prevW[j]);
 
  262     wdist=::sqrt(sq_norm_Wdiff);
 
  264     p3bmrm.
Fp=R+0.5*_lambda*sq_norm_W + alpha*sq_norm_Wdiff;
 
  269     K = (sq_norm_W == 0.0) ? 0.4 : 0.01*::sqrt(sq_norm_W);
 
  282         SG_SPRINT(
"%4d: tim=%.3lf, Fp=%lf, Fd=%lf, R=%lf, K=%lf, CPmodels=%d\n",
 
  283                 p3bmrm.
nIter, tstop-tstart, p3bmrm.
Fp, p3bmrm.
Fd, R, K, cp_models);
 
  296             for (cp_i=0; cp_i<cp_models; ++cp_i)  
 
  300                 for (uint32_t p=0; p<cp_models; ++p)
 
  304                     for (uint32_t j=0; j<nDim; ++j)
 
  306                         rsum+=subgrad_t[p][j]*A_1[j];
 
  319             for (cp_i=0; cp_i<p3bmrm.
nCP+cp_models; ++cp_i)  
 
  323                 for (uint32_t p=0; p<cp_models; ++p)
 
  327                     for (uint32_t j=0; j<nDim; ++j)
 
  328                         rsum+=subgrad_t[p][j]*A_1[j];
 
  336             for (uint32_t i=0; i<p3bmrm.
nCP; ++i)
 
  337                 for (uint32_t j=0; j<cp_models; ++j)
 
  342         for (uint32_t p=0; p<cp_models; ++p)
 
  345         p3bmrm.
nCP+=cp_models;
 
  350         isThereGoodSolution=
false;
 
  352         for (uint32_t p=0; p<cp_models; ++p)
 
  354             I[p3bmrm.
nCP-cp_models+p]=p+1;
 
  355             beta[p3bmrm.
nCP-cp_models+p]=0.0;
 
  364             alpha_start=alpha; alpha=0.0;
 
  370             for (uint32_t i=0; i<p3bmrm.
nCP; ++i)
 
  376                 for (uint32_t j=0; j<nDim; ++j)
 
  377                     rsum+=A_1[j]*prevW[j];
 
  379                 b2[i]=b[i]-((2*alpha)/(_lambda+2*alpha))*rsum;
 
  380                 diag_H2[i]=diag_H[i]/(_lambda+2*alpha);
 
  382                 for (uint32_t j=0; j<p3bmrm.
nCP; ++j)
 
  393             Fd_alpha0=-qp_exitflag.QP;
 
  396             for (uint32_t i=0; i<nDim; ++i)
 
  401                 for (uint32_t j=0; j<p3bmrm.
nCP; ++j)
 
  405                     rsum+=A_1[i]*beta[j];
 
  408                 wt[i]=(2*alpha*prevW[i] - rsum)/(_lambda+2*alpha);
 
  413             for (uint32_t i=0; i<nDim; ++i)
 
  414                 sq_norm_Wdiff+=(wt[i]-prevW[i])*(wt[i]-prevW[i]);
 
  416             if (::sqrt(sq_norm_Wdiff) <= K)
 
  420                 if (alpha!=alpha_start)
 
  436                 for (uint32_t i=0; i<p3bmrm.
nCP; ++i)
 
  442                     for (uint32_t j=0; j<nDim; ++j)
 
  443                         rsum+=A_1[j]*prevW[j];
 
  445                     b2[i]=b[i]-((2*alpha)/(_lambda+2*alpha))*rsum;
 
  446                     diag_H2[i]=diag_H[i]/(_lambda+2*alpha);
 
  448                     for (uint32_t j=0; j<p3bmrm.
nCP; ++j)
 
  459                 for (uint32_t i=0; i<nDim; ++i)
 
  464                     for (uint32_t j=0; j<p3bmrm.
nCP; ++j)
 
  468                         rsum+=A_1[i]*beta[j];
 
  471                     wt[i]=(2*alpha*prevW[i] - rsum)/(_lambda+2*alpha);
 
  476                 for (uint32_t i=0; i<nDim; ++i)
 
  477                     sq_norm_Wdiff+=(wt[i]-prevW[i])*(wt[i]-prevW[i]);
 
  479                 if (::sqrt(sq_norm_Wdiff) > K)
 
  483                     if (isThereGoodSolution)
 
  488                         qp_exitflag=qp_exitflag_good;
 
  513                         qp_exitflag_good=qp_exitflag;
 
  514                         isThereGoodSolution=
true;
 
  543             for (uint32_t i=0; i<p3bmrm.
nCP; ++i)
 
  549                 for (uint32_t j=0; j<nDim; ++j)
 
  550                     rsum+=A_1[j]*prevW[j];
 
  552                 b2[i]=b[i]-((2*alpha)/(_lambda+2*alpha))*rsum;
 
  553                 diag_H2[i]=diag_H[i]/(_lambda+2*alpha);
 
  555                 for (uint32_t j=0; j<p3bmrm.
nCP; ++j)
 
  570         for (uint32_t aaa=0; aaa<p3bmrm.
nCP; ++aaa)
 
  584         for (uint32_t i=0; i<nDim; ++i)
 
  589             for (uint32_t j=0; j<p3bmrm.
nCP; ++j)
 
  593                 rsum+=A_1[i]*beta[j];
 
  596             W[i]=(2*alpha*prevW[i]-rsum)/(_lambda+2*alpha);
 
  602         for (uint32_t p=0; p<cp_models; ++p)
 
  604             Rt[p] = model->
risk(subgrad_t[p], W, info[p]);
 
  605             b[p3bmrm.
nCP+p]=-Rt[p];
 
  614         for (uint32_t j=0; j<nDim; ++j)
 
  616             for (uint32_t p=0; p<cp_models; ++p)
 
  617                 b[p3bmrm.
nCP+p]+=subgrad_t[p][j]*W[j];
 
  619             sq_norm_W+=W[j]*W[j];
 
  620             sq_norm_Wdiff+=(W[j]-prevW[j])*(W[j]-prevW[j]);
 
  621             sq_norm_prevW+=prevW[j]*prevW[j];
 
  625         p3bmrm.
Fp=R+0.5*_lambda*sq_norm_W + alpha*sq_norm_Wdiff;
 
  626         p3bmrm.
Fd=-qp_exitflag.QP + ((alpha*_lambda)/(_lambda + 2*alpha))*sq_norm_prevW;
 
  631             eps=1.0-(p3bmrm.
Fd/p3bmrm.
Fp);
 
  632             gamma=(lastFp*(1-eps)-Fd_alpha0)/(Tmax*(1-eps));
 
  635         if ((lastFp-p3bmrm.
Fp) <= gamma)
 
  650             if (p3bmrm.
Fp-p3bmrm.
Fd<=TolAbs)
 
  654         if (p3bmrm.
nCP>=BufSize)
 
  662         for (uint32_t i=0; i<nDim; ++i)
 
  664             sq_norm_Wdiff+=(W[i]-prevW[i])*(W[i]-prevW[i]);
 
  667         wdist=::sqrt(sq_norm_Wdiff);
 
  676             SG_SPRINT(
"%4d: tim=%.3lf, Fp=%lf, Fd=%lf, (Fp-Fd)=%lf, (Fp-Fd)/Fp=%lf, R=%lf, nCP=%d, nzA=%d, wdist=%lf, alpha=%lf, qp_cnt=%d, gamma=%lf, tuneAlpha=%d\n",
 
  677                     p3bmrm.
nIter, tstop-tstart, p3bmrm.
Fp, p3bmrm.
Fd, p3bmrm.
Fp-p3bmrm.
Fd,
 
  678                     (p3bmrm.
Fp-p3bmrm.
Fd)/p3bmrm.
Fp, R, p3bmrm.
nCP, p3bmrm.
nzA, wdist, alpha,
 
  679                     qp_cnt, gamma, tuneAlpha);
 
  682         if (p3bmrm.
nCP>=BufSize)
 
  701             while (cp_ptr != CPList_tail)
 
  703                 if (ICPcounter[tmp_idx++]>=cleanAfter)
 
  705                     ICPs[cntICP++]=cp_ptr->
address;
 
  709                     ACPs[cntACP++]=tmp_idx-1;
 
  718                 nCP_new=p3bmrm.
nCP-cntICP;
 
  720                 for (uint32_t i=0; i<cntICP; ++i)
 
  725                     while(cp_ptr->
address != ICPs[i])
 
  737                     LIBBMRM_MEMMOVE(ICPcounter+tmp_idx, ICPcounter+tmp_idx+1, (p3bmrm.
nCP-tmp_idx)*
sizeof(uint32_t));
 
  741                 for (uint32_t i=0; i < nCP_new; ++i)
 
  743                     for (uint32_t j=0; j < nCP_new; ++j)
 
  749                 for (uint32_t i=0; i<nCP_new; ++i)
 
  750                     for (uint32_t j=0; j<nCP_new; ++j)
 
  804     for (uint32_t p=0; p<cp_models; ++p)