SCIP-SDP  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sdpisolver_none.c
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of SCIPSDP - a solving framework for mixed-integer */
4 /* semidefinite programms based on SCIP. */
5 /* */
6 /* Copyright (C) 2011-2013 Discrete Optimization, TU Darmstadt */
7 /* EDOM, FAU Erlangen-Nürnberg */
8 /* 2014-2015 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-2015 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 
33 /*#define SCIP_DEBUG*/
34 /*#define SCIP_MORE_DEBUG*/
35 
41 #include <assert.h>
42 
43 #include "sdpi/sdpisolver.h"
44 
45 #include "blockmemshell/memory.h" /* for memory allocation */
46 #include "scip/def.h" /* for SCIP_Real, _Bool, ... */
47 #include "scip/pub_misc.h" /* for sorting */
48 
49 
51 struct SCIP_SDPiSolver
52 {
53  SCIP_Real epsilon;
54  SCIP_Real feastol;
55  SCIP_Real objlimit;
56 #if 0
57  int threads;
58 #endif
59  SCIP_Bool sdpinfo;
60 };
61 
62 /*
63  * Local Methods
64  */
65 
67 static
69  void
70  )
71 {
72  SCIPerrorMessage("No SDP solver available (SDP=none).\n");
73  SCIPerrorMessage("Ensure <relaxing/SDP/freq = -1>.\n");
74  SCIPABORT();
75 }
76 
78 static
80  void
81  )
82 {
83  SCIPerrorMessage("No SDP solver available (SDP=none).\n");
84  SCIPerrorMessage("Ensure <relaxing/SDP/freq = -1>.\n");
85 }
86 
87 /*
88  * Miscellaneous Methods
89  */
90 
97  void
98  )
99 {
100  return "none";
101 }
102 
105  void
106  )
107 {
108  return "no SDP-Solver linked currently";
109 }
110 
118  SCIP_SDPISOLVER* sdpisolver
119  )
120 {
121  assert( sdpisolver != NULL );
122  return (void*) NULL;
123 }
124 
128 /*
129  * SDPI Creation and Destruction Methods
130  */
131 
136 SCIP_RETCODE SCIPsdpiSolverCreate(
137  SCIP_SDPISOLVER** sdpisolver,
138  SCIP_MESSAGEHDLR* messagehdlr,
139  BMS_BLKMEM* blkmem
140  )
141 {
142  SCIPdebugMessage("Calling SCIPsdpiCreate \n");
143  SCIPdebugMessage("Note that currently no SDP-Solver is linked to the binary. Ensure <relaxing/SDP/freq = -1>. \n");
144 
145  return SCIP_OKAY;
146 }
147 
149 SCIP_RETCODE SCIPsdpiSolverFree(
150  SCIP_SDPISOLVER** sdpisolver
151  )
152 {
153  SCIPdebugMessage("Freeing SDPISolver\n");
154 
155  return SCIP_OKAY;
156 }
157 
160  SCIP_SDPISOLVER* sdpisolver
161  )
162 {
163  SCIPdebugMessage("SDPs aren't counted as there is no SDP-solver.\n");
164 
165  return SCIP_OKAY;
166 }
167 
170  SCIP_SDPISOLVER* sdpisolver
171  )
172 {
173  SCIPdebugMessage("SDPs aren't counted as there is no SDP-solver.\n");
174 
175  return SCIP_OKAY;
176 }
177 
181 /*
182  * Solving Methods
183  */
184 
201  SCIP_SDPISOLVER* sdpisolver,
202  int nvars,
203  SCIP_Real* obj,
204  SCIP_Real* lb,
205  SCIP_Real* ub,
206  int nsdpblocks,
207  int* sdpblocksizes,
208  int* sdpnblockvars,
209  int sdpconstnnonz,
210  int* sdpconstnblocknonz,
212  int** sdpconstrow,
213  int** sdpconstcol,
214  SCIP_Real** sdpconstval,
215  int sdpnnonz,
216  int** sdpnblockvarnonz,
218  int** sdpvar,
220  int*** sdprow,
221  int*** sdpcol,
222  SCIP_Real*** sdpval,
223  int** indchanges,
225  int* nremovedinds,
226  int* blockindchanges,
227  int nremovedblocks,
228  int nlpcons,
229  int noldlpcons,
230  SCIP_Real* lplhs,
231  SCIP_Real* lprhs,
232  int* rownactivevars,
233  int lpnnonz,
234  int* lprow,
235  int* lpcol,
236  SCIP_Real* lpval,
237  SCIP_Real* start
238 )
239 {
240  errorMessage();
241 
242  return SCIP_OKAY;
243 }
244 
265  SCIP_SDPISOLVER* sdpisolver,
266  SCIP_Real penaltyparam,
267  SCIP_Bool withobj,
268  SCIP_Bool rbound,
269  int nvars,
270  SCIP_Real* obj,
271  SCIP_Real* lb,
272  SCIP_Real* ub,
273  int nsdpblocks,
274  int* sdpblocksizes,
275  int* sdpnblockvars,
276  int sdpconstnnonz,
277  int* sdpconstnblocknonz,
279  int** sdpconstrow,
280  int** sdpconstcol,
281  SCIP_Real** sdpconstval,
282  int sdpnnonz,
283  int** sdpnblockvarnonz,
285  int** sdpvar,
287  int*** sdprow,
288  int*** sdpcol,
289  SCIP_Real*** sdpval,
290  int** indchanges,
292  int* nremovedinds,
293  int* blockindchanges,
294  int nremovedblocks,
295  int nlpcons,
296  int noldlpcons,
297  SCIP_Real* lplhs,
298  SCIP_Real* lprhs,
299  int* rownactivevars,
300  int lpnnonz,
301  int* lprow,
302  int* lpcol,
303  SCIP_Real* lpval,
304  SCIP_Real* start,
305  SCIP_Bool* feasorig
307 )
308 {
309  errorMessage();
310 
311  return SCIP_OKAY;
312 }
318 /*
319  * Solution Information Methods
320  */
321 
327  SCIP_SDPISOLVER* sdpisolver
328  )
329 {
331 
332  return SCIP_PLUGINNOTFOUND;
333 }
334 
342  SCIP_SDPISOLVER* sdpisolver
343  )
344 {
346 
347  return SCIP_PLUGINNOTFOUND;
348 }
349 
352  SCIP_SDPISOLVER* sdpisolver,
353  SCIP_Bool* primalfeasible,
354  SCIP_Bool* dualfeasible
355  )
356 {
358 
359  return SCIP_PLUGINNOTFOUND;
360 }
361 
365  SCIP_SDPISOLVER* sdpisolver
366  )
367 {
369 
370  return SCIP_PLUGINNOTFOUND;
371 }
372 
376  SCIP_SDPISOLVER* sdpisolver
377  )
378 {
380 
381  return SCIP_PLUGINNOTFOUND;
382 }
383 
387  SCIP_SDPISOLVER* sdpisolver
388  )
389 {
391 
392  return SCIP_PLUGINNOTFOUND;
393 }
394 
398  SCIP_SDPISOLVER* sdpisolver
399  )
400 {
402 
403  return SCIP_PLUGINNOTFOUND;
404 }
405 
409  SCIP_SDPISOLVER* sdpisolver
410  )
411 {
413 
414  return SCIP_PLUGINNOTFOUND;
415 }
416 
420  SCIP_SDPISOLVER* sdpisolver
421  )
422 {
424 
425  return SCIP_PLUGINNOTFOUND;
426 }
427 
430  SCIP_SDPISOLVER* sdpisolver
431  )
432 {
434 
435  return SCIP_PLUGINNOTFOUND;
436 }
437 
440  SCIP_SDPISOLVER* sdpisolver
441  )
442 {
444 
445  return SCIP_PLUGINNOTFOUND;
446 }
447 
450  SCIP_SDPISOLVER* sdpisolver
451  )
452 {
454 
455  return SCIP_PLUGINNOTFOUND;
456 }
457 
460  SCIP_SDPISOLVER* sdpisolver
461  )
462 {
464 
465  return SCIP_PLUGINNOTFOUND;
466 }
467 
479  SCIP_SDPISOLVER* sdpisolver
480  )
481 {
483 
484  return SCIP_PLUGINNOTFOUND;
485 }
486 
489  SCIP_SDPISOLVER* sdpisolver
490  )
491 {
493 
494  return SCIP_PLUGINNOTFOUND;
495 }
496 
500  SCIP_SDPISOLVER* sdpisolver
501  )
502 {
504 
505  return SCIP_PLUGINNOTFOUND;
506 }
507 
510  SCIP_SDPISOLVER* sdpisolver,
511  SCIP_Bool* success
512  )
513 {
515 
516  return SCIP_PLUGINNOTFOUND;
517 }
518 
521  SCIP_SDPISOLVER* sdpisolver,
522  SCIP_Real* objval
523  )
524 {
526 
527  return SCIP_PLUGINNOTFOUND;
528 }
529 
534 SCIP_RETCODE SCIPsdpiSolverGetSol(
535  SCIP_SDPISOLVER* sdpisolver,
536  SCIP_Real* objval,
537  SCIP_Real* dualsol,
538  int* dualsollength
540  )
541 {
543 
544  return SCIP_PLUGINNOTFOUND;
545 }
546 
555  SCIP_SDPISOLVER* sdpisolver,
556  SCIP_Real* lbvars,
557  SCIP_Real* ubvars,
558  int* arraylength
560  )
561 {
563 
564  return SCIP_PLUGINNOTFOUND;
565 }
566 
569  SCIP_SDPISOLVER* sdpisolver,
570  int* iterations
571  )
572 {
574 
575  return SCIP_PLUGINNOTFOUND;
576 }
577 
583 /*
584  * Numerical Methods
585  */
586 
592  SCIP_SDPISOLVER* sdpisolver
593  )
594 {
595  return 1E+20; /* default infinity from SCIP */
596 }
597 
600  SCIP_SDPISOLVER* sdpisolver,
601  SCIP_Real val
602  )
603 {
604  return ((val <= -SCIPsdpiSolverInfinity(sdpisolver)) || (val >= SCIPsdpiSolverInfinity(sdpisolver)));
605 }
606 
609  SCIP_SDPISOLVER* sdpisolver
610  )
611 {
612  return 1E+10; /* this is the value DSDP will start with if called normally */
613 }
614 
617  SCIP_SDPISOLVER* sdpisolver,
618  SCIP_Real val
619  )
620 {
621  return ((val <= -SCIPsdpiSolverMaxPenParam(sdpisolver)) || (val >= SCIPsdpiSolverMaxPenParam(sdpisolver)));
622 }
623 
626  SCIP_SDPISOLVER* sdpisolver,
627  SCIP_SDPPARAM type,
628  SCIP_Real* dval
629  )
630 {
631  assert( sdpisolver != NULL );
632  assert( dval != NULL );
633 
634  switch( type )
635  {
636  case SCIP_SDPPAR_EPSILON:
637  *dval = sdpisolver->epsilon;
638  break;
639  case SCIP_SDPPAR_FEASTOL:
640  *dval = sdpisolver->feastol;
641  break;
643  *dval = sdpisolver->objlimit;
644  break;
645  default:
646  return SCIP_PARAMETERUNKNOWN;
647  }
648 
649  return SCIP_OKAY;
650 }
651 
654  SCIP_SDPISOLVER* sdpisolver,
655  SCIP_SDPPARAM type,
656  SCIP_Real dval
657  )
658 {
659  assert( sdpisolver != NULL );
660 
661  switch( type )
662  {
663  case SCIP_SDPPAR_EPSILON:
664  sdpisolver->epsilon = dval;
665  SCIPdebugMessage("Setting sdpisolver epsilon to %f.\n", dval);
666  break;
667  case SCIP_SDPPAR_FEASTOL:
668  sdpisolver->feastol = dval;
669  SCIPdebugMessage("Setting sdpisolver feastol to %f.\n", dval);
670  break;
672  SCIPdebugMessage("Setting sdpisolver objlimit to %f.\n", dval);
673  sdpisolver->objlimit = dval;
674  break;
675  default:
676  return SCIP_PARAMETERUNKNOWN;
677  }
678 
679  return SCIP_OKAY;
680 }
681 
684  SCIP_SDPISOLVER* sdpisolver,
685  SCIP_SDPPARAM type,
686  int* ival
687  )
688 {
689  assert( sdpisolver != NULL );
690 
691  switch( type )
692  {
693 #if 0
694  case SCIP_SDPPAR_THREADS:
695  *ival = sdpisolver->threads;
696  SCIPdebugMessage("Getting sdpisolver number of threads: %d.\n", *ival);
697  break;
698 #endif
699  case SCIP_SDPPAR_SDPINFO:
700  *ival = sdpisolver->sdpinfo;
701  SCIPdebugMessage("Getting sdpisolver information output (%d).\n", *ival);
702  break;
703  default:
704  return SCIP_PARAMETERUNKNOWN;
705  }
706 
707  return SCIP_OKAY;
708 }
709 
712  SCIP_SDPISOLVER* sdpisolver,
713  SCIP_SDPPARAM type,
714  int ival
715  )
716 {
717  assert( sdpisolver != NULL );
718 
719  switch( type )
720  {
721 #if 0
722  case SCIP_SDPPAR_THREADS:
723  sdpisolver->threads = ival;
724  SCIPdebugMessage("Setting sdpisolver number of threads to %d.\n", ival);
725  break;
726 #endif
727  case SCIP_SDPPAR_SDPINFO:
728  sdpisolver->sdpinfo = ival;
729  SCIPdebugMessage("Setting sdpisolver information output (%d).\n", ival);
730  break;
731  default:
732  return SCIP_PARAMETERUNKNOWN;
733  }
734 
735  return SCIP_OKAY;
736 }
737 
743 /*
744  * File Interface Methods
745  */
746 
752  SCIP_SDPISOLVER* sdpisolver,
753  const char* fname
754  )
755 {
757 
758  return SCIP_PLUGINNOTFOUND;
759 }
760 
763  SCIP_SDPISOLVER* sdpisolver,
764  const char* fname
765  )
766 {
768 
769  return SCIP_PLUGINNOTFOUND;
770 }
771 
SCIP_RETCODE SCIPsdpiSolverIgnoreInstability(SCIP_SDPISOLVER *sdpisolver, SCIP_Bool *success)
SCIP_Bool SCIPsdpiSolverIsOptimal(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)
const char * SCIPsdpiSolverGetSolverDesc(void)
SCIP_Bool SCIPsdpiSolverIsPrimalInfeasible(SCIP_SDPISOLVER *sdpisolver)
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_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 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_Bool SCIPsdpiSolverIsGEMaxPenParam(SCIP_SDPISOLVER *sdpisolver, SCIP_Real val)
SCIP_RETCODE SCIPsdpiSolverGetRealpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, SCIP_Real *dval)
SCIP_RETCODE SCIPsdpiSolverGetObjval(SCIP_SDPISOLVER *sdpisolver, SCIP_Real *objval)
void * SCIPsdpiSolverGetSolverPointer(SCIP_SDPISOLVER *sdpisolver)
SCIP_Bool SCIPsdpiSolverIsPrimalFeasible(SCIP_SDPISOLVER *sdpisolver)
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_RETCODE SCIPsdpiSolverSetIntpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, int ival)
SCIP_RETCODE SCIPsdpiSolverSetRealpar(SCIP_SDPISOLVER *sdpisolver, SCIP_SDPPARAM type, SCIP_Real dval)
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_Bool *feasorig)
SCIP_RETCODE SCIPsdpiSolverCreate(SCIP_SDPISOLVER **sdpisolver, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPsdpiSolverWriteSDP(SCIP_SDPISOLVER *sdpisolver, const char *fname)
SCIP_Bool SCIPsdpiSolverIsInfinity(SCIP_SDPISOLVER *sdpisolver, SCIP_Real val)
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
Definition: sdpisolver.h:71
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_Real SCIPsdpiSolverMaxPenParam(SCIP_SDPISOLVER *sdpisolver)
enum SCIP_SDPParam SCIP_SDPPARAM
Definition: type_sdpi.h:63
static void errorMessage(void)
SCIP_Bool SCIPsdpiSolverIsIterlimExc(SCIP_SDPISOLVER *sdpisolver)