24#define __FUNCT__ "DSDPSetDualObjective"
25int DSDPSetDualObjective(
DSDP dsdp,
int i,
double bi){
29 if (i>dsdp->m || i<=0){
30 DSDPSETERR2(1,
"Invalid variable number: Is 1 <= %d <= %d?\n",i,dsdp->m);}
31 info=DSDPVecSetElement(dsdp->b,i,bi);DSDPCHKERR(info);
32 DSDPFunctionReturn(0);
45#define __FUNCT__ "DSDPCopyB"
46int DSDPCopyB(
DSDP dsdp,
double bb[],
int m){
51 if (dsdp->m < m) DSDPFunctionReturn(1);
52 info=DSDPVecGetArray(dsdp->b,&b);DSDPCHKERR(info);
53 for (i=0;i<m;i++) bb[i]=b[i+1];
54 info=DSDPVecRestoreArray(dsdp->b,&b);DSDPCHKERR(info);
55 DSDPFunctionReturn(0);
76#define __FUNCT__ "DSDPSetY0"
77int DSDPSetY0(
DSDP dsdp,
int i,
double yi0){
78 int info;
double scale;
81 if (i>dsdp->m || i<=0){
82 DSDPSETERR2(1,
"Invalid variable number: Is 1<= %d <= %d\n",i,dsdp->m);}
83 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
84 info=DSDPVecSetElement(dsdp->y,i,scale*yi0);DSDPCHKERR(info);
85 DSDPFunctionReturn(0);
99#define __FUNCT__ "DSDPGetY"
100int DSDPGetY(
DSDP dsdp,
double y[],
int m){
105 if (dsdp->m < m-1) DSDPFunctionReturn(1);
106 if (dsdp->m > m) DSDPFunctionReturn(1);
107 info=DSDPVecCopy(dsdp->xmaker[0].y,dsdp->ytemp); DSDPCHKERR(info);
108 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
109 info=DSDPVecGetArray(dsdp->ytemp,&yy);DSDPCHKERR(info);
110 for (i=0;i<m;i++) y[i]=yy[i+1]/scale;
111 info=DSDPVecRestoreArray(dsdp->ytemp,&yy);DSDPCHKERR(info);
112 DSDPFunctionReturn(0);
127#define __FUNCT__ "DSDPGetScale"
128int DSDPGetScale(
DSDP dsdp,
double *scale){
129 int info;
double sscale;
132 info=DSDPVecGetC(dsdp->y,&sscale);DSDPCHKERR(info);
134 if (sscale==0) *scale=1.0;
135 DSDPFunctionReturn(0);
152#define __FUNCT__ "DSDPSetScale"
153int DSDPSetScale(
DSDP dsdp,
double scale){
154 int info;
double sscale;
158 if (scale==0) scale=1.0;
159 info=DSDPGetScale(dsdp,&sscale);DSDPCHKERR(info);
161 info=DSDPVecScale(sscale,dsdp->y);
162 dsdp->mutarget*=sscale;
168 DSDPLogInfo(0,2,
"Set DSDP C Scaling: %4.4e\n",scale);
169 DSDPFunctionReturn(0);
184#define __FUNCT__ "DSDPAddObjectiveConstant"
185int DSDPAddObjectiveConstant(
DSDP dsdp,
double c){
189 info=DSDPVecSetC(dsdp->b,-c);DSDPCHKERR(info);
190 DSDPLogInfo(0,2,
"Add Objective Constant: %4.4e\n",c);
191 DSDPFunctionReturn(0);
205#define __FUNCT__ "DSDPSetMaxIts"
206int DSDPSetMaxIts(
DSDP dsdp,
int its){
209 if (its >= 0) dsdp->maxiter = its;
210 DSDPLogInfo(0,2,
"Set Maximum Iterates: %4d\n",its);
211 DSDPFunctionReturn(0);
224#define __FUNCT__ "DSDPGetMaxIts"
225int DSDPGetMaxIts(
DSDP dsdp,
int *its){
229 DSDPFunctionReturn(0);
245#define __FUNCT__ "DSDPSetMaxTrustRadius"
246int DSDPSetMaxTrustRadius(
DSDP dsdp,
double rad){
249 if (rad > 0) dsdp->maxtrustradius = rad;
250 DSDPLogInfo(0,2,
"Set Maximum Trust Radius: %4.4e\n",rad);
251 DSDPFunctionReturn(0);
264#define __FUNCT__ "DSDPGetMaxTrustRadius"
265int DSDPGetMaxTrustRadius(
DSDP dsdp,
double *rad){
268 *rad=dsdp->maxtrustradius;
269 DSDPFunctionReturn(0);
282#define __FUNCT__ "DSDPSetZBar"
283int DSDPSetZBar(
DSDP dsdp,
double ppobj){
288 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
289 dsdp->ppobj=ppobj*scale;
290 DSDPLogInfo(0,2,
"Set Primal Objective and Upper bound on solution: %4.4e. \n",ppobj);
291 DSDPFunctionReturn(0);
310#define __FUNCT__ "DSDPSetR0"
311int DSDPSetR0(
DSDP dsdp,
double res){
316 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
317 info=
DSDPSetRR(dsdp,scale*res); DSDPCHKERR(info);
319 DSDPLogInfo(0,2,
"Set Dual Initial Infeasibility to %4.4e times Identity Matrix. \n",res);
320 DSDPFunctionReturn(0);
339#define __FUNCT__ "DSDPSetBarrierParameter"
340int DSDPSetBarrierParameter(
DSDP dsdp,
double mu){
341 int info;
double scale;
344 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
345 dsdp->mutarget = mu*scale;
346 DSDPLogInfo(0,2,
"Set InitialBarrierParameter: %4.4e \n",mu);
347 DSDPFunctionReturn(0);
363#define __FUNCT__ "DSDPGetBarrierParameter"
364int DSDPGetBarrierParameter(
DSDP dsdp,
double *mu){
365 int info;
double scale;
367 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
368 *mu=dsdp->mutarget/scale;
369 DSDPFunctionReturn(0);
382#define __FUNCT__ "DSDPUsePenalty"
383int DSDPUsePenalty(
DSDP dsdp,
int yesorno){
384 DSDPPenalty UsePenalty;
389 UsePenalty=DSDPAlways;
390 }
else if (yesorno<0){
391 UsePenalty=DSDPNever;
393 UsePenalty=DSDPInfeasible;
395 dsdp->UsePenalty=UsePenalty;
396 info=RConeSetType(dsdp->rcone,UsePenalty);DSDPCHKERR(info);
397 DSDPLogInfo(0,2,
"Set UsePenalty: %d \n",yesorno);
398 DSDPFunctionReturn(0);
417#define __FUNCT__ "DSDPSetPenaltyParameter"
418int DSDPSetPenaltyParameter(
DSDP dsdp,
double Gamma){
420 double scale,ppenalty;
423 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
424 ppenalty=fabs(Gamma*scale);
425 info=DSDPVecSetR(dsdp->b,ppenalty);DSDPCHKERR(info);
426 DSDPLogInfo(0,2,
"Set Penalty Parameter: %4.4e\n",Gamma);
427 DSDPFunctionReturn(0);
442#define __FUNCT__ "DSDPGetPenaltyParameter"
443int DSDPGetPenaltyParameter(
DSDP dsdp,
double *Gamma){
448 info=DSDPVecGetR(dsdp->b,&ppenalty);DSDPCHKERR(info);
449 *Gamma=fabs(ppenalty);
450 DSDPFunctionReturn(0);
456#define __FUNCT__ "DSDPGetPenalty"
457int DSDPGetPenalty(
DSDP dsdp,
double *penalty){
458 int info;
double ppenalty;
461 info=DSDPVecGetR(dsdp->b,&ppenalty);DSDPCHKERR(info);
462 *penalty=fabs(ppenalty);
463 DSDPFunctionReturn(0);
478#define __FUNCT__ "DSDPGetPPObjective"
479int DSDPGetPPObjective(
DSDP dsdp,
double *ppobj){
484 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
485 *ppobj=(dsdp->ppobj)/scale;
486 if (dsdp->cnorm==0) *ppobj=0;
487 DSDPFunctionReturn(0);
501#define __FUNCT__ "DSDPGetDObjective"
502int DSDPGetDObjective(
DSDP dsdp,
double *dobj){
503 int info;
double scale;
506 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
507 *dobj = (dsdp->dobj)/scale;
508 if (dsdp->cnorm==0) *dobj=-fabs(*dobj);
509 DSDPFunctionReturn(0);
522#define __FUNCT__ "DSDPGetDDObjective"
523int DSDPGetDDObjective(
DSDP dsdp,
double *ddobj){
524 int info;
double scale;
527 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
528 *ddobj = (dsdp->ddobj)/scale;
529 if (dsdp->cnorm==0) *ddobj=-fabs(*ddobj);
530 DSDPFunctionReturn(0);
544#define __FUNCT__ "DSDPGetDualityGap"
545int DSDPGetDualityGap(
DSDP dsdp,
double *dgap){
546 int info;
double scale;
549 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
550 *dgap = (dsdp->dualitygap)/scale;
551 DSDPFunctionReturn(0);
563#define __FUNCT__ "DSDPGetIts"
564int DSDPGetIts(
DSDP dsdp,
int *its){
568 DSDPFunctionReturn(0);
581#define __FUNCT__ "DSDPStopReason"
585 *reason=dsdp->reason;
586 DSDPFunctionReturn(0);
600#define __FUNCT__ "DSDPGetR"
601int DSDPGetR(
DSDP dsdp,
double *res){
602 int info;
double rr,scale;
605 info=
DSDPGetRR(dsdp,&rr);DSDPCHKERR(info);
606 info=DSDPGetScale(dsdp,&scale);DSDPCHKERR(info);
608 DSDPFunctionReturn(0);
620#define __FUNCT__ "DSDPGetDataNorms"
621int DSDPGetDataNorms(
DSDP dsdp,
double dnorm[3]){
628 dnorm[0]=dsdp->cnorm;
629 dnorm[1]=dsdp->anorm;
630 dnorm[2]=dsdp->bnorm;
631 DSDPFunctionReturn(0);
644#define __FUNCT__ "DSDPGetMaxYElement"
645int DSDPGetMaxYElement(
DSDP dsdp,
double* ymax){
648 info=DSDPGetYMaxNorm(dsdp,ymax);DSDPCHKERR(info);
649 DSDPFunctionReturn(0);
653#define __FUNCT__ "DSDPGetDimension"
661int DSDPGetDimension(
DSDP dsdp,
double *n){
665 DSDPFunctionReturn(0);
677#define __FUNCT__ "DSDPGetYMaxNorm"
678int DSDPGetYMaxNorm(
DSDP dsdp,
double *ynorm){
683 info=DSDPVecGetC(dsdp->y,&cc);DSDPCHKERR(info);
684 info=DSDPVecGetR(dsdp->y,&rr);DSDPCHKERR(info);
685 info=DSDPVecSetC(dsdp->y,0);DSDPCHKERR(info);
686 info=DSDPVecSetR(dsdp->y,0);DSDPCHKERR(info);
687 info=DSDPVecNormInfinity(dsdp->y,&yy);DSDPCHKERR(info);
688 info=DSDPVecSetC(dsdp->y,cc);DSDPCHKERR(info);
689 info=DSDPVecSetR(dsdp->y,rr);DSDPCHKERR(info);
690 if (cc) yy/=fabs(cc);
691 if (ynorm) *ynorm=yy;
692 DSDPFunctionReturn(0);
706#define __FUNCT__ "DSDPGetNumberOfVariables"
707int DSDPGetNumberOfVariables(
DSDP dsdp,
int *m){
711 DSDPFunctionReturn(0);
723#define __FUNCT__ "DSDPGetPnorm"
724int DSDPGetPnorm(
DSDP dsdp,
double *pnorm){
728 DSDPFunctionReturn(0);
741#define __FUNCT__ "DSDPGetStepLengths"
742int DSDPGetStepLengths(
DSDP dsdp,
double *pstep,
double *dstep){
747 DSDPFunctionReturn(0);
764#define __FUNCT__ "DSDPSetPotentialParameter"
765int DSDPSetPotentialParameter(
DSDP dsdp,
double rho){
768 if (rho>1) dsdp->rhon=rho;
769 DSDPLogInfo(0,2,
"Set Potential Parameter %4.4f\n",rho);
770 DSDPFunctionReturn(0);
783#define __FUNCT__ "DSDPGetPotentialParameter"
784int DSDPGetPotentialParameter(
DSDP dsdp,
double *rho){
788 DSDPFunctionReturn(0);
802#define __FUNCT__ "DSDPGetPotential"
803int DSDPGetPotential(
DSDP dsdp,
double *potential){
806 *potential=dsdp->potential;
807 DSDPFunctionReturn(0);
820#define __FUNCT__ "DSDPUseDynamicRho"
821int DSDPUseDynamicRho(
DSDP dsdp,
int yesorno){
826 DSDPLogInfo(0,2,
"Set UseDynamicRho: %d \n",yesorno);
827 DSDPFunctionReturn(0);
833#define __FUNCT__ "DSDPBoundDualVariables"
844int DSDPBoundDualVariables(
DSDP dsdp,
double lbound,
double ubound){
848 bbound=DSDPMax(fabs(lbound),fabs(ubound));
849 DSDPLogInfo(0,2,
"Bound Variables between %4.4e and %4.4e \n",-bbound,bbound);
851 DSDPFunctionReturn(0);
865#define __FUNCT__ "DSDPGetYBounds"
866int DSDPGetYBounds(
DSDP dsdp,
double *lbound,
double *ubound){
870 DSDPFunctionReturn(0);
884#define __FUNCT__ "DSDPSetYBounds"
885int DSDPSetYBounds(
DSDP dsdp,
double lbound,
double ubound){
889 DSDPFunctionReturn(0);
904#define __FUNCT__ "DSDPReuseMatrix"
905int DSDPReuseMatrix(
DSDP dsdp,
int rm){
909 DSDPLogInfo(0,2,
"Reuse the Schur Matrix: %d times\n",rm);
910 DSDPFunctionReturn(0);
924#define __FUNCT__ "DSDPGetReuseMatrix"
925int DSDPGetReuseMatrix(
DSDP dsdp,
int *rm){
929 DSDPFunctionReturn(0);
944#define __FUNCT__ "DSDPSetMonitor"
945int DSDPSetMonitor(
DSDP dsdp,
int (*monitor)(
DSDP,
void*),
void* monitorctx){
948 if (dsdp->nmonitors<MAX_DSDP_MONITORS){
949 DSDPLogInfo(0,2,
"Set Monitor\n");
950 dsdp->dmonitor[dsdp->nmonitors].monitor=monitor;
951 dsdp->dmonitor[dsdp->nmonitors].monitorctx=monitorctx;
954 DSDPFunctionReturn(0);
967#define __FUNCT__ "DSDPSetConvergenceFlag"
973 DSDPLogInfo(0,2,
"Initial Point Infeasible, Check variable bounds? \n",0);
975 DSDPFunctionReturn(0);
int BoundYConeGetBounds(LUBounds lucone, double *lb, double *ub)
Get bounds on the variables.
int BoundYConeSetBounds(LUBounds lucone, double lb, double ub)
Set bounds on the variables.
The API to DSDP for those applications using DSDP as a subroutine library.
Internal data structure for the DSDP solver.
int DSDPSetRR(DSDP, double)
Set variable r.
int DSDPComputeDataNorms(DSDP)
Compute norms of A,C, and b.
int DSDPGetConicDimension(DSDP, double *)
Get the total dimension of the cones.
int DSDPGetRR(DSDP, double *)
Get variable r.
DSDPTerminationReason
There are many reasons to terminate the solver.
Error handling, printing, and profiling.
Internal structures for the DSDP solver.