SCIP-SDP  3.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sdpisolver.h
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of SCIPSDP - a solving framework for mixed-integer */
4 /* semidefinite programs based on SCIP. */
5 /* */
6 /* Copyright (C) 2011-2013 Discrete Optimization, TU Darmstadt */
7 /* EDOM, FAU Erlangen-Nürnberg */
8 /* 2014-2017 Discrete Optimization, TU Darmstadt */
9 /* */
10 /* */
11 /* This program is free software; you can redistribute it and/or */
12 /* modify it under the terms of the GNU Lesser General Public License */
13 /* as published by the Free Software Foundation; either version 3 */
14 /* of the License, or (at your option) any later version. */
15 /* */
16 /* This program is distributed in the hope that it will be useful, */
17 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
18 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
19 /* GNU Lesser General Public License for more details. */
20 /* */
21 /* You should have received a copy of the GNU Lesser General Public License */
22 /* along with this program; if not, write to the Free Software */
23 /* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.*/
24 /* */
25 /* */
26 /* Based on SCIP - Solving Constraint Integer Programs */
27 /* Copyright (C) 2002-2017 Zuse Institute Berlin */
28 /* SCIP is distributed under the terms of the SCIP Academic Licence, */
29 /* see file COPYING in the SCIP distribution. */
30 /* */
31 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
32 
55 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
56 
57 #ifndef __SCIP_SDPISOLVER_H__
58 #define __SCIP_SDPISOLVER_H__
59 
60 
61 #include "scip/def.h"
62 #include "blockmemshell/memory.h"
63 #include "scip/type_retcode.h"
64 #include "sdpi/type_sdpi.h"
65 
66 #ifdef __cplusplus
67 extern "C" {
68 #endif
69 
70 typedef struct SCIP_SDPiSolver SCIP_SDPISOLVER;
72 /*
73  * Miscellaneous Methods
74  */
75 
80 EXTERN
81 const char* SCIPsdpiSolverGetSolverName(
82  void
83  );
84 
86 EXTERN
87 const char* SCIPsdpiSolverGetSolverDesc(
88  void
89  );
90 
97 EXTERN
99  SCIP_SDPISOLVER* sdpisolver
100  );
101 
103 EXTERN
105  void
106  );
107 
109 EXTERN
111  void
112  );
113 
119 /*
120  * SDPI Creation and Destruction Methods
121  */
122 
127 EXTERN
128 SCIP_RETCODE SCIPsdpiSolverCreate(
129  SCIP_SDPISOLVER** sdpisolver,
130  SCIP_MESSAGEHDLR* messagehdlr,
131  BMS_BLKMEM* blkmem,
132  BMS_BUFMEM* bufmem
133  );
134 
136 EXTERN
137 SCIP_RETCODE SCIPsdpiSolverFree(
138  SCIP_SDPISOLVER** sdpisolver
139  );
140 
142 EXTERN
143 SCIP_RETCODE SCIPsdpiSolverIncreaseCounter(
144  SCIP_SDPISOLVER* sdpisolver
145  );
146 
148 EXTERN
149 SCIP_RETCODE SCIPsdpiSolverResetCounter(
150  SCIP_SDPISOLVER* sdpisolver
151  );
152 
155 /*
156  * Solving Methods
157  */
158 
174 EXTERN
175 SCIP_RETCODE SCIPsdpiSolverLoadAndSolve(
176  SCIP_SDPISOLVER* sdpisolver,
177  int nvars,
178  SCIP_Real* obj,
179  SCIP_Real* lb,
180  SCIP_Real* ub,
181  int nsdpblocks,
182  int* sdpblocksizes,
183  int* sdpnblockvars,
184  int sdpconstnnonz,
185  int* sdpconstnblocknonz,
187  int** sdpconstrow,
188  int** sdpconstcol,
189  SCIP_Real** sdpconstval,
190  int sdpnnonz,
191  int** sdpnblockvarnonz,
193  int** sdpvar,
195  int*** sdprow,
196  int*** sdpcol,
197  SCIP_Real*** sdpval,
198  int** indchanges,
200  int* nremovedinds,
201  int* blockindchanges,
202  int nremovedblocks,
203  int nlpcons,
204  int noldlpcons,
205  SCIP_Real* lplhs,
206  SCIP_Real* lprhs,
207  int* rownactivevars,
208  int lpnnonz,
209  int* lprow,
210  int* lpcol,
211  SCIP_Real* lpval,
212  SCIP_Real* start,
213  SCIP_SDPSOLVERSETTING startsettings,
215  SCIP_Real timelimit
216 );
217 
237 EXTERN
239  SCIP_SDPISOLVER* sdpisolver,
240  SCIP_Real penaltyparam,
241  SCIP_Bool withobj,
242  SCIP_Bool rbound,
243  int nvars,
244  SCIP_Real* obj,
245  SCIP_Real* lb,
246  SCIP_Real* ub,
247  int nsdpblocks,
248  int* sdpblocksizes,
249  int* sdpnblockvars,
250  int sdpconstnnonz,
251  int* sdpconstnblocknonz,
253  int** sdpconstrow,
254  int** sdpconstcol,
255  SCIP_Real** sdpconstval,
256  int sdpnnonz,
257  int** sdpnblockvarnonz,
259  int** sdpvar,
261  int*** sdprow,
262  int*** sdpcol,
263  SCIP_Real*** sdpval,
264  int** indchanges,
266  int* nremovedinds,
267  int* blockindchanges,
268  int nremovedblocks,
269  int nlpcons,
270  int noldlpcons,
271  SCIP_Real* lplhs,
272  SCIP_Real* lprhs,
273  int* rownactivevars,
274  int lpnnonz,
275  int* lprow,
276  int* lpcol,
277  SCIP_Real* lpval,
278  SCIP_Real* start,
279  SCIP_SDPSOLVERSETTING startsettings,
281  SCIP_Real timelimit,
282  SCIP_Bool* feasorig,
284  SCIP_Bool* penaltybound
286 );
287 
288 
289 
295 /*
296  * Solution Information Methods
297  */
298 
303 EXTERN
304 SCIP_Bool SCIPsdpiSolverWasSolved(
305  SCIP_SDPISOLVER* sdpisolver
306  );
307 
314 EXTERN
316  SCIP_SDPISOLVER* sdpisolver
317  );
318 
320 EXTERN
322  SCIP_SDPISOLVER* sdpisolver,
323  SCIP_Bool* primalfeasible,
324  SCIP_Bool* dualfeasible
325  );
326 
329 EXTERN
331  SCIP_SDPISOLVER* sdpisolver
332  );
333 
336 EXTERN
338  SCIP_SDPISOLVER* sdpisolver
339  );
340 
343 EXTERN
345  SCIP_SDPISOLVER* sdpisolver
346  );
347 
350 EXTERN
352  SCIP_SDPISOLVER* sdpisolver
353  );
354 
357 EXTERN
359  SCIP_SDPISOLVER* sdpisolver
360  );
361 
364 EXTERN
366  SCIP_SDPISOLVER* sdpisolver
367  );
368 
370 EXTERN
371 SCIP_Bool SCIPsdpiSolverIsConverged(
372  SCIP_SDPISOLVER* sdpisolver
373  );
374 
376 EXTERN
377 SCIP_Bool SCIPsdpiSolverIsObjlimExc(
378  SCIP_SDPISOLVER* sdpisolver
379  );
380 
382 EXTERN
384  SCIP_SDPISOLVER* sdpisolver
385  );
386 
388 EXTERN
390  SCIP_SDPISOLVER* sdpisolver
391  );
392 
403 EXTERN
405  SCIP_SDPISOLVER* sdpisolver
406  );
407 
409 EXTERN
410 SCIP_Bool SCIPsdpiSolverIsOptimal(
411  SCIP_SDPISOLVER* sdpisolver
412  );
413 
416 EXTERN
418  SCIP_SDPISOLVER* sdpisolver
419  );
420 
422 EXTERN
424  SCIP_SDPISOLVER* sdpisolver,
425  SCIP_Bool* success
426  );
427 
429 EXTERN
430 SCIP_RETCODE SCIPsdpiSolverGetObjval(
431  SCIP_SDPISOLVER* sdpisolver,
432  SCIP_Real* objval
433  );
434 
439 EXTERN
440 SCIP_RETCODE SCIPsdpiSolverGetSol(
441  SCIP_SDPISOLVER* sdpisolver,
442  SCIP_Real* objval,
443  SCIP_Real* dualsol,
444  int* dualsollength
446  );
447 
455 EXTERN
457  SCIP_SDPISOLVER* sdpisolver,
458  SCIP_Real* lbvars,
459  SCIP_Real* ubvars,
460  int* arraylength
462  );
463 
465 EXTERN
466 SCIP_RETCODE SCIPsdpiSolverGetIterations(
467  SCIP_SDPISOLVER* sdpisolver,
468  int* iterations
469  );
470 
472 EXTERN
473 SCIP_RETCODE SCIPsdpiSolverGetSdpCalls(
474  SCIP_SDPISOLVER* sdpisolver,
475  int* calls
476  );
477 
479 EXTERN
480 SCIP_RETCODE SCIPsdpiSolverSettingsUsed(
481  SCIP_SDPISOLVER* sdpisolver,
482  SCIP_SDPSOLVERSETTING* usedsetting
483  );
484 
490 /*
491  * SDPi State Methods
492  */
493 
494 
495 
496 /*
497  * Numerical Methods
498  */
499 
504 EXTERN
505 SCIP_Real SCIPsdpiSolverInfinity(
506  SCIP_SDPISOLVER* sdpisolver
507  );
508 
510 EXTERN
511 SCIP_Bool SCIPsdpiSolverIsInfinity(
512  SCIP_SDPISOLVER* sdpisolver,
513  SCIP_Real val
514  );
515 
517 EXTERN
518 SCIP_RETCODE SCIPsdpiSolverGetRealpar(
519  SCIP_SDPISOLVER* sdpisolver,
520  SCIP_SDPPARAM type,
521  SCIP_Real* dval
522  );
523 
525 EXTERN
526 SCIP_RETCODE SCIPsdpiSolverSetRealpar(
527  SCIP_SDPISOLVER* sdpisolver,
528  SCIP_SDPPARAM type,
529  SCIP_Real dval
530  );
531 
533 EXTERN
534 SCIP_RETCODE SCIPsdpiSolverGetIntpar(
535  SCIP_SDPISOLVER* sdpisolver,
536  SCIP_SDPPARAM type,
537  int* ival
538  );
539 
541 EXTERN
542 SCIP_RETCODE SCIPsdpiSolverSetIntpar(
543  SCIP_SDPISOLVER* sdpisolver,
544  SCIP_SDPPARAM type,
545  int ival
546  );
547 
549 EXTERN
551  SCIP_SDPISOLVER* sdpisolver,
552  SCIP_Real maxguess
553  );
554 
556 EXTERN
558  SCIP_SDPISOLVER* sdpisolver,
559  SCIP_Real maxcoeff,
560  SCIP_Real* penaltyparam
561  );
562 
564 EXTERN
566  SCIP_SDPISOLVER* sdpisolver,
567  SCIP_Real penaltyparam,
568  SCIP_Real* maxpenaltyparam
569  );
570 
576 /*
577  * File Interface Methods
578  */
579 
584 EXTERN
585 SCIP_RETCODE SCIPsdpiSolverReadSDP(
586  SCIP_SDPISOLVER* sdpisolver,
587  const char* fname
588  );
589 
591 EXTERN
592 SCIP_RETCODE SCIPsdpiSolverWriteSDP(
593  SCIP_SDPISOLVER* sdpisolver,
594  const char* fname
595  );
596 
599 #ifdef __cplusplus
600 }
601 #endif
602 
603 #endif
EXTERN SCIP_RETCODE SCIPsdpiSolverIncreaseCounter(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetSdpCalls(SCIP_SDPISOLVER *sdpisolver, int *calls)
EXTERN SCIP_RETCODE SCIPsdpiSolverWriteSDP(SCIP_SDPISOLVER *sdpisolver, const char *fname)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetSolFeasibility(SCIP_SDPISOLVER *sdpisolver, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
EXTERN SCIP_RETCODE SCIPsdpiSolverSetRealpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, SCIP_Real dval)
EXTERN SCIP_Bool SCIPsdpiSolverIsObjlimExc(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_Bool SCIPsdpiSolverIsAcceptable(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverCreate(SCIP_SDPISOLVER **sdpisolver, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, BMS_BUFMEM *bufmem)
EXTERN SCIP_RETCODE SCIPsdpiSolverResetCounter(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_Bool SCIPsdpiSolverFeasibilityKnown(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_Bool SCIPsdpiSolverIsConverged(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetPrimalBoundVars(SCIP_SDPISOLVER *sdpisolver, SCIP_Real *lbvars, SCIP_Real *ubvars, int *arraylength)
enum SCIP_SDPSolverSetting SCIP_SDPSOLVERSETTING
Definition: type_sdpi.h:78
EXTERN SCIP_RETCODE SCIPsdpiSolverFree(SCIP_SDPISOLVER **sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverComputeMaxPenaltyparam(SCIP_SDPISOLVER *sdpisolver, SCIP_Real penaltyparam, SCIP_Real *maxpenaltyparam)
EXTERN int SCIPsdpiSolverGetDefaultSdpiSolverNpenaltyIncreases(void)
EXTERN SCIP_Bool SCIPsdpiSolverWasSolved(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverComputePenaltyparam(SCIP_SDPISOLVER *sdpisolver, SCIP_Real maxcoeff, SCIP_Real *penaltyparam)
EXTERN SCIP_Bool SCIPsdpiSolverIsDualFeasible(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_Bool SCIPsdpiSolverIsOptimal(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverReadSDP(SCIP_SDPISOLVER *sdpisolver, const char *fname)
EXTERN SCIP_Bool SCIPsdpiSolverIsPrimalUnbounded(SCIP_SDPISOLVER *sdpisolver)
EXTERN int SCIPsdpiSolverGetInternalStatus(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetIterations(SCIP_SDPISOLVER *sdpisolver, int *iterations)
EXTERN SCIP_RETCODE SCIPsdpiSolverSetIntpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, int ival)
EXTERN const char * SCIPsdpiSolverGetSolverDesc(void)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetIntpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, int *ival)
EXTERN SCIP_Bool SCIPsdpiSolverIsDualInfeasible(SCIP_SDPISOLVER *sdpisolver)
EXTERN const char * SCIPsdpiSolverGetSolverName(void)
type definitions for specific SDP-solver interfaces
EXTERN SCIP_Bool SCIPsdpiSolverIsPrimalInfeasible(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverSettingsUsed(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPSOLVERSETTING *usedsetting)
EXTERN SCIP_Bool SCIPsdpiSolverIsIterlimExc(SCIP_SDPISOLVER *sdpisolver)
EXTERN 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 *start, SCIP_SDPSOLVERSETTING startsettings, SCIP_Real timelimit)
EXTERN SCIP_RETCODE SCIPsdpiSolverIgnoreInstability(SCIP_SDPISOLVER *sdpisolver, SCIP_Bool *success)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetRealpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, SCIP_Real *dval)
EXTERN SCIP_Bool SCIPsdpiSolverIsTimelimExc(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetObjval(SCIP_SDPISOLVER *sdpisolver, SCIP_Real *objval)
EXTERN SCIP_Bool SCIPsdpiSolverIsDualUnbounded(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetSol(SCIP_SDPISOLVER *sdpisolver, SCIP_Real *objval, SCIP_Real *dualsol, int *dualsollength)
EXTERN SCIP_Bool SCIPsdpiSolverIsPrimalFeasible(SCIP_SDPISOLVER *sdpisolver)
struct SCIP_SDPiSolver SCIP_SDPISOLVER
Definition: sdpisolver.h:70
EXTERN SCIP_Real SCIPsdpiSolverGetDefaultSdpiSolverFeastol(void)
EXTERN SCIP_Real SCIPsdpiSolverInfinity(SCIP_SDPISOLVER *sdpisolver)
enum SCIP_SDPParam SCIP_SDPPARAM
Definition: type_sdpi.h:67
EXTERN void * SCIPsdpiSolverGetSolverPointer(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_Bool SCIPsdpiSolverIsInfinity(SCIP_SDPISOLVER *sdpisolver, SCIP_Real val)
EXTERN 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 *start, SCIP_SDPSOLVERSETTING startsettings, SCIP_Real timelimit, SCIP_Bool *feasorig, SCIP_Bool *penaltybound)
EXTERN SCIP_RETCODE SCIPsdpiSolverComputeLambdastar(SCIP_SDPISOLVER *sdpisolver, SCIP_Real maxguess)