Scippy

SCIP

Solving Constraint Integer Programs

lpi_none.c
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the program and library */
4/* SCIP --- Solving Constraint Integer Programs */
5/* */
6/* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) */
7/* */
8/* Licensed under the Apache License, Version 2.0 (the "License"); */
9/* you may not use this file except in compliance with the License. */
10/* You may obtain a copy of the License at */
11/* */
12/* http://www.apache.org/licenses/LICENSE-2.0 */
13/* */
14/* Unless required by applicable law or agreed to in writing, software */
15/* distributed under the License is distributed on an "AS IS" BASIS, */
16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17/* See the License for the specific language governing permissions and */
18/* limitations under the License. */
19/* */
20/* You should have received a copy of the Apache-2.0 license */
21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22/* */
23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25/**@file lpi_none.c
26 * @ingroup LPIS
27 * @brief dummy interface for the case no LP solver is needed
28 * @author Stefan Heinz
29 */
30
31/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32
33#include <assert.h>
34
35#include "lpi/lpi.h"
36#include "scip/pub_message.h"
37
38#define LPINAME "NONE" /**< name of the LPI interface */
39#define LPIINFINITY 1e20 /**< infinity value */
40
41
42/* globally turn off lint warnings: */
43/*lint --e{715}*/
44
45/** LP interface
46 *
47 * Store several statistic values about the LP. These values are only needed in order to provide a rudimentary
48 * communication, e.g., there are asserts that check the number of rows and columns.
49 */
50struct SCIP_LPi
51{
52 int nrows; /**< number of rows */
53 int ncols; /**< number of columns */
54};
55
56
57/*
58 * Local Methods
59 */
60
61/** error handling method */
62static
64 void
65 )
66{ /*lint --e{2707}*/
67 SCIPerrorMessage("No LP solver available (LPS=none).\n");
68 SCIPerrorMessage("Ensure <lp/solvefreq = -1>; note that continuous variables might require an LP-solver.\n");
69 SCIPABORT();
70}
71
72/** error handling method */
73static
75 void
76 )
77{
78 SCIPerrorMessage("No LP solver available (LPS=none).\n");
79 SCIPerrorMessage("Ensure <lp/solvefreq = -1>; note that continuous variables might require an LP-solver.\n");
80}
81
82/*
83 * LP Interface Methods
84 */
85
86
87/*
88 * Miscellaneous Methods
89 */
90
91/**@name Miscellaneous Methods */
92/**@{ */
93
94/** gets name and version of LP solver */
96 void
97 )
98{
99 return LPINAME;
100}
101
102/** gets description of LP solver (developer, webpage, ...) */
104 void
105 )
106{
107 return "dummy LP solver interface which solely purpose is to resolve references at linking";
108}
109
110/** gets pointer for LP solver - use only with great care */
112 SCIP_LPI* lpi /**< pointer to an LP interface structure */
113 )
114{ /*lint --e{715}*/
115 return (void*) NULL;
116}
117
118/** pass integrality information to LP solver */
120 SCIP_LPI* lpi, /**< pointer to an LP interface structure */
121 int ncols, /**< length of integrality array */
122 int* intInfo /**< integrality array (0: continuous, 1: integer). May be NULL iff ncols is 0. */
123 )
124{ /*lint --e{715}*/
125 SCIPerrorMessage("SCIPlpiSetIntegralityInformation() has not been implemented yet.\n");
126 return SCIP_LPERROR;
127}
128
129/** informs about availability of a primal simplex solving method */
131 void
132 )
133{
134 return FALSE;
135}
136
137/** informs about availability of a dual simplex solving method */
139 void
140 )
141{
142 return FALSE;
143}
144
145/** informs about availability of a barrier solving method */
147 void
148 )
149{
150 return FALSE;
151}
152
153/**@} */
154
155
156
157
158/*
159 * LPI Creation and Destruction Methods
160 */
161
162/**@name LPI Creation and Destruction Methods */
163/**@{ */
164
165/** creates an LP problem object */
167 SCIP_LPI** lpi, /**< pointer to an LP interface structure */
168 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler to use for printing messages, or NULL */
169 const char* name, /**< problem name */
170 SCIP_OBJSEN objsen /**< objective sense */
171 )
172{ /*lint --e{715}*/
173 assert(lpi != NULL);
174 assert(name != NULL);
175 SCIPdebugMessage("SCIPlpiCreate()\n");
176 SCIPdebugMessage("Note that there is no LP solver linked to the binary\n");
177
178 /* create empty LPI */
180 (*lpi)->nrows = 0;
181 (*lpi)->ncols = 0;
182
183 return SCIP_OKAY;
184}
185
186/** deletes an LP problem object */
188 SCIP_LPI** lpi /**< pointer to an LP interface structure */
189 )
190{ /*lint --e{715}*/
191 assert( lpi != NULL );
192 SCIPdebugMessage("SCIPlpiFree()\n");
193
194 BMSfreeMemory(lpi);
195
196 return SCIP_OKAY;
197}
198
199/**@} */
200
201
202
203
204/*
205 * Modification Methods
206 */
207
208/**@name Modification Methods */
209/**@{ */
210
211/** copies LP data with column matrix into LP solver */
213 SCIP_LPI* lpi, /**< LP interface structure */
214 SCIP_OBJSEN objsen, /**< objective sense */
215 int ncols, /**< number of columns */
216 const SCIP_Real* obj, /**< objective function values of columns */
217 const SCIP_Real* lb, /**< lower bounds of columns */
218 const SCIP_Real* ub, /**< upper bounds of columns */
219 char** colnames, /**< column names, or NULL */
220 int nrows, /**< number of rows */
221 const SCIP_Real* lhs, /**< left hand sides of rows */
222 const SCIP_Real* rhs, /**< right hand sides of rows */
223 char** rownames, /**< row names, or NULL */
224 int nnonz, /**< number of nonzero elements in the constraint matrix */
225 const int* beg, /**< start index of each column in ind- and val-array */
226 const int* ind, /**< row indices of constraint matrix entries */
227 const SCIP_Real* val /**< values of constraint matrix entries */
228 )
229{ /*lint --e{715}*/
230#ifndef NDEBUG
231 {
232 int j;
233 for( j = 0; j < nnonz; j++ )
234 assert( val[j] != 0 );
235 }
236#endif
237
238 assert( lpi != NULL );
239 assert(lhs != NULL);
240 assert(rhs != NULL);
241 assert(obj != NULL);
242 assert(lb != NULL);
243 assert(ub != NULL);
244 assert(beg != NULL);
245 assert(ind != NULL);
246 assert(val != NULL);
247
248 lpi->nrows = nrows;
249 lpi->ncols = ncols;
250 assert( lpi->nrows >= 0 );
251 assert( lpi->ncols >= 0 );
252
253 return SCIP_OKAY;
254}
255
256/** adds columns to the LP */
258 SCIP_LPI* lpi, /**< LP interface structure */
259 int ncols, /**< number of columns to be added */
260 const SCIP_Real* obj, /**< objective function values of new columns */
261 const SCIP_Real* lb, /**< lower bounds of new columns */
262 const SCIP_Real* ub, /**< upper bounds of new columns */
263 char** colnames, /**< column names, or NULL */
264 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
265 const int* beg, /**< start index of each column in ind- and val-array, or NULL if nnonz == 0 */
266 const int* ind, /**< row indices of constraint matrix entries, or NULL if nnonz == 0 */
267 const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
268 )
269{ /*lint --e{715}*/
270 assert( lpi != NULL );
271 assert( lpi->ncols >= 0 );
272 assert(obj != NULL);
273 assert(lb != NULL);
274 assert(ub != NULL);
275 assert(nnonz == 0 || beg != NULL);
276 assert(nnonz == 0 || ind != NULL);
277 assert(nnonz == 0 || val != NULL);
278 assert(nnonz >= 0);
279 assert(ncols >= 0);
280
281#ifndef NDEBUG
282 {
283 int j;
284 for( j = 0; j < nnonz; j++ )
285 {
286 assert( val[j] != 0.0 );
287 /* perform check that no new rows are added - this is forbidden */
288 assert( 0 <= ind[j] && ind[j] < lpi->nrows );
289 }
290 }
291#endif
292
293 lpi->ncols += ncols;
294
295 return SCIP_OKAY;
296}
297
298/** deletes all columns in the given range from LP */
300 SCIP_LPI* lpi, /**< LP interface structure */
301 int firstcol, /**< first column to be deleted */
302 int lastcol /**< last column to be deleted */
303 )
304{ /*lint --e{715}*/
305 assert(lpi != NULL);
306 assert(firstcol >= 0);
307 assert(lastcol < lpi->ncols);
308 assert(firstcol <= lastcol + 1);
309 lpi->ncols -= lastcol - firstcol + 1;
310 assert(lpi->ncols >= 0);
311
312 return SCIP_OKAY;
313}
314
315/** deletes columns from SCIP_LP; the new position of a column must not be greater that its old position */
317 SCIP_LPI* lpi, /**< LP interface structure */
318 int* dstat /**< deletion status of columns
319 * input: 1 if column should be deleted, 0 if not
320 * output: new position of column, -1 if column was deleted */
321 )
322{ /*lint --e{715}*/
323 int cnt = 0;
324 int j;
325
326 assert( lpi != NULL );
327 assert( dstat != NULL );
328 assert( lpi->ncols >= 0 );
329
330 for (j = 0; j < lpi->ncols; ++j)
331 {
332 if ( dstat[j] )
333 {
334 ++cnt;
335 dstat[j] = -1;
336 }
337 else
338 dstat[j] = cnt;
339 }
340 lpi->ncols -= cnt;
341 assert( lpi->ncols >= 0 );
342
343 return SCIP_OKAY;
344}
345
346/** adds rows to the LP */
348 SCIP_LPI* lpi, /**< LP interface structure */
349 int nrows, /**< number of rows to be added */
350 const SCIP_Real* lhs, /**< left hand sides of new rows */
351 const SCIP_Real* rhs, /**< right hand sides of new rows */
352 char** rownames, /**< row names, or NULL */
353 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
354 const int* beg, /**< start index of each row in ind- and val-array, or NULL if nnonz == 0 */
355 const int* ind, /**< column indices of constraint matrix entries, or NULL if nnonz == 0 */
356 const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
357 )
358{ /*lint --e{715}*/
359 assert( lpi != NULL );
360 assert( lpi->nrows >= 0 );
361 assert(lhs != NULL);
362 assert(rhs != NULL);
363 assert(nnonz == 0 || beg != NULL);
364 assert(nnonz == 0 || ind != NULL);
365 assert(nnonz == 0 || val != NULL);
366
367#ifndef NDEBUG
368 /* perform check that no new columns are added - this is forbidden */
369 {
370 int j;
371 for (j = 0; j < nnonz; ++j)
372 {
373 assert( val[j] != 0.0 );
374 assert( 0 <= ind[j] && ind[j] < lpi->ncols );
375 }
376 }
377#endif
378
379 lpi->nrows += nrows;
380
381 return SCIP_OKAY;
382}
383
384/** deletes all rows in the given range from LP */
386 SCIP_LPI* lpi, /**< LP interface structure */
387 int firstrow, /**< first row to be deleted */
388 int lastrow /**< last row to be deleted */
389 )
390{ /*lint --e{715}*/
391 assert(lpi != NULL);
392 assert(firstrow >= 0);
393 assert(lastrow < lpi->nrows);
394 assert(firstrow <= lastrow + 1);
395 lpi->nrows -= lastrow - firstrow + 1;
396 assert(lpi->nrows >= 0);
397
398 return SCIP_OKAY;
399}
400
401/** deletes rows from SCIP_LP; the new position of a row must not be greater that its old position */
403 SCIP_LPI* lpi, /**< LP interface structure */
404 int* dstat /**< deletion status of rows
405 * input: 1 if row should be deleted, 0 if not
406 * output: new position of row, -1 if row was deleted */
407 )
408{ /*lint --e{715}*/
409 int cnt = 0;
410 int i;
411
412 assert( lpi != NULL );
413 assert( dstat != NULL );
414 assert( lpi->nrows >= 0 );
415
416 for (i = 0; i < lpi->nrows; ++i)
417 {
418 if ( dstat[i] )
419 {
420 ++cnt;
421 dstat[i] = -1;
422 }
423 else
424 dstat[i] = cnt;
425 }
426 lpi->nrows -= cnt;
427 assert( lpi->nrows >= 0 );
428
429 return SCIP_OKAY;
430}
431
432/** clears the whole LP */
434 SCIP_LPI* lpi /**< LP interface structure */
435 )
436{ /*lint --e{715}*/
437 assert( lpi != NULL );
438 assert( lpi->nrows >= 0 );
439 assert( lpi->ncols >= 0 );
440
441 lpi->nrows = 0;
442 lpi->ncols = 0;
443
444 return SCIP_OKAY;
445}
446
447/** changes lower and upper bounds of columns */
449 SCIP_LPI* lpi, /**< LP interface structure */
450 int ncols, /**< number of columns to change bounds for */
451 const int* ind, /**< column indices or NULL if ncols is zero */
452 const SCIP_Real* lb, /**< values for the new lower bounds or NULL if ncols is zero */
453 const SCIP_Real* ub /**< values for the new upper bounds or NULL if ncols is zero */
454 )
455{ /*lint --e{715}*/
456 int j;
457
458 assert(ncols == 0 || (ind != NULL && lb != NULL && ub != NULL));
459
460 if( ncols <= 0 )
461 return SCIP_OKAY;
462
463 for (j = 0; j < ncols; ++j)
464 {
465 if ( SCIPlpiIsInfinity(lpi, lb[j]) )
466 {
467 SCIPerrorMessage("LP Error: fixing lower bound for variable %d to infinity.\n", ind[j]);
468 return SCIP_LPERROR;
469 }
470 if ( SCIPlpiIsInfinity(lpi, -ub[j]) )
471 {
472 SCIPerrorMessage("LP Error: fixing upper bound for variable %d to -infinity.\n", ind[j]);
473 return SCIP_LPERROR;
474 }
475 }
476
477 return SCIP_OKAY;
478}
479
480/** changes left and right hand sides of rows */
482 SCIP_LPI* lpi, /**< LP interface structure */
483 int nrows, /**< number of rows to change sides for */
484 const int* ind, /**< row indices */
485 const SCIP_Real* lhs, /**< new values for left hand sides */
486 const SCIP_Real* rhs /**< new values for right hand sides */
487 )
488{ /*lint --e{715}*/
489 assert(lpi != NULL);
490 assert(ind != NULL);
491 assert(lhs != NULL);
492 assert(rhs != NULL);
493 return SCIP_OKAY;
494}
495
496/** changes a single coefficient */
498 SCIP_LPI* lpi, /**< LP interface structure */
499 int row, /**< row number of coefficient to change */
500 int col, /**< column number of coefficient to change */
501 SCIP_Real newval /**< new value of coefficient */
502 )
503{ /*lint --e{715}*/
504 assert(lpi != NULL);
505 return SCIP_OKAY;
506}
507
508/** changes the objective sense */
510 SCIP_LPI* lpi, /**< LP interface structure */
511 SCIP_OBJSEN objsen /**< new objective sense */
512 )
513{ /*lint --e{715}*/
514 assert(lpi != NULL);
515 return SCIP_OKAY;
516}
517
518/** changes objective values of columns in the LP */
520 SCIP_LPI* lpi, /**< LP interface structure */
521 int ncols, /**< number of columns to change objective value for */
522 const int* ind, /**< column indices to change objective value for */
523 const SCIP_Real* obj /**< new objective values for columns */
524 )
525{ /*lint --e{715}*/
526 assert(lpi != NULL);
527 assert(ind != NULL);
528 assert(obj != NULL);
529 return SCIP_OKAY;
530}
531
532/** multiplies a row with a non-zero scalar; for negative scalars, the row's sense is switched accordingly */
534 SCIP_LPI* lpi, /**< LP interface structure */
535 int row, /**< row number to scale */
536 SCIP_Real scaleval /**< scaling multiplier */
537 )
538{ /*lint --e{715}*/
539 assert(lpi != NULL);
540 return SCIP_OKAY;
541}
542
543/** multiplies a column with a non-zero scalar; the objective value is multiplied with the scalar, and the bounds
544 * are divided by the scalar; for negative scalars, the column's bounds are switched
545 */
547 SCIP_LPI* lpi, /**< LP interface structure */
548 int col, /**< column number to scale */
549 SCIP_Real scaleval /**< scaling multiplier */
550 )
551{ /*lint --e{715}*/
552 assert(lpi != NULL);
553 return SCIP_OKAY;
554}
555
556/**@} */
557
558
559
560
561/*
562 * Data Accessing Methods
563 */
564
565/**@name Data Accessing Methods */
566/**@{ */
567
568/** gets the number of rows in the LP */
570 SCIP_LPI* lpi, /**< LP interface structure */
571 int* nrows /**< pointer to store the number of rows */
572 )
573{ /*lint --e{715}*/
574 assert( lpi != NULL );
575 assert( nrows != NULL );
576 assert( lpi->nrows >= 0 );
577
578 *nrows = lpi->nrows;
579
580 return SCIP_OKAY;
581}
582
583/** gets the number of columns in the LP */
585 SCIP_LPI* lpi, /**< LP interface structure */
586 int* ncols /**< pointer to store the number of cols */
587 )
588{ /*lint --e{715}*/
589 assert( lpi != NULL );
590 assert( ncols != NULL );
591 assert( lpi->ncols >= 0 );
592
593 *ncols = lpi->ncols;
594
595 return SCIP_OKAY;
596}
597
598/** gets the number of nonzero elements in the LP constraint matrix */
600 SCIP_LPI* lpi, /**< LP interface structure */
601 int* nnonz /**< pointer to store the number of nonzeros */
602 )
603{ /*lint --e{715}*/
604 assert(nnonz != NULL);
605 assert(lpi != NULL);
606 errorMessage();
607 return SCIP_PLUGINNOTFOUND;
608}
609
610/** gets columns from LP problem object; the arrays have to be large enough to store all values
611 * Either both, lb and ub, have to be NULL, or both have to be non-NULL,
612 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
613 */
615 SCIP_LPI* lpi, /**< LP interface structure */
616 int firstcol, /**< first column to get from LP */
617 int lastcol, /**< last column to get from LP */
618 SCIP_Real* lb, /**< buffer to store the lower bound vector, or NULL */
619 SCIP_Real* ub, /**< buffer to store the upper bound vector, or NULL */
620 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
621 int* beg, /**< buffer to store start index of each column in ind- and val-array, or NULL */
622 int* ind, /**< buffer to store row indices of constraint matrix entries, or NULL */
623 SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
624 )
625{ /*lint --e{715}*/
626 assert(lpi != NULL);
627 assert(firstcol >= 0);
628 assert(lastcol < lpi->ncols);
629 assert(firstcol <= lastcol + 1);
630
631 errorMessage();
632
633 return SCIP_PLUGINNOTFOUND;
634}
635
636/** gets rows from LP problem object; the arrays have to be large enough to store all values.
637 * Either both, lhs and rhs, have to be NULL, or both have to be non-NULL,
638 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
639 */
641 SCIP_LPI* lpi, /**< LP interface structure */
642 int firstrow, /**< first row to get from LP */
643 int lastrow, /**< last row to get from LP */
644 SCIP_Real* lhs, /**< buffer to store left hand side vector, or NULL */
645 SCIP_Real* rhs, /**< buffer to store right hand side vector, or NULL */
646 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
647 int* beg, /**< buffer to store start index of each row in ind- and val-array, or NULL */
648 int* ind, /**< buffer to store column indices of constraint matrix entries, or NULL */
649 SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
650 )
651{ /*lint --e{715}*/
652 assert(lpi != NULL);
653 assert(firstrow >= 0);
654 assert(lastrow < lpi->nrows);
655 assert(firstrow <= lastrow + 1);
656
657 errorMessage();
658
659 return SCIP_PLUGINNOTFOUND;
660}
661
662/** gets column names */
664 SCIP_LPI* lpi, /**< LP interface structure */
665 int firstcol, /**< first column to get name from LP */
666 int lastcol, /**< last column to get name from LP */
667 char** colnames, /**< pointers to column names (of size at least lastcol-firstcol+1) or NULL if namestoragesize is zero */
668 char* namestorage, /**< storage for col names or NULL if namestoragesize is zero */
669 int namestoragesize, /**< size of namestorage (if 0, storageleft returns the storage needed) */
670 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
671 )
672{ /*lint --e{715}*/
673 assert(lpi != NULL);
674 assert(colnames != NULL || namestoragesize == 0);
675 assert(namestorage != NULL || namestoragesize == 0);
676 assert(namestoragesize >= 0);
677 assert(storageleft != NULL);
678 assert(firstcol >= 0);
679 assert(lastcol < lpi->ncols);
680 assert(firstcol <= lastcol + 1);
681
682 errorMessage();
683
684 return SCIP_PLUGINNOTFOUND;
685}
686
687/** gets row names */
689 SCIP_LPI* lpi, /**< LP interface structure */
690 int firstrow, /**< first row to get name from LP */
691 int lastrow, /**< last row to get name from LP */
692 char** rownames, /**< pointers to row names (of size at least lastrow-firstrow+1) or NULL if namestoragesize is zero */
693 char* namestorage, /**< storage for row names or NULL if namestoragesize is zero */
694 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
695 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
696 )
697{ /*lint --e{715}*/
698 assert(lpi != NULL);
699 assert(rownames != NULL || namestoragesize == 0);
700 assert(namestorage != NULL || namestoragesize == 0);
701 assert(namestoragesize >= 0);
702 assert(storageleft != NULL);
703 assert(firstrow >= 0);
704 assert(lastrow < lpi->nrows);
705 assert(firstrow <= lastrow + 1);
706
707 errorMessage();
708
709 return SCIP_PLUGINNOTFOUND;
710}
711
712/** gets the objective sense of the LP */
714 SCIP_LPI* lpi, /**< LP interface structure */
715 SCIP_OBJSEN* objsen /**< pointer to store objective sense */
716 )
717{ /*lint --e{715}*/
718 errorMessage();
719 return SCIP_PLUGINNOTFOUND;
720}
721
722/** gets objective coefficients from LP problem object */
724 SCIP_LPI* lpi, /**< LP interface structure */
725 int firstcol, /**< first column to get objective coefficient for */
726 int lastcol, /**< last column to get objective coefficient for */
727 SCIP_Real* vals /**< array to store objective coefficients */
728 )
729{ /*lint --e{715}*/
730 assert(lpi != NULL);
731 assert(vals != NULL);
732 assert(firstcol >= 0);
733 assert(lastcol < lpi->ncols);
734 assert(firstcol <= lastcol + 1);
735
736 errorMessage();
737
738 return SCIP_PLUGINNOTFOUND;
739}
740
741/** gets current bounds from LP problem object */
743 SCIP_LPI* lpi, /**< LP interface structure */
744 int firstcol, /**< first column to get bounds for */
745 int lastcol, /**< last column to get bounds for */
746 SCIP_Real* lbs, /**< array to store lower bound values, or NULL */
747 SCIP_Real* ubs /**< array to store upper bound values, or NULL */
748 )
749{ /*lint --e{715}*/
750 assert(lpi != NULL);
751 assert(firstcol >= 0);
752 assert(lastcol < lpi->ncols);
753 assert(firstcol <= lastcol + 1);
754
755 errorMessage();
756
757 return SCIP_PLUGINNOTFOUND;
758}
759
760/** gets current row sides from LP problem object */
762 SCIP_LPI* lpi, /**< LP interface structure */
763 int firstrow, /**< first row to get sides for */
764 int lastrow, /**< last row to get sides for */
765 SCIP_Real* lhss, /**< array to store left hand side values, or NULL */
766 SCIP_Real* rhss /**< array to store right hand side values, or NULL */
767 )
768{ /*lint --e{715}*/
769 assert(lpi != NULL);
770 assert(firstrow >= 0);
771 assert(lastrow < lpi->nrows);
772 assert(firstrow <= lastrow + 1);
773
774 errorMessage();
775
776 return SCIP_PLUGINNOTFOUND;
777}
778
779/** gets a single coefficient */
781 SCIP_LPI* lpi, /**< LP interface structure */
782 int row, /**< row number of coefficient */
783 int col, /**< column number of coefficient */
784 SCIP_Real* val /**< pointer to store the value of the coefficient */
785 )
786{ /*lint --e{715}*/
787 assert(lpi != NULL);
788 assert(val != NULL);
789 errorMessage();
790 return SCIP_PLUGINNOTFOUND;
791}
792
793/**@} */
794
795
796
797
798/*
799 * Solving Methods
800 */
801
802/**@name Solving Methods */
803/**@{ */
804
805/** calls primal simplex to solve the LP */
807 SCIP_LPI* lpi /**< LP interface structure */
808 )
809{ /*lint --e{715}*/
810 assert(lpi != NULL);
811 errorMessage();
812 return SCIP_PLUGINNOTFOUND;
813}
814
815/** calls dual simplex to solve the LP */
817 SCIP_LPI* lpi /**< LP interface structure */
818 )
819{ /*lint --e{715}*/
820 assert(lpi != NULL);
821 errorMessage();
822 return SCIP_PLUGINNOTFOUND;
823}
824
825/** calls barrier or interior point algorithm to solve the LP with crossover to simplex basis */
827 SCIP_LPI* lpi, /**< LP interface structure */
828 SCIP_Bool crossover /**< perform crossover */
829 )
830{ /*lint --e{715}*/
831 assert(lpi != NULL);
832 errorMessage();
833 return SCIP_PLUGINNOTFOUND;
834}
835
836/** start strong branching - call before any strong branching */
838 SCIP_LPI* lpi /**< LP interface structure */
839 )
840{ /*lint --e{715}*/
841 assert(lpi != NULL);
842 return SCIP_OKAY;
843}
844
845/** end strong branching - call after any strong branching */
847 SCIP_LPI* lpi /**< LP interface structure */
848 )
849{ /*lint --e{715}*/
850 assert(lpi != NULL);
851 return SCIP_OKAY;
852}
853
854/** performs strong branching iterations on one @b fractional candidate */
856 SCIP_LPI* lpi, /**< LP interface structure */
857 int col, /**< column to apply strong branching on */
858 SCIP_Real psol, /**< fractional current primal solution value of column */
859 int itlim, /**< iteration limit for strong branchings */
860 SCIP_Real* down, /**< stores dual bound after branching column down */
861 SCIP_Real* up, /**< stores dual bound after branching column up */
862 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
863 * otherwise, it can only be used as an estimate value */
864 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
865 * otherwise, it can only be used as an estimate value */
866 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
867 )
868{ /*lint --e{715}*/
869 assert(lpi != NULL);
870 assert( down != NULL );
871 assert( up != NULL );
872 assert( downvalid != NULL );
873 assert( upvalid != NULL );
874 errorMessage();
875 return SCIP_PLUGINNOTFOUND;
876}
877
878/** performs strong branching iterations on given @b fractional candidates */
880 SCIP_LPI* lpi, /**< LP interface structure */
881 int* cols, /**< columns to apply strong branching on */
882 int ncols, /**< number of columns */
883 SCIP_Real* psols, /**< fractional current primal solution values of columns */
884 int itlim, /**< iteration limit for strong branchings */
885 SCIP_Real* down, /**< stores dual bounds after branching columns down */
886 SCIP_Real* up, /**< stores dual bounds after branching columns up */
887 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
888 * otherwise, they can only be used as an estimate values */
889 SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
890 * otherwise, they can only be used as an estimate values */
891 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
892 )
893{ /*lint --e{715}*/
894 assert(lpi != NULL);
895 assert( cols != NULL );
896 assert( psols != NULL );
897 assert( down != NULL );
898 assert( up != NULL );
899 assert( downvalid != NULL );
900 assert( upvalid != NULL );
901 errorMessage();
902 return SCIP_PLUGINNOTFOUND;
903}
904
905/** performs strong branching iterations on one candidate with @b integral value */
907 SCIP_LPI* lpi, /**< LP interface structure */
908 int col, /**< column to apply strong branching on */
909 SCIP_Real psol, /**< current integral primal solution value of column */
910 int itlim, /**< iteration limit for strong branchings */
911 SCIP_Real* down, /**< stores dual bound after branching column down */
912 SCIP_Real* up, /**< stores dual bound after branching column up */
913 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
914 * otherwise, it can only be used as an estimate value */
915 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
916 * otherwise, it can only be used as an estimate value */
917 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
918 )
919{ /*lint --e{715}*/
920 assert(lpi != NULL);
921 assert( down != NULL );
922 assert( up != NULL );
923 assert( downvalid != NULL );
924 assert( upvalid != NULL );
925 errorMessage();
926 return SCIP_PLUGINNOTFOUND;
927}
928
929/** performs strong branching iterations on given candidates with @b integral values */
931 SCIP_LPI* lpi, /**< LP interface structure */
932 int* cols, /**< columns to apply strong branching on */
933 int ncols, /**< number of columns */
934 SCIP_Real* psols, /**< current integral primal solution values of columns */
935 int itlim, /**< iteration limit for strong branchings */
936 SCIP_Real* down, /**< stores dual bounds after branching columns down */
937 SCIP_Real* up, /**< stores dual bounds after branching columns up */
938 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
939 * otherwise, they can only be used as an estimate values */
940 SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
941 * otherwise, they can only be used as an estimate values */
942 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
943 )
944{ /*lint --e{715}*/
945 assert(lpi != NULL);
946 assert( cols != NULL );
947 assert( psols != NULL );
948 assert( down != NULL );
949 assert( up != NULL );
950 assert( downvalid != NULL );
951 assert( upvalid != NULL );
952 errorMessage();
953 return SCIP_PLUGINNOTFOUND;
954}
955/**@} */
956
957
958
959
960/*
961 * Solution Information Methods
962 */
963
964/**@name Solution Information Methods */
965/**@{ */
966
967/** returns whether a solve method was called after the last modification of the LP */
969 SCIP_LPI* lpi /**< LP interface structure */
970 )
971{ /*lint --e{715}*/
972 assert(lpi != NULL);
974 return FALSE;
975}
976
977/** gets information about primal and dual feasibility of the current LP solution
978 *
979 * The feasibility information is with respect to the last solving call and it is only relevant if SCIPlpiWasSolved()
980 * returns true. If the LP is changed, this information might be invalidated.
981 *
982 * Note that @a primalfeasible and @a dualfeasible should only return true if the solver has proved the respective LP to
983 * be feasible. Thus, the return values should be equal to the values of SCIPlpiIsPrimalFeasible() and
984 * SCIPlpiIsDualFeasible(), respectively. Note that if feasibility cannot be proved, they should return false (even if
985 * the problem might actually be feasible).
986 */
988 SCIP_LPI* lpi, /**< LP interface structure */
989 SCIP_Bool* primalfeasible, /**< pointer to store primal feasibility status */
990 SCIP_Bool* dualfeasible /**< pointer to store dual feasibility status */
991 )
992{ /*lint --e{715}*/
993 assert(lpi != NULL);
994 assert(primalfeasible != NULL);
995 assert(dualfeasible != NULL);
996 errorMessage();
997 return SCIP_PLUGINNOTFOUND;
998}
999
1000/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point);
1001 * this does not necessarily mean, that the solver knows and can return the primal ray
1002 */
1004 SCIP_LPI* lpi /**< LP interface structure */
1005 )
1006{ /*lint --e{715}*/
1007 assert(lpi != NULL);
1009 return FALSE;
1010}
1011
1012/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point),
1013 * and the solver knows and can return the primal ray
1014 */
1016 SCIP_LPI* lpi /**< LP interface structure */
1017 )
1018{ /*lint --e{715}*/
1019 assert(lpi != NULL);
1021 return FALSE;
1022}
1023
1024/** returns TRUE iff LP is proven to be primal unbounded */
1026 SCIP_LPI* lpi /**< LP interface structure */
1027 )
1028{ /*lint --e{715}*/
1029 assert(lpi != NULL);
1031 return FALSE;
1032}
1033
1034/** returns TRUE iff LP is proven to be primal infeasible */
1036 SCIP_LPI* lpi /**< LP interface structure */
1037 )
1038{ /*lint --e{715}*/
1039 assert(lpi != NULL);
1041 return FALSE;
1042}
1043
1044/** returns TRUE iff LP is proven to be primal feasible */
1046 SCIP_LPI* lpi /**< LP interface structure */
1047 )
1048{ /*lint --e{715}*/
1049 assert(lpi != NULL);
1051 return FALSE;
1052}
1053
1054/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point);
1055 * this does not necessarily mean, that the solver knows and can return the dual ray
1056 */
1058 SCIP_LPI* lpi /**< LP interface structure */
1059 )
1060{ /*lint --e{715}*/
1061 assert(lpi != NULL);
1063 return FALSE;
1064}
1065
1066/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point),
1067 * and the solver knows and can return the dual ray
1068 */
1070 SCIP_LPI* lpi /**< LP interface structure */
1071 )
1072{ /*lint --e{715}*/
1073 assert(lpi != NULL);
1075 return FALSE;
1076}
1077
1078/** returns TRUE iff LP is proven to be dual unbounded */
1080 SCIP_LPI* lpi /**< LP interface structure */
1081 )
1082{ /*lint --e{715}*/
1083 assert(lpi != NULL);
1085 return FALSE;
1086}
1087
1088/** returns TRUE iff LP is proven to be dual infeasible */
1090 SCIP_LPI* lpi /**< LP interface structure */
1091 )
1092{ /*lint --e{715}*/
1093 assert(lpi != NULL);
1095 return FALSE;
1096}
1097
1098/** returns TRUE iff LP is proven to be dual feasible */
1100 SCIP_LPI* lpi /**< LP interface structure */
1101 )
1102{ /*lint --e{715}*/
1103 assert(lpi != NULL);
1105 return FALSE;
1106}
1107
1108/** returns TRUE iff LP was solved to optimality */
1110 SCIP_LPI* lpi /**< LP interface structure */
1111 )
1112{ /*lint --e{715}*/
1113 assert(lpi != NULL);
1115 return FALSE;
1116}
1117
1118/** returns TRUE iff current LP solution is stable
1119 *
1120 * This function should return true if the solution is reliable, i.e., feasible and optimal (or proven
1121 * infeasible/unbounded) with respect to the original problem. The optimality status might be with respect to a scaled
1122 * version of the problem, but the solution might not be feasible to the unscaled original problem; in this case,
1123 * SCIPlpiIsStable() should return false.
1124 */
1126 SCIP_LPI* lpi /**< LP interface structure */
1127 )
1128{ /*lint --e{715}*/
1129 assert(lpi != NULL);
1131 return FALSE;
1132}
1133
1134/** returns TRUE iff the objective limit was reached */
1136 SCIP_LPI* lpi /**< LP interface structure */
1137 )
1138{ /*lint --e{715}*/
1139 assert(lpi != NULL);
1141 return FALSE;
1142}
1143
1144/** returns TRUE iff the iteration limit was reached */
1146 SCIP_LPI* lpi /**< LP interface structure */
1147 )
1148{ /*lint --e{715}*/
1149 assert(lpi != NULL);
1151 return FALSE;
1152}
1153
1154/** returns TRUE iff the time limit was reached */
1156 SCIP_LPI* lpi /**< LP interface structure */
1157 )
1158{ /*lint --e{715}*/
1159 assert(lpi != NULL);
1161 return FALSE;
1162}
1163
1164/** returns the internal solution status of the solver */
1166 SCIP_LPI* lpi /**< LP interface structure */
1167 )
1168{ /*lint --e{715}*/
1169 assert(lpi != NULL);
1171 return FALSE;
1172}
1173
1174/** tries to reset the internal status of the LP solver in order to ignore an instability of the last solving call */
1176 SCIP_LPI* lpi, /**< LP interface structure */
1177 SCIP_Bool* success /**< pointer to store, whether the instability could be ignored */
1178 )
1179{ /*lint --e{715}*/
1180 assert(lpi != NULL);
1181 assert(success != NULL);
1182 errorMessage();
1183 return SCIP_PLUGINNOTFOUND;
1184}
1185
1186/** gets objective value of solution */
1188 SCIP_LPI* lpi, /**< LP interface structure */
1189 SCIP_Real* objval /**< stores the objective value */
1190 )
1191{ /*lint --e{715}*/
1192 assert(lpi != NULL);
1193 assert(objval != NULL);
1194 errorMessage();
1195 return SCIP_PLUGINNOTFOUND;
1196}
1197
1198/** gets primal and dual solution vectors for feasible LPs
1199 *
1200 * Before calling this function, the caller must ensure that the LP has been solved to optimality, i.e., that
1201 * SCIPlpiIsOptimal() returns true.
1202 */
1204 SCIP_LPI* lpi, /**< LP interface structure */
1205 SCIP_Real* objval, /**< stores the objective value, may be NULL if not needed */
1206 SCIP_Real* primsol, /**< primal solution vector, may be NULL if not needed */
1207 SCIP_Real* dualsol, /**< dual solution vector, may be NULL if not needed */
1208 SCIP_Real* activity, /**< row activity vector, may be NULL if not needed */
1209 SCIP_Real* redcost /**< reduced cost vector, may be NULL if not needed */
1210 )
1211{ /*lint --e{715}*/
1212 assert(lpi != NULL);
1213 errorMessage();
1214 return SCIP_PLUGINNOTFOUND;
1215}
1216
1217/** gets primal ray for unbounded LPs */
1219 SCIP_LPI* lpi, /**< LP interface structure */
1220 SCIP_Real* ray /**< primal ray */
1221 )
1222{ /*lint --e{715}*/
1223 assert(lpi != NULL);
1224 assert(ray != NULL);
1225 errorMessage();
1226 return SCIP_PLUGINNOTFOUND;
1227}
1228
1229/** gets dual Farkas proof for infeasibility */
1231 SCIP_LPI* lpi, /**< LP interface structure */
1232 SCIP_Real* dualfarkas /**< dual Farkas row multipliers */
1233 )
1234{ /*lint --e{715}*/
1235 assert(lpi != NULL);
1236 assert(dualfarkas != NULL);
1237 errorMessage();
1238 return SCIP_PLUGINNOTFOUND;
1239}
1240
1241/** gets the number of LP iterations of the last solve call */
1243 SCIP_LPI* lpi, /**< LP interface structure */
1244 int* iterations /**< pointer to store the number of iterations of the last solve call */
1245 )
1246{ /*lint --e{715}*/
1247 assert(lpi != NULL);
1248 assert(iterations != NULL);
1249 errorMessage();
1250 return SCIP_PLUGINNOTFOUND;
1251}
1252
1253/** gets information about the quality of an LP solution
1254 *
1255 * Such information is usually only available, if also a (maybe not optimal) solution is available.
1256 * The LPI should return SCIP_INVALID for @p quality, if the requested quantity is not available.
1257 */
1259 SCIP_LPI* lpi, /**< LP interface structure */
1260 SCIP_LPSOLQUALITY qualityindicator, /**< indicates which quality should be returned */
1261 SCIP_Real* quality /**< pointer to store quality number */
1262 )
1263{ /*lint --e{715}*/
1264 assert(lpi != NULL);
1265 assert(quality != NULL);
1266
1267 *quality = SCIP_INVALID;
1268
1269 return SCIP_OKAY;
1270}
1271
1272/**@} */
1273
1274
1275
1276
1277/*
1278 * LP Basis Methods
1279 */
1280
1281/**@name LP Basis Methods */
1282/**@{ */
1283
1284/** gets current basis status for columns and rows; arrays must be large enough to store the basis status */
1286 SCIP_LPI* lpi, /**< LP interface structure */
1287 int* cstat, /**< array to store column basis status, or NULL */
1288 int* rstat /**< array to store row basis status, or NULL */
1289 )
1290{ /*lint --e{715}*/
1291 assert(lpi != NULL);
1292 errorMessage();
1293 return SCIP_PLUGINNOTFOUND;
1294}
1295
1296/** sets current basis status for columns and rows */
1298 SCIP_LPI* lpi, /**< LP interface structure */
1299 const int* cstat, /**< array with column basis status */
1300 const int* rstat /**< array with row basis status */
1301 )
1302{ /*lint --e{715}*/
1303 assert(lpi != NULL);
1304 assert(cstat != NULL);
1305 assert(rstat != NULL);
1306 errorMessage();
1307 return SCIP_PLUGINNOTFOUND;
1308}
1309
1310/** returns the indices of the basic columns and rows; basic column n gives value n, basic row m gives value -1-m */
1312 SCIP_LPI* lpi, /**< LP interface structure */
1313 int* bind /**< pointer to store basis indices ready to keep number of rows entries */
1314 )
1315{ /*lint --e{715}*/
1316 assert(lpi != NULL);
1317 assert(bind != NULL);
1318 errorMessage();
1319 return SCIP_PLUGINNOTFOUND;
1320}
1321
1322/** get row of inverse basis matrix B^-1
1323 *
1324 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1325 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1326 * see also the explanation in lpi.h.
1327 */
1329 SCIP_LPI* lpi, /**< LP interface structure */
1330 int r, /**< row number */
1331 SCIP_Real* coef, /**< pointer to store the coefficients of the row */
1332 int* inds, /**< array to store the non-zero indices, or NULL */
1333 int* ninds /**< pointer to store the number of non-zero indices, or NULL
1334 * (-1: if we do not store sparsity information) */
1335 )
1336{ /*lint --e{715}*/
1337 assert(lpi != NULL);
1338 assert(coef != NULL);
1339 errorMessage();
1340 return SCIP_PLUGINNOTFOUND;
1341}
1342
1343/** get column of inverse basis matrix B^-1
1344 *
1345 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1346 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1347 * see also the explanation in lpi.h.
1348 */
1350 SCIP_LPI* lpi, /**< LP interface structure */
1351 int c, /**< column number of B^-1; this is NOT the number of the column in the LP;
1352 * you have to call SCIPlpiGetBasisInd() to get the array which links the
1353 * B^-1 column numbers to the row and column numbers of the LP!
1354 * c must be between 0 and nrows-1, since the basis has the size
1355 * nrows * nrows */
1356 SCIP_Real* coef, /**< pointer to store the coefficients of the column */
1357 int* inds, /**< array to store the non-zero indices, or NULL */
1358 int* ninds /**< pointer to store the number of non-zero indices, or NULL
1359 * (-1: if we do not store sparsity information) */
1360 )
1361{ /*lint --e{715}*/
1362 assert(lpi != NULL);
1363 assert(coef != NULL);
1364 errorMessage();
1365 return SCIP_PLUGINNOTFOUND;
1366}
1367
1368/** get row of inverse basis matrix times constraint matrix B^-1 * A
1369 *
1370 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1371 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1372 * see also the explanation in lpi.h.
1373 */
1375 SCIP_LPI* lpi, /**< LP interface structure */
1376 int r, /**< row number */
1377 const SCIP_Real* binvrow, /**< row in (A_B)^-1 from prior call to SCIPlpiGetBInvRow(), or NULL */
1378 SCIP_Real* coef, /**< vector to return coefficients of the row */
1379 int* inds, /**< array to store the non-zero indices, or NULL */
1380 int* ninds /**< pointer to store the number of non-zero indices, or NULL
1381 * (-1: if we do not store sparsity information) */
1382 )
1383{ /*lint --e{715}*/
1384 assert(lpi != NULL);
1385 assert(coef != NULL);
1386 errorMessage();
1387 return SCIP_PLUGINNOTFOUND;
1388}
1389
1390/** get column of inverse basis matrix times constraint matrix B^-1 * A
1391 *
1392 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1393 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1394 * see also the explanation in lpi.h.
1395 */
1397 SCIP_LPI* lpi, /**< LP interface structure */
1398 int c, /**< column number */
1399 SCIP_Real* coef, /**< vector to return coefficients of the column */
1400 int* inds, /**< array to store the non-zero indices, or NULL */
1401 int* ninds /**< pointer to store the number of non-zero indices, or NULL
1402 * (-1: if we do not store sparsity information) */
1403 )
1404{ /*lint --e{715}*/
1405 assert(lpi != NULL);
1406 assert(coef != NULL);
1407 errorMessage();
1408 return SCIP_PLUGINNOTFOUND;
1409}
1410
1411/**@} */
1412
1413
1414
1415
1416/*
1417 * LP State Methods
1418 */
1419
1420/**@name LP State Methods */
1421/**@{ */
1422
1423/** stores LPi state (like basis information) into lpistate object */
1425 SCIP_LPI* lpi, /**< LP interface structure */
1426 BMS_BLKMEM* blkmem, /**< block memory */
1427 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
1428 )
1429{ /*lint --e{715}*/
1430 assert(lpi != NULL);
1431 assert(blkmem != NULL);
1432 assert(lpistate != NULL);
1433 assert(blkmem != NULL);
1434 errorMessage();
1435 return SCIP_PLUGINNOTFOUND;
1436}
1437
1438/** loads LPi state (like basis information) into solver; note that the LP might have been extended with additional
1439 * columns and rows since the state was stored with SCIPlpiGetState()
1440 */
1442 SCIP_LPI* lpi, /**< LP interface structure */
1443 BMS_BLKMEM* blkmem, /**< block memory */
1444 const SCIP_LPISTATE* lpistate /**< LPi state information (like basis information), or NULL */
1445 )
1446{ /*lint --e{715}*/
1447 assert(lpi != NULL);
1448 assert(blkmem != NULL);
1449 assert(lpistate != NULL);
1450 errorMessage();
1451 return SCIP_PLUGINNOTFOUND;
1452}
1453
1454/** clears current LPi state (like basis information) of the solver */
1456 SCIP_LPI* lpi /**< LP interface structure */
1457 )
1458{ /*lint --e{715}*/
1459 assert(lpi != NULL);
1460 return SCIP_OKAY;
1461}
1462
1463/** frees LPi state information */
1465 SCIP_LPI* lpi, /**< LP interface structure */
1466 BMS_BLKMEM* blkmem, /**< block memory */
1467 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
1468 )
1469{ /*lint --e{715}*/
1470 assert(lpi != NULL);
1471 assert(lpistate != NULL);
1472 assert(blkmem != NULL);
1473 return SCIP_OKAY;
1474}
1475
1476/** checks whether the given LP state contains simplex basis information */
1478 SCIP_LPI* lpi, /**< LP interface structure */
1479 SCIP_LPISTATE* lpistate /**< LP state information (like basis information), or NULL */
1480 )
1481{ /*lint --e{715}*/
1482 assert(lpi != NULL);
1484 return FALSE;
1485}
1486
1487/** reads LP state (like basis information from a file */
1489 SCIP_LPI* lpi, /**< LP interface structure */
1490 const char* fname /**< file name */
1491 )
1492{ /*lint --e{715}*/
1493 assert(lpi != NULL);
1494 assert(fname != NULL);
1495 errorMessage();
1496 return SCIP_PLUGINNOTFOUND;
1497}
1498
1499/** writes LPi state (i.e. basis information) to a file */
1501 SCIP_LPI* lpi, /**< LP interface structure */
1502 const char* fname /**< file name */
1503 )
1504{ /*lint --e{715}*/
1505 assert(lpi != NULL);
1506 assert(fname != NULL);
1507 errorMessage();
1508 return SCIP_PLUGINNOTFOUND;
1509}
1510
1511/**@} */
1512
1513
1514
1515
1516/*
1517 * LP Pricing Norms Methods
1518 */
1519
1520/**@name LP Pricing Norms Methods */
1521/**@{ */
1522
1523/** stores LPi pricing norms information
1524 * @todo should we store norm information?
1525 */
1527 SCIP_LPI* lpi, /**< LP interface structure */
1528 BMS_BLKMEM* blkmem, /**< block memory */
1529 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information */
1530 )
1531{ /*lint --e{715}*/
1532 assert(lpi != NULL);
1533 assert(blkmem != NULL);
1534 assert(lpinorms != NULL);
1535 errorMessage();
1536 return SCIP_PLUGINNOTFOUND;
1537}
1538
1539/** loads LPi pricing norms into solver; note that the LP might have been extended with additional
1540 * columns and rows since the state was stored with SCIPlpiGetNorms()
1541 */
1543 SCIP_LPI* lpi, /**< LP interface structure */
1544 BMS_BLKMEM* blkmem, /**< block memory */
1545 const SCIP_LPINORMS* lpinorms /**< LPi pricing norms information, or NULL */
1546 )
1547{ /*lint --e{715}*/
1548 assert(lpi != NULL);
1549 errorMessage();
1550 return SCIP_PLUGINNOTFOUND;
1551}
1552
1553/** frees pricing norms information */
1555 SCIP_LPI* lpi, /**< LP interface structure */
1556 BMS_BLKMEM* blkmem, /**< block memory */
1557 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information, or NULL */
1558 )
1559{ /*lint --e{715}*/
1560 assert(lpi != NULL);
1561 errorMessage();
1562 return SCIP_PLUGINNOTFOUND;
1563}
1564
1565/**@} */
1566
1567
1568
1569
1570/*
1571 * Parameter Methods
1572 */
1573
1574/**@name Parameter Methods */
1575/**@{ */
1576
1577/** gets integer parameter of LP */
1579 SCIP_LPI* lpi, /**< LP interface structure */
1580 SCIP_LPPARAM type, /**< parameter number */
1581 int* ival /**< buffer to store the parameter value */
1582 )
1583{ /*lint --e{715}*/
1584 assert(lpi != NULL);
1585 assert(ival != NULL);
1586 return SCIP_PARAMETERUNKNOWN;
1587}
1588
1589/** sets integer parameter of LP */
1591 SCIP_LPI* lpi, /**< LP interface structure */
1592 SCIP_LPPARAM type, /**< parameter number */
1593 int ival /**< parameter value */
1594 )
1595{ /*lint --e{715}*/
1596 assert(lpi != NULL);
1597 return SCIP_PARAMETERUNKNOWN;
1598}
1599
1600/** gets floating point parameter of LP */
1602 SCIP_LPI* lpi, /**< LP interface structure */
1603 SCIP_LPPARAM type, /**< parameter number */
1604 SCIP_Real* dval /**< buffer to store the parameter value */
1605 )
1606{ /*lint --e{715}*/
1607 assert(lpi != NULL);
1608 assert(dval != NULL);
1609 return SCIP_PARAMETERUNKNOWN;
1610}
1611
1612/** sets floating point parameter of LP */
1614 SCIP_LPI* lpi, /**< LP interface structure */
1615 SCIP_LPPARAM type, /**< parameter number */
1616 SCIP_Real dval /**< parameter value */
1617 )
1618{ /*lint --e{715}*/
1619 assert(lpi != NULL);
1620 return SCIP_PARAMETERUNKNOWN;
1621}
1622
1623/** interrupts the currently ongoing lp solve or disables the interrupt */
1625 SCIP_LPI* lpi, /**< LP interface structure */
1626 SCIP_Bool interrupt /**< TRUE if interrupt should be set, FALSE if it should be disabled */
1627 )
1628{
1629 /*lint --e{715}*/
1630 assert(lpi != NULL);
1631
1632 return SCIP_OKAY;
1633}
1634
1635/**@} */
1636
1637/*
1638 * Numerical Methods
1639 */
1640
1641/**@name Numerical Methods */
1642/**@{ */
1643
1644/** returns value treated as infinity in the LP solver */
1646 SCIP_LPI* lpi /**< LP interface structure */
1647 )
1648{ /*lint --e{715}*/
1649 assert(lpi != NULL);
1650 return LPIINFINITY;
1651}
1652
1653/** checks if given value is treated as infinity in the LP solver */
1655 SCIP_LPI* lpi, /**< LP interface structure */
1656 SCIP_Real val /**< value to be checked for infinity */
1657 )
1658{ /*lint --e{715}*/
1659 assert(lpi != NULL);
1660 if( val >= LPIINFINITY )
1661 return TRUE;
1662 return FALSE;
1663}
1664
1665/**@} */
1666
1667
1668
1669
1670/*
1671 * File Interface Methods
1672 */
1673
1674/**@name File Interface Methods */
1675/**@{ */
1676
1677/** reads LP from a file */
1679 SCIP_LPI* lpi, /**< LP interface structure */
1680 const char* fname /**< file name */
1681 )
1682{ /*lint --e{715}*/
1683 assert(lpi != NULL);
1684 assert(fname != NULL);
1685 errorMessage();
1686 return SCIP_PLUGINNOTFOUND;
1687}
1688
1689/** writes LP to a file */
1691 SCIP_LPI* lpi, /**< LP interface structure */
1692 const char* fname /**< file name */
1693 )
1694{ /*lint --e{715}*/
1695 assert(lpi != NULL);
1696 errorMessage();
1697 return SCIP_PLUGINNOTFOUND;
1698}
1699
1700/**@} */
SCIP_Real * r
Definition: circlepacking.c:59
#define NULL
Definition: def.h:248
#define SCIP_INVALID
Definition: def.h:178
#define SCIP_Bool
Definition: def.h:91
#define SCIP_ALLOC(x)
Definition: def.h:366
#define SCIP_Real
Definition: def.h:156
#define TRUE
Definition: def.h:93
#define FALSE
Definition: def.h:94
#define SCIPABORT()
Definition: def.h:327
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
Definition: lpi_none.c:481
SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
Definition: lpi_none.c:1441
SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1396
SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
Definition: lpi_none.c:1601
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
Definition: lpi_none.c:1645
SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
Definition: lpi_none.c:1135
SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen)
Definition: lpi_none.c:509
SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
Definition: lpi_none.c:1654
SCIP_RETCODE SCIPlpiClear(SCIP_LPI *lpi)
Definition: lpi_none.c:433
SCIP_RETCODE SCIPlpiClearState(SCIP_LPI *lpi)
Definition: lpi_none.c:1455
SCIP_Bool SCIPlpiExistsDualRay(SCIP_LPI *lpi)
Definition: lpi_none.c:1057
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
Definition: lpi_none.c:1003
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
Definition: lpi_none.c:1285
SCIP_RETCODE SCIPlpiReadState(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1488
SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
Definition: lpi_none.c:347
SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray)
Definition: lpi_none.c:1218
SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival)
Definition: lpi_none.c:1578
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1690
SCIP_RETCODE SCIPlpiSetIntegralityInformation(SCIP_LPI *lpi, int ncols, int *intInfo)
Definition: lpi_none.c:119
SCIP_Bool SCIPlpiIsDualInfeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1089
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
Definition: lpi_none.c:1613
SCIP_RETCODE SCIPlpiStrongbranchFrac(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:855
SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
Definition: lpi_none.c:1542
SCIP_RETCODE SCIPlpiGetNNonz(SCIP_LPI *lpi, int *nnonz)
Definition: lpi_none.c:599
SCIP_Bool SCIPlpiHasPrimalSolve(void)
Definition: lpi_none.c:130
SCIP_RETCODE SCIPlpiStrongbranchInt(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:906
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
Definition: lpi_none.c:742
SCIP_Bool SCIPlpiHasBarrierSolve(void)
Definition: lpi_none.c:146
SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
Definition: lpi_none.c:1230
SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
Definition: lpi_none.c:1187
SCIP_RETCODE SCIPlpiScaleCol(SCIP_LPI *lpi, int col, SCIP_Real scaleval)
Definition: lpi_none.c:546
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
Definition: lpi_none.c:1165
SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
Definition: lpi_none.c:837
SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
Definition: lpi_none.c:987
SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
Definition: lpi_none.c:1554
SCIP_Bool SCIPlpiIsIterlimExc(SCIP_LPI *lpi)
Definition: lpi_none.c:1145
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
Definition: lpi_none.c:448
SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
Definition: lpi_none.c:1025
SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success)
Definition: lpi_none.c:1175
SCIP_RETCODE SCIPlpiWriteState(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1500
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
Definition: lpi_none.c:187
SCIP_RETCODE SCIPlpiStrongbranchesFrac(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:879
SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
Definition: lpi_none.c:780
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1045
SCIP_RETCODE SCIPlpiReadLP(SCIP_LPI *lpi, const char *fname)
Definition: lpi_none.c:1678
SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
Definition: lpi_none.c:1258
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1099
SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
Definition: lpi_none.c:1526
SCIP_Bool SCIPlpiIsTimelimExc(SCIP_LPI *lpi)
Definition: lpi_none.c:1155
SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
Definition: lpi_none.c:1477
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
Definition: lpi_none.c:1590
const char * SCIPlpiGetSolverName(void)
Definition: lpi_none.c:95
SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, const int *cstat, const int *rstat)
Definition: lpi_none.c:1297
SCIP_Bool SCIPlpiHasPrimalRay(SCIP_LPI *lpi)
Definition: lpi_none.c:1015
SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1328
SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow)
Definition: lpi_none.c:385
SCIP_RETCODE SCIPlpiGetCols(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lb, SCIP_Real *ub, int *nnonz, int *beg, int *ind, SCIP_Real *val)
Definition: lpi_none.c:614
SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1349
SCIP_RETCODE SCIPlpiGetColNames(SCIP_LPI *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
Definition: lpi_none.c:663
SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_none.c:1374
SCIP_RETCODE SCIPlpiGetRows(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhs, SCIP_Real *rhs, int *nnonz, int *beg, int *ind, SCIP_Real *val)
Definition: lpi_none.c:640
SCIP_Bool SCIPlpiWasSolved(SCIP_LPI *lpi)
Definition: lpi_none.c:968
const char * SCIPlpiGetSolverDesc(void)
Definition: lpi_none.c:103
SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover)
Definition: lpi_none.c:826
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
Definition: lpi_none.c:1109
SCIP_RETCODE SCIPlpiGetRowNames(SCIP_LPI *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
Definition: lpi_none.c:688
SCIP_Bool SCIPlpiHasDualSolve(void)
Definition: lpi_none.c:138
SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
Definition: lpi_none.c:846
SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
Definition: lpi_none.c:761
SCIP_RETCODE SCIPlpiStrongbranchesInt(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
Definition: lpi_none.c:930
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
Definition: lpi_none.c:1203
SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
Definition: lpi_none.c:1069
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat)
Definition: lpi_none.c:316
SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals)
Definition: lpi_none.c:723
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_none.c:1464
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
Definition: lpi_none.c:1035
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
Definition: lpi_none.c:816
SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
Definition: lpi_none.c:257
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
Definition: lpi_none.c:806
SCIP_RETCODE SCIPlpiLoadColLP(SCIP_LPI *lpi, SCIP_OBJSEN objsen, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
Definition: lpi_none.c:212
SCIP_Bool SCIPlpiIsDualUnbounded(SCIP_LPI *lpi)
Definition: lpi_none.c:1079
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
Definition: lpi_none.c:1242
SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind)
Definition: lpi_none.c:1311
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
Definition: lpi_none.c:166
void * SCIPlpiGetSolverPointer(SCIP_LPI *lpi)
Definition: lpi_none.c:111
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
Definition: lpi_none.c:519
SCIP_RETCODE SCIPlpiGetObjsen(SCIP_LPI *lpi, SCIP_OBJSEN *objsen)
Definition: lpi_none.c:713
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
Definition: lpi_none.c:1125
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
Definition: lpi_none.c:584
SCIP_RETCODE SCIPlpiInterrupt(SCIP_LPI *lpi, SCIP_Bool interrupt)
Definition: lpi_none.c:1624
SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol)
Definition: lpi_none.c:299
SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat)
Definition: lpi_none.c:402
SCIP_RETCODE SCIPlpiScaleRow(SCIP_LPI *lpi, int row, SCIP_Real scaleval)
Definition: lpi_none.c:533
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
Definition: lpi_none.c:569
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_none.c:1424
SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
Definition: lpi_none.c:497
interface methods for specific LP solvers
static void errorMessage(void)
Definition: lpi_none.c:74
#define LPINAME
Definition: lpi_none.c:38
static void errorMessageAbort(void)
Definition: lpi_none.c:63
#define LPIINFINITY
Definition: lpi_none.c:39
#define BMSfreeMemory(ptr)
Definition: memory.h:145
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:437
#define BMSallocMemory(ptr)
Definition: memory.h:118
public methods for message output
#define SCIPerrorMessage
Definition: pub_message.h:64
#define SCIPdebugMessage
Definition: pub_message.h:96
int ncols
Definition: lpi_none.c:53
int nrows
Definition: lpi_none.c:52
enum SCIP_LPParam SCIP_LPPARAM
Definition: type_lpi.h:73
enum SCIP_LPSolQuality SCIP_LPSOLQUALITY
Definition: type_lpi.h:104
enum SCIP_ObjSen SCIP_OBJSEN
Definition: type_lpi.h:45
@ SCIP_LPERROR
Definition: type_retcode.h:49
@ SCIP_PLUGINNOTFOUND
Definition: type_retcode.h:54
@ SCIP_PARAMETERUNKNOWN
Definition: type_retcode.h:55
@ SCIP_OKAY
Definition: type_retcode.h:42
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63