15 #include <shogun/lib/external/libqp.h>
63 while(cp_list_ptr->
address != icp)
65 cp_list_ptr=cp_list_ptr->
next;
68 if (cp_list_ptr==*head)
73 else if (cp_list_ptr==*tail)
84 map[cp_list_ptr->
idx]=
true;
108 while (cp_ptr != *tail)
110 if (icp_stats->
ICPcounter[tmp_idx++]>=cleanAfter)
116 icp_stats->
ACPs[cntACP++]=tmp_idx-1;
125 uint32_t nCP_new=bmrm.
nCP-cntICP;
127 for (uint32_t i=0; i<cntICP; ++i)
147 (bmrm.
nCP-tmp_idx)*
sizeof(uint32_t));
149 (bmrm.
nCP-tmp_idx)*
sizeof(uint32_t));
153 for (uint32_t i=0; i < nCP_new; ++i)
155 for (uint32_t j=0; j < nCP_new; ++j)
162 for (uint32_t i=0; i<nCP_new; ++i)
163 for (uint32_t j=0; j<nCP_new; ++j)
193 libqp_state_T qp_exitflag={0, 0, 0, 0};
195 float64_t R, *subgrad, *A, QPSolverTolRel, C=1.0, wdist=0.0;
196 floatmax_t rsum, sq_norm_W, sq_norm_Wdiff=0.0;
200 uint32_t nDim=model->
get_dim();
206 bmrm_ll *CPList_head, *CPList_tail, *cp_ptr, *cp_ptr2, *cp_list=NULL;
292 if (icp_stats.
ICPs==NULL)
299 if (icp_stats.
ACPs==NULL)
307 if (icp_stats.
H_buff==NULL)
321 memset( (
bool*) map,
true, BufSize);
344 R=machine->
risk(subgrad, W);
366 bmrm.
Fp=R+0.5*_lambda*sq_norm_W;
374 SG_SPRINT(
"%4d: tim=%.3lf, Fp=%lf, Fd=%lf, R=%lf\n",
375 bmrm.
nIter, tstop-tstart, bmrm.
Fp, bmrm.
Fd, R);
396 for (uint32_t i=0; i<bmrm.
nCP; ++i)
435 qp_exitflag=libqp_splx_solver(&
get_col, diag_H, b, &C, I, &S, beta,
445 for (uint32_t aaa=0; aaa<bmrm.
nCP; ++aaa)
461 for (uint32_t j=0; j<bmrm.
nCP; ++j)
469 R = machine->
risk(subgrad, W);
477 for (uint32_t j=0; j<nDim; ++j)
479 sq_norm_Wdiff+=(W[j]-prevW[j])*(W[j]-prevW[j]);
482 bmrm.
Fp=R+0.5*_lambda*sq_norm_W;
483 bmrm.
Fd=-qp_exitflag.QP;
491 if (bmrm.
Fp - bmrm.
Fd <= TolAbs)
494 if (bmrm.
nCP >= BufSize)
502 SG_SPRINT(
"%4d: tim=%.3lf, Fp=%lf, Fd=%lf, (Fp-Fd)=%lf, (Fp-Fd)/Fp=%lf, R=%lf, nCP=%d, nzA=%d, QPexitflag=%d\n",
504 (bmrm.
Fp-bmrm.
Fd)/bmrm.
Fp, R, bmrm.
nCP, bmrm.
nzA, qp_exitflag.exitflag);
513 if (bmrm.
nCP>=BufSize)
525 clean_icp(&icp_stats, bmrm, &CPList_head, &CPList_tail,
H, diag_H, beta, map, cleanAfter, b, I);