108 const double tolRelFeasibility=1e-6;
112 Matrix mAR, mZ(dim,dim-1), mHZ(dim,dim-1), mZHZ(dim-1,dim-1);
113 Vector vTmp(
mmax(nc,dim)), vYB(dim), vD(dim), vTmp2(dim), vTmp3(nc), vLast(dim),
114 vBR_QP, vLambdaScale(nc);
116 double *
lambda=vLambda, *br, *
b=vB, violationMax, violationMax2,
117 *rlambda,ax,al,dviolation, **
a=mA, **ar=mAR, mymin, mymax, maxb, *llambda,
118 **r,t, *scaleLambda=vLambdaScale;
119 char finished=0, feasible=0, *lb=vLB;
128 for (j=0; j<dim; j++)
130 mymin=
mmin(mymin,a[i][j]);
131 mymax=
mmax(mymax,a[i][j]);
132 if ((mymin!=mymax)||(mymin!=0.0)||(mymax!=0.0))
break;
134 if ((mymin!=mymax)||(mymin!=0.0)||(mymax!=0.0))
146 for (i=0; i<nc; i++)
if (lambda[i]!=0.0) lb[
i]=2;
else lb[
i]=1;
160 for (j=0; j<dim; j++) ar[ncr][j]=a[k][j]*t;
176 M.solveTransposInPlace(vYB);
179 printf(
"warning: cholesky factorisation failed.\n");
193 for (i=0; i<ncr; i++)
201 for (i=0; i<ncr; i++)
232 if (mZHZ.cholesky(M))
235 M.solveTransposInPlace(vD);
239 printf(
"warning: cholesky factorisation failed.\n");
244 mZ.multiply(vTmp, vD);
266 lambda[
i]=rlambda[ncr];
275 k=-1; violationMax=-
INF; violationMax2=-
INF;
281 dviolation=b[ii[
i]]-ax;
291 if (dviolation>violationMax2)
292 { k=
i; violationMax2=dviolation; }
297 if (dviolation>violationMax )
298 { j=
i; violationMax =dviolation; }
309 if (lastJ>=0) lambda[lastJ]=0.0;
331 if ((j==-1)&&(!feasible))
334 for (i=0; i<nc; i++)
if (llambda[i]!=0.0) lb[
i]=2;
else lb[
i]=1;
336 if (j==-1) { j=
k; violationMax=violationMax2; }
337 if (ncr==
mmin(dim,nc)) {
347 if (j>=0) { lambda[
j]=1e-5; finished=0; }
void permutIn(Vector vR, VectorInt viP)
double scalarProduct(int nl, Vector v)
void QPReconstructLambda(Vector vLambda, Vector vLambdaScale)
void QR(Matrix Q=Matrix::emptyMatrix, MatrixTriangle R=MatrixTriangle::emptyMatrixTriangle, VectorInt permutation=VectorInt::emptyVectorInt)
Matrix multiply(Matrix B)
void setSize(int _nLine, int _nColumn)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
void solveTransposInPlace(Vector y)
void getSubMatrix(Matrix R, int startL, int StartC, int nl=0, int nc=0)
bool cholesky(MatrixTriangle matL, double lambda=0, double *lambdaCorrection=NULL)
void solveInPlace(Vector b)
void zero(int _i=0, int _n=0)
double euclidianNorm(int i)
void transposeAndMultiply(Vector vR, Matrix M)
void transposeAndMultiply(Vector R, Vector a)
void copyFrom(Vector r, int _n=0)