SCIP-SDP  3.1.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 
115 EXTERN
117  void
118  );
119 
121 EXTERN
123  void
124  );
125 
131 /*
132  * SDPI Creation and Destruction Methods
133  */
134 
139 EXTERN
140 SCIP_RETCODE SCIPsdpiSolverCreate(
141  SCIP_SDPISOLVER** sdpisolver,
142  SCIP_MESSAGEHDLR* messagehdlr,
143  BMS_BLKMEM* blkmem,
144  BMS_BUFMEM* bufmem
145  );
146 
148 EXTERN
149 SCIP_RETCODE SCIPsdpiSolverFree(
150  SCIP_SDPISOLVER** sdpisolver
151  );
152 
154 EXTERN
155 SCIP_RETCODE SCIPsdpiSolverIncreaseCounter(
156  SCIP_SDPISOLVER* sdpisolver
157  );
158 
160 EXTERN
161 SCIP_RETCODE SCIPsdpiSolverResetCounter(
162  SCIP_SDPISOLVER* sdpisolver
163  );
164 
167 /*
168  * Solving Methods
169  */
170 
189 EXTERN
190 SCIP_RETCODE SCIPsdpiSolverLoadAndSolve(
191  SCIP_SDPISOLVER* sdpisolver,
192  int nvars,
193  SCIP_Real* obj,
194  SCIP_Real* lb,
195  SCIP_Real* ub,
196  int nsdpblocks,
197  int* sdpblocksizes,
198  int* sdpnblockvars,
199  int sdpconstnnonz,
200  int* sdpconstnblocknonz,
202  int** sdpconstrow,
203  int** sdpconstcol,
204  SCIP_Real** sdpconstval,
205  int sdpnnonz,
206  int** sdpnblockvarnonz,
208  int** sdpvar,
210  int*** sdprow,
211  int*** sdpcol,
212  SCIP_Real*** sdpval,
213  int** indchanges,
215  int* nremovedinds,
216  int* blockindchanges,
217  int nremovedblocks,
218  int nlpcons,
219  int noldlpcons,
220  SCIP_Real* lplhs,
221  SCIP_Real* lprhs,
222  int* rownactivevars,
223  int lpnnonz,
224  int* lprow,
225  int* lpcol,
226  SCIP_Real* lpval,
227  SCIP_Real* starty,
228  int* startZnblocknonz,
230  int** startZrow,
232  int** startZcol,
234  SCIP_Real** startZval,
236  int* startXnblocknonz,
238  int** startXrow,
240  int** startXcol,
242  SCIP_Real** startXval,
244  SCIP_SDPSOLVERSETTING startsettings,
246  SCIP_Real timelimit
247 );
248 
271 EXTERN
273  SCIP_SDPISOLVER* sdpisolver,
274  SCIP_Real penaltyparam,
275  SCIP_Bool withobj,
276  SCIP_Bool rbound,
277  int nvars,
278  SCIP_Real* obj,
279  SCIP_Real* lb,
280  SCIP_Real* ub,
281  int nsdpblocks,
282  int* sdpblocksizes,
283  int* sdpnblockvars,
284  int sdpconstnnonz,
285  int* sdpconstnblocknonz,
287  int** sdpconstrow,
288  int** sdpconstcol,
289  SCIP_Real** sdpconstval,
290  int sdpnnonz,
291  int** sdpnblockvarnonz,
293  int** sdpvar,
295  int*** sdprow,
296  int*** sdpcol,
297  SCIP_Real*** sdpval,
298  int** indchanges,
300  int* nremovedinds,
301  int* blockindchanges,
302  int nremovedblocks,
303  int nlpcons,
304  int noldlpcons,
305  SCIP_Real* lplhs,
306  SCIP_Real* lprhs,
307  int* rownactivevars,
308  int lpnnonz,
309  int* lprow,
310  int* lpcol,
311  SCIP_Real* lpval,
312  SCIP_Real* starty,
313  int* startZnblocknonz,
315  int** startZrow,
317  int** startZcol,
319  SCIP_Real** startZval,
321  int* startXnblocknonz,
323  int** startXrow,
325  int** startXcol,
327  SCIP_Real** startXval,
329  SCIP_SDPSOLVERSETTING startsettings,
331  SCIP_Real timelimit,
332  SCIP_Bool* feasorig,
334  SCIP_Bool* penaltybound
336 );
337 
338 
339 
345 /*
346  * Solution Information Methods
347  */
348 
353 EXTERN
354 SCIP_Bool SCIPsdpiSolverWasSolved(
355  SCIP_SDPISOLVER* sdpisolver
356  );
357 
364 EXTERN
366  SCIP_SDPISOLVER* sdpisolver
367  );
368 
370 EXTERN
372  SCIP_SDPISOLVER* sdpisolver,
373  SCIP_Bool* primalfeasible,
374  SCIP_Bool* dualfeasible
375  );
376 
379 EXTERN
381  SCIP_SDPISOLVER* sdpisolver
382  );
383 
386 EXTERN
388  SCIP_SDPISOLVER* sdpisolver
389  );
390 
393 EXTERN
395  SCIP_SDPISOLVER* sdpisolver
396  );
397 
400 EXTERN
402  SCIP_SDPISOLVER* sdpisolver
403  );
404 
407 EXTERN
409  SCIP_SDPISOLVER* sdpisolver
410  );
411 
414 EXTERN
416  SCIP_SDPISOLVER* sdpisolver
417  );
418 
420 EXTERN
421 SCIP_Bool SCIPsdpiSolverIsConverged(
422  SCIP_SDPISOLVER* sdpisolver
423  );
424 
426 EXTERN
427 SCIP_Bool SCIPsdpiSolverIsObjlimExc(
428  SCIP_SDPISOLVER* sdpisolver
429  );
430 
432 EXTERN
434  SCIP_SDPISOLVER* sdpisolver
435  );
436 
438 EXTERN
440  SCIP_SDPISOLVER* sdpisolver
441  );
442 
453 EXTERN
455  SCIP_SDPISOLVER* sdpisolver
456  );
457 
459 EXTERN
460 SCIP_Bool SCIPsdpiSolverIsOptimal(
461  SCIP_SDPISOLVER* sdpisolver
462  );
463 
466 EXTERN
468  SCIP_SDPISOLVER* sdpisolver
469  );
470 
472 EXTERN
474  SCIP_SDPISOLVER* sdpisolver,
475  SCIP_Bool* success
476  );
477 
479 EXTERN
480 SCIP_RETCODE SCIPsdpiSolverGetObjval(
481  SCIP_SDPISOLVER* sdpisolver,
482  SCIP_Real* objval
483  );
484 
489 EXTERN
490 SCIP_RETCODE SCIPsdpiSolverGetSol(
491  SCIP_SDPISOLVER* sdpisolver,
492  SCIP_Real* objval,
493  SCIP_Real* dualsol,
494  int* dualsollength
496  );
497 
499 EXTERN
501  SCIP_SDPISOLVER* sdpisolver,
502  int nblocks,
503  int* startXnblocknonz
505  );
506 
514 EXTERN
515 SCIP_RETCODE SCIPsdpiSolverGetPreoptimalSol(
516  SCIP_SDPISOLVER* sdpisolver,
517  SCIP_Bool* success,
518  SCIP_Real* dualsol,
519  int* dualsollength,
521  int nblocks,
522  int* startXnblocknonz,
524  int** startXrow,
525  int** startXcol,
526  SCIP_Real** startXval
527  );
528 
536 EXTERN
538  SCIP_SDPISOLVER* sdpisolver,
539  SCIP_Real* lbvars,
540  SCIP_Real* ubvars,
541  int* arraylength
543  );
544 
546 EXTERN
548  SCIP_SDPISOLVER* sdpisolver,
549  int nblocks,
550  int* startXnblocknonz
551  );
552 
557 EXTERN
558 SCIP_RETCODE SCIPsdpiSolverGetPrimalMatrix(
559  SCIP_SDPISOLVER* sdpisolver,
560  int nblocks,
561  int* startXnblocknonz,
563  int** startXrow,
564  int** startXcol,
565  SCIP_Real** startXval
566  );
567 
569 EXTERN
571  SCIP_SDPISOLVER* sdpisolver
572  );
573 
575 EXTERN
576 SCIP_RETCODE SCIPsdpiSolverGetIterations(
577  SCIP_SDPISOLVER* sdpisolver,
578  int* iterations
579  );
580 
582 EXTERN
583 SCIP_RETCODE SCIPsdpiSolverGetSdpCalls(
584  SCIP_SDPISOLVER* sdpisolver,
585  int* calls
586  );
587 
589 EXTERN
590 SCIP_RETCODE SCIPsdpiSolverSettingsUsed(
591  SCIP_SDPISOLVER* sdpisolver,
592  SCIP_SDPSOLVERSETTING* usedsetting
593  );
594 
600 /*
601  * SDPi State Methods
602  */
603 
604 
605 
606 /*
607  * Numerical Methods
608  */
609 
614 EXTERN
615 SCIP_Real SCIPsdpiSolverInfinity(
616  SCIP_SDPISOLVER* sdpisolver
617  );
618 
620 EXTERN
621 SCIP_Bool SCIPsdpiSolverIsInfinity(
622  SCIP_SDPISOLVER* sdpisolver,
623  SCIP_Real val
624  );
625 
627 EXTERN
628 SCIP_RETCODE SCIPsdpiSolverGetRealpar(
629  SCIP_SDPISOLVER* sdpisolver,
630  SCIP_SDPPARAM type,
631  SCIP_Real* dval
632  );
633 
635 EXTERN
636 SCIP_RETCODE SCIPsdpiSolverSetRealpar(
637  SCIP_SDPISOLVER* sdpisolver,
638  SCIP_SDPPARAM type,
639  SCIP_Real dval
640  );
641 
643 EXTERN
644 SCIP_RETCODE SCIPsdpiSolverGetIntpar(
645  SCIP_SDPISOLVER* sdpisolver,
646  SCIP_SDPPARAM type,
647  int* ival
648  );
649 
651 EXTERN
652 SCIP_RETCODE SCIPsdpiSolverSetIntpar(
653  SCIP_SDPISOLVER* sdpisolver,
654  SCIP_SDPPARAM type,
655  int ival
656  );
657 
659 EXTERN
661  SCIP_SDPISOLVER* sdpisolver,
662  SCIP_Real maxguess
663  );
664 
666 EXTERN
668  SCIP_SDPISOLVER* sdpisolver,
669  SCIP_Real maxcoeff,
670  SCIP_Real* penaltyparam
671  );
672 
674 EXTERN
676  SCIP_SDPISOLVER* sdpisolver,
677  SCIP_Real penaltyparam,
678  SCIP_Real* maxpenaltyparam
679  );
680 
686 /*
687  * File Interface Methods
688  */
689 
694 EXTERN
695 SCIP_RETCODE SCIPsdpiSolverReadSDP(
696  SCIP_SDPISOLVER* sdpisolver,
697  const char* fname
698  );
699 
701 EXTERN
702 SCIP_RETCODE SCIPsdpiSolverWriteSDP(
703  SCIP_SDPISOLVER* sdpisolver,
704  const char* fname
705  );
706 
709 #ifdef __cplusplus
710 }
711 #endif
712 
713 #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 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)
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:79
EXTERN SCIP_RETCODE SCIPsdpiSolverFree(SCIP_SDPISOLVER **sdpisolver)
EXTERN SCIP_RETCODE SCIPsdpiSolverComputeMaxPenaltyparam(SCIP_SDPISOLVER *sdpisolver, SCIP_Real penaltyparam, SCIP_Real *maxpenaltyparam)
EXTERN SCIP_RETCODE SCIPsdpiSolverGetPreoptimalPrimalNonzeros(SCIP_SDPISOLVER *sdpisolver, int nblocks, int *startXnblocknonz)
EXTERN int SCIPsdpiSolverGetDefaultSdpiSolverNpenaltyIncreases(void)
EXTERN SCIP_Bool SCIPsdpiSolverWasSolved(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_Bool SCIPsdpiSolverDoesWarmstartNeedPrimal(void)
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 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)
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_RETCODE SCIPsdpiSolverGetPrimalMatrix(SCIP_SDPISOLVER *sdpisolver, int nblocks, int *startXnblocknonz, int **startXrow, int **startXcol, SCIP_Real **startXval)
EXTERN SCIP_Bool SCIPsdpiSolverIsDualInfeasible(SCIP_SDPISOLVER *sdpisolver)
EXTERN const char * SCIPsdpiSolverGetSolverName(void)
type definitions for specific SDP-solver interfaces
EXTERN SCIP_RETCODE SCIPsdpiSolverGetPrimalNonzeros(SCIP_SDPISOLVER *sdpisolver, int nblocks, int *startXnblocknonz)
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 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_Real SCIPsdpiSolverGetMaxPrimalEntry(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_RETCODE SCIPsdpiSolverGetPreoptimalSol(SCIP_SDPISOLVER *sdpisolver, SCIP_Bool *success, SCIP_Real *dualsol, int *dualsollength, int nblocks, int *startXnblocknonz, int **startXrow, int **startXcol, SCIP_Real **startXval)
EXTERN SCIP_Real SCIPsdpiSolverGetDefaultSdpiSolverGaptol(void)
EXTERN SCIP_Real SCIPsdpiSolverGetDefaultSdpiSolverFeastol(void)
EXTERN SCIP_Real SCIPsdpiSolverInfinity(SCIP_SDPISOLVER *sdpisolver)
enum SCIP_SDPParam SCIP_SDPPARAM
Definition: type_sdpi.h:68
EXTERN void * SCIPsdpiSolverGetSolverPointer(SCIP_SDPISOLVER *sdpisolver)
EXTERN SCIP_Bool SCIPsdpiSolverIsInfinity(SCIP_SDPISOLVER *sdpisolver, SCIP_Real val)
EXTERN SCIP_RETCODE SCIPsdpiSolverComputeLambdastar(SCIP_SDPISOLVER *sdpisolver, SCIP_Real maxguess)