Hi,
Providing the data is impossible with the 60K limit and no attachments...
The AlgLib part of my application does nothing different than the demo code  see below. 'ir_svm' just creates the (symmetric) ND Hessian and (N+1)D constraints matrices etc.
The constraints are: all Xi > 0 and sigma(Xi * Yi, i=1..N) = 0, where N, the number of training points, was at most 770  but might need to be larger, Xi, i=1..N, are the LaGarange multipliers  and the QP unknowns, where Yi, i=1..N, are either 1 or 1 according to Ti being a 'true' or 'false' training point. Scales were set uniformly for all N  as 0.1, 1, 10, 100, 1000  with no appreciable effect. No initial guess for Xi is available  so initialized with ones.
The QP having converged successfully, W, defining the the Mdimensional (58) hyperplane separating the 'true' training points from the 'false' ones can be calculated  and a scalar b such that (1) <w . Ti>  b should be >= 1 for 'true' Mdimensional Training points and <w . Ti>  b should be <= 1 for 'false' Training points; <w . Ti> here is the inner product between the two Mdimensional vectors.
The distance between the two sets of training points is 2 / W.
The result of the QP yields small but nonzero distance between the two sets  but the conditions (1) don't hold correctly  the training points for which the Lagrange multiplies came out identically zero full fill  not (1)  rather, in most cases, a weaker version (2) <w . Ti>  b should be >= f1 for 'true' Training points and <w . Ti>  b should be <= f2 for 'false' Training points; where 0< f1 & f2 < 1  and in isolated cases not even (2) holds...
int _tmain(int argc, _TCHAR* argv[]) { try { double *pa, *pb, *pc, *ps, *px; int *pct;
int N = ir_svm(&pa, &pb, &pc, &pct, &ps, &px);
real_2d_array a; a.setcontent(N, N, pa);
real_1d_array b; b.setcontent(N, pb);
real_1d_array s; s.setcontent(N, ps);
real_2d_array c; c.setcontent(N + 1, N + 1, pc);
integer_1d_array ct; ct.setcontent(N + 1, pct);
real_1d_array x; x.setcontent(N, px);
minqpstate state; minqpreport rep;
// create solver, set quadratic/linear terms minqpcreate(N, state); minqpsetquadraticterm(state, a); minqpsetlinearterm(state, b); minqpsetlc(state, c, ct);
// NOTE: for convex problems you may try using minqpsetscaleautodiag() // which automatically determines variable scales. minqpsetscale(state, s);
// // Solve problem with BLEICbased QP solver. // // This solver is intended for problems with moderate (up to 50) number // of general linear constraints and unlimited number of box constraints. // // Default stopping criteria are used. //
//minqpsetalgobleic(state, 0.0, 0.0, 0.0, 0); minqpsetalgodenseaul(state, 1.0e15, 5.0e+4, 10);
minqpoptimize(state); minqpresults(state, x, rep); printf("inneriterationscount %u\n" "ncholesky %u, nmv %u\n" "outeriterationscount %u\n" "terminationtype %d\n" , rep.inneriterationscount, rep.ncholesky, rep.nmv, rep.outeriterationscount, rep.terminationtype); } catch(ap_error) { printf("Exception!\n"); getchar(); } return 0; }
