16 using namespace shogun;
41 SG_ERROR(
"Number of training vectors does not match number of labels\n")
49 const int64_t maxiter = 1L<<30;
85 for (int32_t i=0; i<n; i++)
97 while (niter++ < maxiter)
103 bool free_alpha=
false;
109 for (int32_t i=0; i<n; i++)
113 if (alphas[i] > 0 && alphas[i] < d)
116 if ( (dalphas[i]==0) ||
117 (alphas[i]==0 && dalphas[i] >0) ||
118 (alphas[i]==d && dalphas[i] <0)
127 else if (v == maxpviol)
134 if (maxpidx<0 || maxdviol<0)
135 SG_ERROR(
"no violation no convergence, should not happen!\n")
143 if (niter%10000 == 0)
147 for (int32_t i=0; i<n; i++)
150 for (int32_t j=0; j<n; j++)
154 SG_DEBUG(
"obj:%f pviol:%f dviol:%f maxpidx:%d iter:%d\n", obj, maxpviol, maxdviol, maxpidx, niter)
160 primalcool = (maxpviol < primaleps*stopfac);
161 dualcool = (maxdviol < dualeps*stopfac) || (!free_alpha);
164 if (primalcool && dualcool)
167 SG_INFO(
" no free alpha, stopping! #iter=%d\n", niter)
169 SG_INFO(
" done! #iter=%d\n", niter)
174 ASSERT(maxpidx>=0 && maxpidx<n)
176 hstep=-hessres[maxpidx]/
compute_H(maxpidx,maxpidx);
180 hessest-=F[maxpidx]*hstep;
187 if (tmpalpha > d-alpha_eps)
190 if (tmpalpha < 0+alpha_eps)
194 float64_t alphachange = tmpalpha - alphas[maxpidx];
195 alphas[maxpidx] = tmpalpha;
198 for (int32_t i=0; i<n; i++)
200 hessres[i]+=h[i]*hstep;
203 dalphas[i] +=h[i]*alphachange;
207 detas+=F[maxpidx]*alphachange;
222 for (int32_t i=0; i<n; i++)
223 dalphas[i]+= F[i] * etachange;
228 if (niter >= maxiter)
233 for (int32_t i=0; i<n; i++)
245 for (int32_t i=0; i<n; i++)