45 #include "blockmemshell/memory.h"
47 #include "scip/pub_misc.h"
48 #include "scip/pub_message.h"
54 #define BMS_CALL(x) do \
58 SCIPerrorMessage("No memory in function call.\n"); \
59 return SCIP_NOMEMORY; \
65 struct SCIP_SDPiSolver
67 SCIP_MESSAGEHDLR* messagehdlr;
73 SCIP_Real sdpsolverfeastol;
88 SCIPerrorMessage(
"No SDP-solver available (SDP=none).\n");
89 SCIPerrorMessage(
"Ensure <relaxing/SDP/freq = -1>.\n");
99 SCIPerrorMessage(
"No SDP-solver available (SDP=none).\n");
100 SCIPerrorMessage(
"Ensure <relaxing/SDP/freq = -1>.\n");
124 return "no SDP-Solver linked currently";
137 assert( sdpisolver != NULL );
186 SCIP_MESSAGEHDLR* messagehdlr,
191 assert( sdpisolver != NULL );
192 assert( blkmem != NULL );
193 assert( bufmem != NULL );
194 SCIPdebugMessage(
"Calling SCIPsdpiCreate \n");
195 SCIPdebugMessage(
"Note that currently no SDP-Solver is linked to the binary. Ensure <relaxing/SDP/freq = -1>. \n");
197 BMS_CALL( BMSallocBlockMemory(blkmem, sdpisolver) );
199 (*sdpisolver)->messagehdlr = messagehdlr;
200 (*sdpisolver)->blkmem = blkmem;
201 (*sdpisolver)->bufmem = bufmem;
211 assert( sdpisolver != NULL );
212 assert( *sdpisolver != NULL );
213 SCIPdebugMessage(
"Freeing SDPISolver\n");
215 BMSfreeBlockMemory((*sdpisolver)->blkmem, sdpisolver);
225 SCIPdebugMessage(
"SDPs aren't counted as there is no SDP-solver.\n");
235 SCIPdebugMessage(
"SDPs aren't counted as there is no SDP-solver.\n");
275 int* sdpconstnblocknonz,
279 SCIP_Real** sdpconstval,
281 int** sdpnblockvarnonz,
291 int* blockindchanges,
303 int* startZnblocknonz,
309 SCIP_Real** startZval,
311 int* startXnblocknonz,
317 SCIP_Real** startXval,
353 SCIP_Real penaltyparam,
364 int* sdpconstnblocknonz,
368 SCIP_Real** sdpconstval,
370 int** sdpnblockvarnonz,
380 int* blockindchanges,
392 int* startZnblocknonz,
398 SCIP_Real** startZval,
400 int* startXnblocknonz,
406 SCIP_Real** startXval,
413 SCIP_Bool* penaltybound
461 SCIP_Bool* primalfeasible,
462 SCIP_Bool* dualfeasible
467 return SCIP_PLUGINNOTFOUND;
624 return SCIP_PLUGINNOTFOUND;
635 return SCIP_PLUGINNOTFOUND;
652 return SCIP_PLUGINNOTFOUND;
660 int* startXnblocknonz
666 return SCIP_PLUGINNOTFOUND;
683 int* startXnblocknonz,
687 SCIP_Real** startXval
692 return SCIP_PLUGINNOTFOUND;
712 return SCIP_PLUGINNOTFOUND;
719 int* startXnblocknonz
724 return SCIP_PLUGINNOTFOUND;
734 int* startXnblocknonz,
738 SCIP_Real** startXval
743 return SCIP_PLUGINNOTFOUND;
753 return SCIP_PLUGINNOTFOUND;
764 return SCIP_PLUGINNOTFOUND;
775 return SCIP_PLUGINNOTFOUND;
786 return SCIP_PLUGINNOTFOUND;
825 assert( sdpisolver != NULL );
826 assert( dval != NULL );
831 *dval = sdpisolver->epsilon;
834 *dval = sdpisolver->gaptol;
837 *dval = sdpisolver->feastol;
840 *dval = sdpisolver->sdpsolverfeastol;
843 *dval = sdpisolver->objlimit;
846 return SCIP_PARAMETERUNKNOWN;
859 assert( sdpisolver != NULL );
864 sdpisolver->epsilon = dval;
865 SCIPdebugMessage(
"Setting sdpisolver epsilon to %f.\n", dval);
868 sdpisolver->gaptol = dval;
869 SCIPdebugMessage(
"Setting sdpisolver gaptol to %f.\n", dval);
872 sdpisolver->feastol = dval;
873 SCIPdebugMessage(
"Setting sdpisolver feastol to %f.\n", dval);
876 sdpisolver->sdpsolverfeastol = dval;
877 SCIPdebugMessage(
"Setting sdpisolver sdpsolverfeastol to %f.\n", dval);
880 SCIPdebugMessage(
"Setting sdpisolver objlimit to %f.\n", dval);
881 sdpisolver->objlimit = dval;
884 return SCIP_PARAMETERUNKNOWN;
897 assert( sdpisolver != NULL );
902 *ival = (int) sdpisolver->sdpinfo;
903 SCIPdebugMessage(
"Getting sdpisolver information output (%d).\n", *ival);
906 return SCIP_PARAMETERUNKNOWN;
919 assert( sdpisolver != NULL );
924 sdpisolver->sdpinfo = (SCIP_Bool) ival;
925 SCIPdebugMessage(
"Setting sdpisolver information output (%d).\n", ival);
928 return SCIP_PARAMETERUNKNOWN;
940 SCIPdebugMessage(
"Lambdastar parameter only used by SDPA.");
949 SCIP_Real* penaltyparam
952 assert( penaltyparam != NULL );
954 *penaltyparam = 1E+10;
962 SCIP_Real penaltyparam,
963 SCIP_Real* maxpenaltyparam
966 assert( maxpenaltyparam != NULL );
968 *maxpenaltyparam = 1E+10;
993 return SCIP_PLUGINNOTFOUND;
1004 return SCIP_PLUGINNOTFOUND;
SCIP_Bool SCIPsdpiSolverDoesWarmstartNeedPrimal(void)
SCIP_RETCODE SCIPsdpiSolverIgnoreInstability(SCIP_SDPISOLVER *sdpisolver, SCIP_Bool *success)
SCIP_Bool SCIPsdpiSolverIsOptimal(SCIP_SDPISOLVER *sdpisolver)
SCIP_Real SCIPsdpiSolverGetMaxPrimalEntry(SCIP_SDPISOLVER *sdpisolver)
SCIP_RETCODE SCIPsdpiSolverGetPrimalBoundVars(SCIP_SDPISOLVER *sdpisolver, SCIP_Real *lbvars, SCIP_Real *ubvars, int *arraylength)
SCIP_Bool SCIPsdpiSolverIsAcceptable(SCIP_SDPISOLVER *sdpisolver)
SCIP_Bool SCIPsdpiSolverIsDualFeasible(SCIP_SDPISOLVER *sdpisolver)
SCIP_RETCODE SCIPsdpiSolverGetPrimalNonzeros(SCIP_SDPISOLVER *sdpisolver, int nblocks, int *startXnblocknonz)
const char * SCIPsdpiSolverGetSolverDesc(void)
SCIP_RETCODE SCIPsdpiSolverGetPrimalMatrix(SCIP_SDPISOLVER *sdpisolver, int nblocks, int *startXnblocknonz, int **startXrow, int **startXcol, SCIP_Real **startXval)
SCIP_Bool SCIPsdpiSolverIsPrimalInfeasible(SCIP_SDPISOLVER *sdpisolver)
enum SCIP_SDPSolverSetting SCIP_SDPSOLVERSETTING
SCIP_RETCODE SCIPsdpiSolverReadSDP(SCIP_SDPISOLVER *sdpisolver, const char *fname)
SCIP_Bool SCIPsdpiSolverFeasibilityKnown(SCIP_SDPISOLVER *sdpisolver)
SCIP_Real SCIPsdpiSolverInfinity(SCIP_SDPISOLVER *sdpisolver)
SCIP_Bool SCIPsdpiSolverIsPrimalUnbounded(SCIP_SDPISOLVER *sdpisolver)
int SCIPsdpiSolverGetInternalStatus(SCIP_SDPISOLVER *sdpisolver)
interface methods for specific SDP-solvers
SCIP_Real SCIPsdpiSolverGetDefaultSdpiSolverFeastol(void)
SCIP_Bool SCIPsdpiSolverIsDualInfeasible(SCIP_SDPISOLVER *sdpisolver)
SCIP_Bool SCIPsdpiSolverIsObjlimExc(SCIP_SDPISOLVER *sdpisolver)
SCIP_Bool SCIPsdpiSolverIsTimelimExc(SCIP_SDPISOLVER *sdpisolver)
SCIP_RETCODE SCIPsdpiSolverResetCounter(SCIP_SDPISOLVER *sdpisolver)
const char * SCIPsdpiSolverGetSolverName(void)
SCIP_RETCODE SCIPsdpiSolverLoadAndSolve(SCIP_SDPISOLVER *sdpisolver, int nvars, SCIP_Real *obj, SCIP_Real *lb, SCIP_Real *ub, int nsdpblocks, int *sdpblocksizes, int *sdpnblockvars, int sdpconstnnonz, int *sdpconstnblocknonz, int **sdpconstrow, int **sdpconstcol, SCIP_Real **sdpconstval, int sdpnnonz, int **sdpnblockvarnonz, int **sdpvar, int ***sdprow, int ***sdpcol, SCIP_Real ***sdpval, int **indchanges, int *nremovedinds, int *blockindchanges, int nremovedblocks, int nlpcons, int noldlpcons, SCIP_Real *lplhs, SCIP_Real *lprhs, int *rownactivevars, int lpnnonz, int *lprow, int *lpcol, SCIP_Real *lpval, SCIP_Real *starty, int *startZnblocknonz, int **startZrow, int **startZcol, SCIP_Real **startZval, int *startXnblocknonz, int **startXrow, int **startXcol, SCIP_Real **startXval, SCIP_SDPSOLVERSETTING startsettings, SCIP_Real timelimit)
int SCIPsdpiSolverGetDefaultSdpiSolverNpenaltyIncreases(void)
SCIP_RETCODE SCIPsdpiSolverComputeMaxPenaltyparam(SCIP_SDPISOLVER *sdpisolver, SCIP_Real penaltyparam, SCIP_Real *maxpenaltyparam)
SCIP_RETCODE SCIPsdpiSolverFree(SCIP_SDPISOLVER **sdpisolver)
SCIP_RETCODE SCIPsdpiSolverGetSolFeasibility(SCIP_SDPISOLVER *sdpisolver, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
SCIP_RETCODE SCIPsdpiSolverGetIterations(SCIP_SDPISOLVER *sdpisolver, int *iterations)
SCIP_RETCODE SCIPsdpiSolverGetRealpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, SCIP_Real *dval)
SCIP_RETCODE SCIPsdpiSolverSettingsUsed(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPSOLVERSETTING *usedsetting)
SCIP_RETCODE SCIPsdpiSolverGetObjval(SCIP_SDPISOLVER *sdpisolver, SCIP_Real *objval)
SCIP_RETCODE SCIPsdpiSolverGetSdpCalls(SCIP_SDPISOLVER *sdpisolver, int *calls)
void * SCIPsdpiSolverGetSolverPointer(SCIP_SDPISOLVER *sdpisolver)
SCIP_RETCODE SCIPsdpiSolverLoadAndSolveWithPenalty(SCIP_SDPISOLVER *sdpisolver, SCIP_Real penaltyparam, SCIP_Bool withobj, SCIP_Bool rbound, int nvars, SCIP_Real *obj, SCIP_Real *lb, SCIP_Real *ub, int nsdpblocks, int *sdpblocksizes, int *sdpnblockvars, int sdpconstnnonz, int *sdpconstnblocknonz, int **sdpconstrow, int **sdpconstcol, SCIP_Real **sdpconstval, int sdpnnonz, int **sdpnblockvarnonz, int **sdpvar, int ***sdprow, int ***sdpcol, SCIP_Real ***sdpval, int **indchanges, int *nremovedinds, int *blockindchanges, int nremovedblocks, int nlpcons, int noldlpcons, SCIP_Real *lplhs, SCIP_Real *lprhs, int *rownactivevars, int lpnnonz, int *lprow, int *lpcol, SCIP_Real *lpval, SCIP_Real *starty, int *startZnblocknonz, int **startZrow, int **startZcol, SCIP_Real **startZval, int *startXnblocknonz, int **startXrow, int **startXcol, SCIP_Real **startXval, SCIP_SDPSOLVERSETTING startsettings, SCIP_Real timelimit, SCIP_Bool *feasorig, SCIP_Bool *penaltybound)
SCIP_Bool SCIPsdpiSolverIsPrimalFeasible(SCIP_SDPISOLVER *sdpisolver)
SCIP_RETCODE SCIPsdpiSolverSetIntpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, int ival)
SCIP_RETCODE SCIPsdpiSolverCreate(SCIP_SDPISOLVER **sdpisolver, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, BMS_BUFMEM *bufmem)
SCIP_Real SCIPsdpiSolverGetDefaultSdpiSolverGaptol(void)
SCIP_RETCODE SCIPsdpiSolverSetRealpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, SCIP_Real dval)
SCIP_RETCODE SCIPsdpiSolverWriteSDP(SCIP_SDPISOLVER *sdpisolver, const char *fname)
SCIP_Bool SCIPsdpiSolverIsInfinity(SCIP_SDPISOLVER *sdpisolver, SCIP_Real val)
SCIP_RETCODE SCIPsdpiSolverComputeLambdastar(SCIP_SDPISOLVER *sdpisolver, SCIP_Real maxguess)
SCIP_RETCODE SCIPsdpiSolverGetPreoptimalPrimalNonzeros(SCIP_SDPISOLVER *sdpisolver, int nblocks, int *startXnblocknonz)
SCIP_RETCODE SCIPsdpiSolverGetIntpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, int *ival)
SCIP_Bool SCIPsdpiSolverWasSolved(SCIP_SDPISOLVER *sdpisolver)
SCIP_RETCODE SCIPsdpiSolverIncreaseCounter(SCIP_SDPISOLVER *sdpisolver)
SCIP_Bool SCIPsdpiSolverIsDualUnbounded(SCIP_SDPISOLVER *sdpisolver)
struct SCIP_SDPiSolver SCIP_SDPISOLVER
SCIP_Bool SCIPsdpiSolverIsConverged(SCIP_SDPISOLVER *sdpisolver)
static void errorMessageAbort(void)
SCIP_RETCODE SCIPsdpiSolverGetSol(SCIP_SDPISOLVER *sdpisolver, SCIP_Real *objval, SCIP_Real *dualsol, int *dualsollength)
SCIP_RETCODE SCIPsdpiSolverGetPreoptimalSol(SCIP_SDPISOLVER *sdpisolver, SCIP_Bool *success, SCIP_Real *dualsol, int *dualsollength, int nblocks, int *startXnblocknonz, int **startXrow, int **startXcol, SCIP_Real **startXval)
enum SCIP_SDPParam SCIP_SDPPARAM
static void errorMessage(void)
SCIP_RETCODE SCIPsdpiSolverComputePenaltyparam(SCIP_SDPISOLVER *sdpisolver, SCIP_Real maxcoeff, SCIP_Real *penaltyparam)
SCIP_Bool SCIPsdpiSolverIsIterlimExc(SCIP_SDPISOLVER *sdpisolver)