67 while(cp_list_ptr->
address != icp)
69 cp_list_ptr=cp_list_ptr->
next;
72 if (cp_list_ptr==*head)
77 else if (cp_list_ptr==*tail)
88 map[cp_list_ptr->
idx]=
true;
114 libqp_state_T qp_exitflag={0, 0, 0, 0};
116 float64_t R, *subgrad, *A, QPSolverTolRel, C=1.0, wdist=0.0;
117 floatmax_t rsum, sq_norm_W, sq_norm_Wdiff=0.0;
118 uint32_t *I, *ICPcounter, *ACPs, cntICP=0, cntACP=0;
120 uint32_t nDim=model->
get_dim();
128 bmrm_ll *CPList_head, *CPList_tail, *cp_ptr, *cp_ptr2, *cp_list=NULL;
207 ICPcounter= (uint32_t*)
LIBBMRM_CALLOC(BufSize,
sizeof(uint32_t));
209 if (ICPcounter==NULL)
239 memset( (
bool*) map,
true, BufSize);
271 R=model->
risk(subgrad, W);
293 bmrm.
Fp=R+0.5*_lambda*sq_norm_W;
301 SG_SPRINT(
"%4d: tim=%.3lf, Fp=%lf, Fd=%lf, R=%lf\n",
302 bmrm.
nIter, tstop-tstart, bmrm.
Fp, bmrm.
Fd, R);
323 for (uint32_t i=0; i<bmrm.
nCP; ++i)
329 for (uint32_t j=0; j<nDim; ++j)
337 for (uint32_t i=0; i<bmrm.
nCP; ++i)
347 for (uint32_t i=0; i<nDim; ++i)
368 for (uint32_t aaa=0; aaa<bmrm.
nCP; ++aaa)
382 for (uint32_t i=0; i<nDim; ++i)
387 for (uint32_t j=0; j<bmrm.
nCP; ++j)
391 rsum+=A_1[i]*beta[j];
398 R = model->
risk(subgrad, W);
406 for (uint32_t j=0; j<nDim; ++j)
408 b[bmrm.
nCP]+=subgrad[j]*W[j];
409 sq_norm_W+=W[j]*W[j];
410 sq_norm_Wdiff+=(W[j]-prevW[j])*(W[j]-prevW[j]);
413 bmrm.
Fp=R+0.5*_lambda*sq_norm_W;
414 bmrm.
Fd=-qp_exitflag.QP;
415 wdist=::sqrt(sq_norm_Wdiff);
422 if (bmrm.
Fp - bmrm.
Fd <= TolAbs)
425 if (bmrm.
nCP >= BufSize)
433 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",
435 (bmrm.
Fp-bmrm.
Fd)/bmrm.
Fp, R, bmrm.
nCP, bmrm.
nzA, qp_exitflag.exitflag);
444 if (bmrm.
nCP>=BufSize)
462 while (cp_ptr != CPList_tail)
464 if (ICPcounter[tmp_idx++]>=cleanAfter)
466 ICPs[cntICP++]=cp_ptr->
address;
470 ACPs[cntACP++]=tmp_idx-1;
479 nCP_new=bmrm.
nCP-cntICP;
481 for (uint32_t i=0; i<cntICP; ++i)
486 while(cp_ptr->
address != ICPs[i])
501 (bmrm.
nCP-tmp_idx)*
sizeof(uint32_t));
503 (bmrm.
nCP-tmp_idx)*
sizeof(uint32_t));
507 for (uint32_t i=0; i < nCP_new; ++i)
509 for (uint32_t j=0; j < nCP_new; ++j)
516 for (uint32_t i=0; i<nCP_new; ++i)
517 for (uint32_t j=0; j<nCP_new; ++j)