Scippy

SCIP

Solving Constraint Integer Programs

lpiexact_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 lpiexact_none.c
26 * @ingroup LPIEXACTS
27 * @brief dummy interface for the case no LP solver is needed
28 * @author Leon Eifler
29 */
30
31/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32#include <assert.h>
33
34#include "lpiexact/lpiexact.h"
35#include "scip/pub_message.h"
36
37#define LPINAME "NONE" /**< name of the LPI interface */
38#define LPIINFINITY 1e20 /**< infinity value */
39
40
41/* globally turn off lint warnings: */
42/*lint --e{715}*/
43
44/** LP interface
45 *
46 * Store several statistic values about the LP. These values are only needed in order to provide a rudimentary
47 * communication, e.g., there are asserts that check the number of rows and columns.
48 */
50{
51 int nrows; /**< number of rows */
52 int ncols; /**< number of columns */
53};
54
55
56/*
57 * Local Methods
58 */
59
60/** error handling method */
61static
63 void
64 )
65{ /*lint --e{2707}*/
66 SCIPerrorMessage("No exact LP solver available (LPSEXACT=none).\n");
67 SCIPABORT();
68}
69
70/** error handling method */
71static
73 void
74 )
75{
76 SCIPerrorMessage("No exact LP solver available (LPSEXACT=none).\n");
77}
78
79/*
80 * LP Interface Methods
81 */
82
83
84/*
85 * Miscellaneous Methods
86 */
87
88/**@name Miscellaneous Methods */
89/**@{ */
90
91/** gets name and version of LP solver */
93 void
94 )
95{
96 return LPINAME;
97}
98
99/** gets description of LP solver (developer, webpage, ...) */
101 void
102 )
103{
104 return "dummy LP solver interface which solely purpose is to resolve references at linking";
105}
106
107/** gets pointer for LP solver - use only with great care */
109 SCIP_LPIEXACT* lpi /**< pointer to an LP interface structure */
110 )
111{ /*lint --e{715}*/
112 return (void*) NULL;
113}
114
115/**@} */
116
117
118/*
119 * LPI Creation and Destruction Methods
120 */
121
122/**@name LPI Creation and Destruction Methods */
123/**@{ */
124
125/** creates an LP problem object */
127 SCIP_LPIEXACT** lpi, /**< pointer to an LP interface structure */
128 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler to use for printing messages, or NULL */
129 const char* name, /**< problem name */
130 SCIP_OBJSEN objsen /**< objective sense */
131 )
132{ /*lint --e{715}*/
133 assert(lpi != NULL);
134 assert(name != NULL);
135 SCIPdebugMessage("SCIPlpiExactCreate()\n");
136 SCIPdebugMessage("Note that there is no exact LP solver linked to the binary\n");
137
138 /* create empty LPI */
140 (*lpi)->nrows = 0;
141 (*lpi)->ncols = 0;
142
143 return SCIP_OKAY;
144}
145
146/** deletes an LP problem object */
148 SCIP_LPIEXACT** lpi /**< pointer to an LP interface structure */
149 )
150{ /*lint --e{715}*/
151 assert( lpi != NULL );
152 SCIPdebugMessage("SCIPlpiExactFree()\n");
153
154 BMSfreeMemory(lpi);
155
156 return SCIP_OKAY;
157}
158
159/**@} */
160
161
162/*
163 * Modification Methods
164 */
165
166/**@name Modification Methods */
167/**@{ */
168
169/** copies LP data with column matrix into LP solver */
171 SCIP_LPIEXACT* lpi, /**< LP interface structure */
172 SCIP_OBJSEN objsen, /**< objective sense */
173 int ncols, /**< number of columns */
174 SCIP_RATIONAL** obj, /**< objective function values of columns */
175 SCIP_RATIONAL** lb, /**< lower bounds of columns */
176 SCIP_RATIONAL** ub, /**< upper bounds of columns */
177 char** colnames, /**< column names, or NULL */
178 int nrows, /**< number of rows */
179 SCIP_RATIONAL** lhs, /**< left hand sides of rows */
180 SCIP_RATIONAL** rhs, /**< right hand sides of rows */
181 char** rownames, /**< row names, or NULL */
182 int nnonz, /**< number of nonzero elements in the constraint matrix */
183 int* beg, /**< start index of each column in ind- and val-array */
184 int* ind, /**< row indices of constraint matrix entries */
185 SCIP_RATIONAL** val /**< values of constraint matrix entries */
186 )
187{ /*lint --e{715}*/
188#ifndef NDEBUG
189 {
190 int j;
191 for( j = 0; j < nnonz; j++ )
192 assert( val[j] != 0 );
193 }
194#endif
195
196 assert( lpi != NULL );
197 assert( lhs != NULL );
198 assert( rhs != NULL );
199 assert( obj != NULL );
200 assert( lb != NULL );
201 assert( ub != NULL );
202 assert( beg != NULL );
203 assert( ind != NULL );
204 assert( val != NULL );
205
206 lpi->nrows = nrows;
207 lpi->ncols = ncols;
208 assert( lpi->nrows >= 0 );
209 assert( lpi->ncols >= 0 );
210
211 return SCIP_OKAY;
212}
213
214/** adds columns to the LP */
216 SCIP_LPIEXACT* lpi, /**< LP interface structure */
217 int ncols, /**< number of columns to be added */
218 SCIP_RATIONAL** obj, /**< objective function values of new columns */
219 SCIP_RATIONAL** lb, /**< lower bounds of new columns */
220 SCIP_RATIONAL** ub, /**< upper bounds of new columns */
221 char** colnames, /**< column names, or NULL */
222 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
223 int* beg, /**< start index of each column in ind- and val-array, or NULL if nnonz == 0 */
224 int* ind, /**< row indices of constraint matrix entries, or NULL if nnonz == 0 */
225 SCIP_RATIONAL** val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
226 )
227{ /*lint --e{715}*/
228 assert( lpi != NULL );
229 assert( lpi->ncols >= 0 );
230 assert( obj != NULL );
231 assert( lb != NULL );
232 assert( ub != NULL) ;
233 assert( nnonz == 0 || beg != NULL );
234 assert( nnonz == 0 || ind != NULL );
235 assert( nnonz == 0 || val != NULL );
236 assert( nnonz >= 0 );
237 assert( ncols >= 0 );
238
239 lpi->ncols += ncols;
240
241 return SCIP_OKAY;
242}
243
244/** deletes all columns in the given range from LP */
246 SCIP_LPIEXACT* lpi, /**< LP interface structure */
247 int firstcol, /**< first column to be deleted */
248 int lastcol /**< last column to be deleted */
249 )
250{ /*lint --e{715}*/
251 assert( lpi != NULL );
252 assert( lpi->ncols >= 0 );
253
254 lpi->ncols -= lastcol - firstcol + 1;
255 assert( lpi->ncols >= 0 );
256
257 return SCIP_OKAY;
258}
259
260/** adds rows to the LP */
262 SCIP_LPIEXACT* lpi, /**< LP interface structure */
263 int nrows, /**< number of rows to be added */
264 SCIP_RATIONAL** lhs, /**< left hand sides of new rows */
265 SCIP_RATIONAL** rhs, /**< right hand sides of new rows */
266 char** rownames, /**< row names, or NULL */
267 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
268 int* beg, /**< start index of each row in ind- and val-array, or NULL if nnonz == 0 */
269 int* ind, /**< column indices of constraint matrix entries, or NULL if nnonz == 0 */
270 SCIP_RATIONAL** val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
271 )
272{ /*lint --e{715}*/
273 assert( lpi != NULL );
274 assert( lpi->nrows >= 0 );
275 assert( lhs != NULL );
276 assert( rhs != NULL );
277 assert( nnonz == 0 || beg != NULL );
278 assert( nnonz == 0 || ind != NULL );
279 assert( nnonz == 0 || val != NULL );
280
281 lpi->nrows += nrows;
282
283 return SCIP_OKAY;
284}
285
286/** deletes all rows in the given range from LP */
288 SCIP_LPIEXACT* lpi, /**< LP interface structure */
289 int firstrow, /**< first row to be deleted */
290 int lastrow /**< last row to be deleted */
291 )
292{ /*lint --e{715}*/
293 assert( lpi != NULL );
294 assert( lpi->nrows >= 0 );
295
296 lpi->nrows -= lastrow - firstrow + 1;
297 assert( lpi->nrows >= 0 );
298
299 return SCIP_OKAY;
300}
301
302/** deletes rows from SCIP_LP; the new position of a row must not be greater that its old position */
304 SCIP_LPIEXACT* lpi, /**< LP interface structure */
305 int* dstat /**< deletion status of rows
306 * input: 1 if row should be deleted, 0 if not
307 * output: new position of row, -1 if row was deleted */
308 )
309{ /*lint --e{715}*/
310 int cnt = 0;
311 int i;
312
313 assert( lpi != NULL );
314 assert( dstat != NULL );
315 assert( lpi->nrows >= 0 );
316
317 for (i = 0; i < lpi->nrows; ++i)
318 {
319 if ( dstat[i] )
320 {
321 ++cnt;
322 dstat[i] = -1;
323 }
324 else
325 dstat[i] = cnt;
326 }
327 lpi->nrows -= cnt;
328 assert( lpi->nrows >= 0 );
329
330 return SCIP_OKAY;
331}
332
333/** clears the whole LP */
335 SCIP_LPIEXACT* lpi /**< LP interface structure */
336 )
337{ /*lint --e{715}*/
338 assert( lpi != NULL );
339 assert( lpi->nrows >= 0 );
340 assert( lpi->ncols >= 0 );
341
342 lpi->nrows = 0;
343 lpi->ncols = 0;
344
345 return SCIP_OKAY;
346}
347
348/** changes lower and upper bounds of columns */
350 SCIP_LPIEXACT* lpi, /**< LP interface structure */
351 int ncols, /**< number of columns to change bounds for */
352 int* ind, /**< column indices or NULL if ncols is zero */
353 SCIP_RATIONAL** lb, /**< values for the new lower bounds or NULL if ncols is zero */
354 SCIP_RATIONAL** ub /**< values for the new upper bounds or NULL if ncols is zero */
355 )
356{ /*lint --e{715}*/
357 assert( ncols == 0 || (ind != NULL && lb != NULL && ub != NULL) );
358 return SCIP_OKAY;
359}
360
361/** changes left and right hand sides of rows */
363 SCIP_LPIEXACT* lpi, /**< LP interface structure */
364 int nrows, /**< number of rows to change sides for */
365 int* ind, /**< row indices */
366 SCIP_RATIONAL** lhs, /**< new values for left hand sides */
367 SCIP_RATIONAL** rhs /**< new values for right hand sides */
368 )
369{ /*lint --e{715}*/
370 assert( lpi != NULL );
371 assert( ind != NULL );
372 assert( lhs != NULL );
373 assert( rhs != NULL );
374
375 return SCIP_OKAY;
376}
377
378/** changes a single coefficient */
380 SCIP_LPIEXACT* lpi, /**< LP interface structure */
381 int row, /**< row number of coefficient to change */
382 int col, /**< column number of coefficient to change */
383 SCIP_RATIONAL* newval /**< new value of coefficient */
384 )
385{ /*lint --e{715}*/
386 assert( lpi != NULL );
387 return SCIP_OKAY;
388}
389
390/** changes the objective sense */
392 SCIP_LPIEXACT* lpi, /**< LP interface structure */
393 SCIP_OBJSEN objsen /**< new objective sense */
394 )
395{ /*lint --e{715}*/
396 assert( lpi != NULL );
397 return SCIP_OKAY;
398}
399
400/** changes objective values of columns in the LP */
402 SCIP_LPIEXACT* lpi, /**< LP interface structure */
403 int ncols, /**< number of columns to change objective value for */
404 int* ind, /**< column indices to change objective value for */
405 SCIP_RATIONAL** obj /**< new objective values for columns */
406 )
407{ /*lint --e{715}*/
408 assert( lpi != NULL );
409 return SCIP_OKAY;
410}
411
412/**@} */
413
414
415/*
416 * Data Accessing Methods
417 */
418
419/**@name Data Accessing Methods */
420/**@{ */
421
422/** gets the number of rows in the LP */
424 SCIP_LPIEXACT* lpi, /**< LP interface structure */
425 int* nrows /**< pointer to store the number of rows */
426 )
427{ /*lint --e{715}*/
428 assert( lpi != NULL );
429 assert( nrows != NULL );
430 assert( lpi->nrows >= 0 );
431
432 *nrows = lpi->nrows;
433
434 return SCIP_OKAY;
435}
436
437/** gets the number of columns in the LP */
439 SCIP_LPIEXACT* lpi, /**< LP interface structure */
440 int* ncols /**< pointer to store the number of cols */
441 )
442{ /*lint --e{715}*/
443 assert( lpi != NULL );
444 assert( ncols != NULL );
445 assert( lpi->ncols >= 0 );
446
447 *ncols = lpi->ncols;
448
449 return SCIP_OKAY;
450}
451
452/** gets the number of nonzero elements in the LP constraint matrix */
454 SCIP_LPIEXACT* lpi, /**< LP interface structure */
455 int* nnonz /**< pointer to store the number of nonzeros */
456 )
457{ /*lint --e{715}*/
458 assert( nnonz != NULL );
459 assert( lpi != NULL );
460 errorMessage();
461 return SCIP_PLUGINNOTFOUND;
462}
463
464/** gets columns from LP problem object; the arrays have to be large enough to store all values
465 * Either both, lb and ub, have to be NULL, or both have to be non-NULL,
466 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
467 */
469 SCIP_LPIEXACT* lpi, /**< LP interface structure */
470 int firstcol, /**< first column to get from LP */
471 int lastcol, /**< last column to get from LP */
472 SCIP_RATIONAL** lb, /**< buffer to store the lower bound vector, or NULL */
473 SCIP_RATIONAL** ub, /**< buffer to store the upper bound vector, or NULL */
474 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
475 int* beg, /**< buffer to store start index of each column in ind- and val-array, or NULL */
476 int* ind, /**< buffer to store row indices of constraint matrix entries, or NULL */
477 SCIP_RATIONAL** val /**< buffer to store values of constraint matrix entries, or NULL */
478 )
479{ /*lint --e{715}*/
480 errorMessage();
481 return SCIP_PLUGINNOTFOUND;
482}
483
484/** gets rows from LP problem object; the arrays have to be large enough to store all values.
485 * Either both, lhs and rhs, have to be NULL, or both have to be non-NULL,
486 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
487 */
489 SCIP_LPIEXACT* lpi, /**< LP interface structure */
490 int firstrow, /**< first row to get from LP */
491 int lastrow, /**< last row to get from LP */
492 SCIP_RATIONAL** lhs, /**< buffer to store left hand side vector, or NULL */
493 SCIP_RATIONAL** rhs, /**< buffer to store right hand side vector, or NULL */
494 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
495 int* beg, /**< buffer to store start index of each row in ind- and val-array, or NULL */
496 int* ind, /**< buffer to store column indices of constraint matrix entries, or NULL */
497 SCIP_RATIONAL** val /**< buffer to store values of constraint matrix entries, or NULL */
498 )
499{ /*lint --e{715}*/
500 errorMessage();
501 return SCIP_PLUGINNOTFOUND;
502}
503
504/** gets column names */
506 SCIP_LPIEXACT* lpi, /**< LP interface structure */
507 int firstcol, /**< first column to get name from LP */
508 int lastcol, /**< last column to get name from LP */
509 char** colnames, /**< pointers to column names (of size at least lastcol-firstcol+1) or NULL if namestoragesize is zero */
510 char* namestorage, /**< storage for col names or NULL if namestoragesize is zero */
511 int namestoragesize, /**< size of namestorage (if 0, storageleft returns the storage needed) */
512 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
513 )
514{ /*lint --e{715}*/
515 assert( lpi != NULL );
516 assert( colnames != NULL || namestoragesize == 0 );
517 assert( namestorage != NULL || namestoragesize == 0 );
518 assert( namestoragesize >= 0 );
519 assert( storageleft != NULL );
520 errorMessage();
521 return SCIP_PLUGINNOTFOUND;
522}
523
524/** gets row names */
526 SCIP_LPIEXACT* lpi, /**< LP interface structure */
527 int firstrow, /**< first row to get name from LP */
528 int lastrow, /**< last row to get name from LP */
529 char** rownames, /**< pointers to row names (of size at least lastrow-firstrow+1) or NULL if namestoragesize is zero */
530 char* namestorage, /**< storage for row names or NULL if namestoragesize is zero */
531 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
532 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
533 )
534{ /*lint --e{715}*/
535 assert( lpi != NULL);
536 assert( rownames != NULL || namestoragesize == 0 );
537 assert( namestorage != NULL || namestoragesize == 0 );
538 assert( namestoragesize >= 0 );
539 assert( storageleft != NULL );
540 errorMessage();
541 return SCIP_PLUGINNOTFOUND;
542}
543
544/** gets objective sense of the LP */
546 SCIP_LPIEXACT* lpi, /**< LP interface structure */
547 SCIP_OBJSEN* objsen /**< pointer to store objective sense */
548 )
549{ /*lint --e{715}*/
550 errorMessage();
551 return SCIP_PLUGINNOTFOUND;
552}
553
554/** gets objective coefficients from LP problem object */
556 SCIP_LPIEXACT* lpi, /**< LP interface structure */
557 int firstcol, /**< first column to get objective coefficient for */
558 int lastcol, /**< last column to get objective coefficient for */
559 SCIP_RATIONAL** vals /**< array to store objective coefficients */
560 )
561{ /*lint --e{715}*/
562 assert( lpi != NULL );
563 assert( firstcol <= lastcol );
564 assert( vals != NULL );
565 errorMessage();
566 return SCIP_PLUGINNOTFOUND;
567}
568
569/** gets current bounds from LP problem object */
571 SCIP_LPIEXACT* lpi, /**< LP interface structure */
572 int firstcol, /**< first column to get objective value for */
573 int lastcol, /**< last column to get objective value for */
574 SCIP_RATIONAL** lbs, /**< array to store lower bound values, or NULL */
575 SCIP_RATIONAL** ubs /**< array to store upper bound values, or NULL */
576 )
577{ /*lint --e{715}*/
578 assert( lpi != NULL );
579 assert( firstcol <= lastcol );
580 errorMessage();
581 return SCIP_PLUGINNOTFOUND;
582}
583
584/** gets current row sides from LP problem object */
586 SCIP_LPIEXACT* lpi, /**< LP interface structure */
587 int firstrow, /**< first row to get sides for */
588 int lastrow, /**< last row to get sides for */
589 SCIP_RATIONAL** lhss, /**< array to store left hand side values, or NULL */
590 SCIP_RATIONAL** rhss /**< array to store right hand side values, or NULL */
591 )
592{ /*lint --e{715}*/
593 assert( lpi != NULL );
594 assert( firstrow <= lastrow );
595 errorMessage();
596 return SCIP_PLUGINNOTFOUND;
597}
598
599/** gets a single coefficient */
601 SCIP_LPIEXACT* lpi, /**< LP interface structure */
602 int row, /**< row number of coefficient */
603 int col, /**< column number of coefficient */
604 SCIP_RATIONAL* val /**< pointer to store the value of the coefficient */
605 )
606{ /*lint --e{715}*/
607 assert( lpi != NULL );
608 assert( val != NULL );
609 errorMessage();
610 return SCIP_PLUGINNOTFOUND;
611}
612
613/**@} */
614
615
616/*
617 * Solving Methods
618 */
619
620/**@name Solving Methods */
621/**@{ */
622
623/** calls primal simplex to solve the LP */
625 SCIP_LPIEXACT* lpi /**< LP interface structure */
626 )
627{ /*lint --e{715}*/
628 assert( lpi != NULL );
629 errorMessage();
630 return SCIP_PLUGINNOTFOUND;
631}
632
633/** calls dual simplex to solve the LP */
635 SCIP_LPIEXACT* lpi /**< LP interface structure */
636 )
637{ /*lint --e{715}*/
638 assert( lpi != NULL );
639 errorMessage();
640 return SCIP_PLUGINNOTFOUND;
641}
642
643/** calls barrier or interior point algorithm to solve the LP with crossover to simplex basis */
645 SCIP_LPIEXACT* lpi, /**< LP interface structure */
646 SCIP_Bool crossover /**< perform crossover */
647 )
648{ /*lint --e{715}*/
649 assert( lpi != NULL );
650 errorMessage();
651 return SCIP_PLUGINNOTFOUND;
652}
653
654/** start strong branching - call before any strongbranching */
656 SCIP_LPIEXACT* lpi /**< LP interface structure */
657 )
658{
659 /*lint --e{715}*/
660 assert( lpi != NULL );
661 errorMessage();
662 return SCIP_PLUGINNOTFOUND;
663}
664
665/** end strong branching - call after any strongbranching */
667 SCIP_LPIEXACT* lpi /**< LP interface structure */
668 )
669{
670 /*lint --e{715}*/
671 assert( lpi != NULL );
672 errorMessage();
673 return SCIP_PLUGINNOTFOUND;
674}
675
676/**@} */
677
678
679/*
680 * Solution Information Methods
681 */
682
683/**@name Solution Information Methods */
684/**@{ */
685
686/** returns whether a solve method was called after the last modification of the LP */
688 SCIP_LPIEXACT* lpi /**< LP interface structure */
689 )
690{ /*lint --e{715}*/
691 assert( lpi != NULL );
693 return FALSE;
694}
695
696/** gets information about primal and dual feasibility of the current LP solution
697 *
698 * The feasibility information is with respect to the last solving call and it is only relevant if SCIPlpiWasSolved()
699 * returns true. If the LP is changed, this information might be invalidated.
700 *
701 * Note that @param primalfeasible and @param dualfeasible should only return true if the solver has proved the
702 * respective LP to be feasible. Thus, the return values should be equal to the values of SCIPlpiIsPrimalFeasible() and
703 * SCIPlpiIsDualFeasible(), respectively. Note that if feasibility cannot be proved, they should return false (even if
704 * the problem might actually be feasible).
705 */
707 SCIP_LPIEXACT* lpi, /**< LP interface structure */
708 SCIP_Bool* primalfeasible, /**< pointer to store primal feasibility status */
709 SCIP_Bool* dualfeasible /**< pointer to store dual feasibility status */
710 )
711{ /*lint --e{715}*/
712 assert( lpi != NULL );
713 assert( primalfeasible != NULL );
714 assert( dualfeasible != NULL );
715 errorMessage();
716 return SCIP_PLUGINNOTFOUND;
717}
718
719/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point);
720 * this does not necessarily mean, that the solver knows and can return the primal ray
721 */
723 SCIP_LPIEXACT* lpi /**< LP interface structure */
724 )
725{ /*lint --e{715}*/
726 assert( lpi != NULL );
728 return FALSE;
729}
730
731/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point),
732 * and the solver knows and can return the primal ray
733 */
735 SCIP_LPIEXACT* lpi /**< LP interface structure */
736 )
737{ /*lint --e{715}*/
738 assert( lpi != NULL );
740 return FALSE;
741}
742
743/** returns TRUE iff LP is proven to be primal unbounded */
745 SCIP_LPIEXACT* lpi /**< LP interface structure */
746 )
747{ /*lint --e{715}*/
748 assert( lpi != NULL );
750 return FALSE;
751}
752
753/** returns TRUE iff LP is proven to be primal infeasible */
755 SCIP_LPIEXACT* lpi /**< LP interface structure */
756 )
757{ /*lint --e{715}*/
758 assert( lpi != NULL );
760 return FALSE;
761}
762
763/** returns TRUE iff LP is proven to be primal feasible */
765 SCIP_LPIEXACT* lpi /**< LP interface structure */
766 )
767{ /*lint --e{715}*/
768 assert( lpi != NULL );
770 return FALSE;
771}
772
773/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point);
774 * this does not necessarily mean, that the solver knows and can return the dual ray
775 */
777 SCIP_LPIEXACT* lpi /**< LP interface structure */
778 )
779{ /*lint --e{715}*/
780 assert( lpi != NULL );
782 return FALSE;
783}
784
785/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point),
786 * and the solver knows and can return the dual ray
787 */
789 SCIP_LPIEXACT* lpi /**< LP interface structure */
790 )
791{ /*lint --e{715}*/
792 assert( lpi != NULL );
794 return FALSE;
795}
796
797/** returns TRUE iff LP is dual unbounded */
799 SCIP_LPIEXACT* lpi /**< LP interface structure */
800 )
801{ /*lint --e{715}*/
802 assert( lpi != NULL );
804 return FALSE;
805}
806
807/** returns TRUE iff LP is dual infeasible */
809 SCIP_LPIEXACT* lpi /**< LP interface structure */
810 )
811{ /*lint --e{715}*/
812 assert( lpi != NULL );
814 return FALSE;
815}
816
817/** returns TRUE iff LP is proven to be dual feasible */
819 SCIP_LPIEXACT* lpi /**< LP interface structure */
820 )
821{ /*lint --e{715}*/
822 assert( lpi != NULL );
824 return FALSE;
825}
826
827/** returns TRUE iff LP was solved to optimality */
829 SCIP_LPIEXACT* lpi /**< LP interface structure */
830 )
831{ /*lint --e{715}*/
832 assert( lpi != NULL );
834 return FALSE;
835}
836
837/** returns TRUE iff the objective limit was reached */
839 SCIP_LPIEXACT* lpi /**< LP interface structure */
840 )
841{ /*lint --e{715}*/
842 assert( lpi != NULL );
844 return FALSE;
845}
846
847/** returns TRUE iff the iteration limit was reached */
849 SCIP_LPIEXACT* lpi /**< LP interface structure */
850 )
851{ /*lint --e{715}*/
852 assert( lpi != NULL );
854 return FALSE;
855}
856
857/** returns TRUE iff the time limit was reached */
859 SCIP_LPIEXACT* lpi /**< LP interface structure */
860 )
861{ /*lint --e{715}*/
862 assert( lpi != NULL );
864 return FALSE;
865}
866
867/** returns the internal solution status of the solver */
869 SCIP_LPIEXACT* lpi /**< LP interface structure */
870 )
871{ /*lint --e{715}*/
872 assert( lpi != NULL );
874 return FALSE;
875}
876
877/** tries to reset the internal status of the LP solver in order to ignore an instability of the last solving call */
879 SCIP_LPIEXACT* lpi, /**< LP interface structure */
880 SCIP_Bool* success /**< pointer to store, whether the instability could be ignored */
881 )
882{ /*lint --e{715}*/
883 assert( lpi != NULL );
884 assert( success != NULL );
885 errorMessage();
886 return SCIP_PLUGINNOTFOUND;
887}
888
889/** gets objective value of solution */
891 SCIP_LPIEXACT* lpi, /**< LP interface structure */
892 SCIP_RATIONAL* objval /**< stores the objective value */
893 )
894{ /*lint --e{715}*/
895 assert( lpi != NULL );
896 assert( objval != NULL );
897 errorMessage();
898 return SCIP_PLUGINNOTFOUND;
899}
900
901
902/** gets primal and dual solution vectors for feasible LPs
903 *
904 * Before calling this function, the caller must ensure that the LP has been solved to optimality, i.e., that
905 * SCIPlpiIsOptimal() returns true.
906 */
908 SCIP_LPIEXACT* lpi, /**< LP interface structure */
909 SCIP_RATIONAL* objval, /**< stores the objective value, may be NULL if not needed */
910 SCIP_RATIONAL** primsol, /**< primal solution vector, may be NULL if not needed */
911 SCIP_RATIONAL** dualsol, /**< dual solution vector, may be NULL if not needed */
912 SCIP_RATIONAL** activity, /**< row activity vector, may be NULL if not needed */
913 SCIP_RATIONAL** redcost /**< reduced cost vector, may be NULL if not needed */
914 )
915{ /*lint --e{715}*/
916 assert( lpi != NULL );
917 errorMessage();
918 return SCIP_PLUGINNOTFOUND;
919}
920
921
922/** gets primal ray for unbounded LPs */
924 SCIP_LPIEXACT* lpi, /**< LP interface structure */
925 SCIP_RATIONAL** ray /**< primal ray */
926 )
927{ /*lint --e{715}*/
928 assert( lpi != NULL );
929 errorMessage();
930 return SCIP_PLUGINNOTFOUND;
931}
932
933/** gets dual farkas proof for infeasibility */
935 SCIP_LPIEXACT* lpi, /**< LP interface structure */
936 SCIP_RATIONAL** dualfarkas /**< dual farkas row multipliers */
937 )
938{ /*lint --e{715}*/
939 assert( lpi != NULL );
940 errorMessage();
941 return SCIP_PLUGINNOTFOUND;
942}
943
944/** gets the number of LP iterations of the last solve call */
946 SCIP_LPIEXACT* lpi, /**< LP interface structure */
947 int* iterations /**< pointer to store the number of iterations of the last solve call */
948 )
949{ /*lint --e{715}*/
950 assert( lpi != NULL );
951 errorMessage();
952 return SCIP_PLUGINNOTFOUND;
953}
954
955/**@} */
956
957
958/*
959 * LP Basis Methods
960 */
961
962/**@name LP Basis Methods */
963/**@{ */
964
965
966/** gets current basis status for columns and rows; arrays must be large enough to store the basis status */
968 SCIP_LPIEXACT* lpi, /**< LP interface structure */
969 int* cstat, /**< array to store column basis status, or NULL */
970 int* rstat /**< array to store row basis status, or NULL */
971 )
972{ /*lint --e{715}*/
973 assert( lpi != NULL );
974 errorMessage();
975 return SCIP_PLUGINNOTFOUND;
976}
977
978/** sets current basis status for columns and rows */
980 SCIP_LPIEXACT* lpi, /**< LP interface structure */
981 int* cstat, /**< array with column basis status */
982 int* rstat /**< array with row basis status */
983 )
984{ /*lint --e{715}*/
985 assert( lpi != NULL );
986 assert( cstat != NULL );
987 assert( rstat != NULL );
988 errorMessage();
989 return SCIP_PLUGINNOTFOUND;
990}
991
992/** returns the indices of the basic columns and rows; basic column n gives value n, basic row m gives value -1-m */
994 SCIP_LPIEXACT* lpi, /**< LP interface structure */
995 int* bind /**< pointer to store basis indices ready to keep number of rows entries */
996 )
997{ /*lint --e{715}*/
998 assert( lpi != NULL );
999 assert( bind != NULL );
1000 errorMessage();
1001 return SCIP_PLUGINNOTFOUND;
1002}
1003
1004/** get row of inverse basis matrix B^-1
1005 *
1006 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1007 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1008 * see also the explanation in lpi.h.
1009 */
1011 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1012 int r, /**< row number */
1013 SCIP_RATIONAL** coef, /**< pointer to store the coefficients of the row */
1014 int* inds, /**< array to store the non-zero indices, or NULL */
1015 int* ninds /**< pointer to store the number of non-zero indices, or NULL
1016 * (-1: if we do not store sparsity information) */
1017 )
1018{ /*lint --e{715}*/
1019 assert( lpi != NULL );
1020 assert( coef != NULL );
1021 errorMessage();
1022 return SCIP_PLUGINNOTFOUND;
1023}
1024
1025/** get column of inverse basis matrix B^-1
1026 *
1027 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
1028 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
1029 * see also the explanation in lpi.h.
1030 */
1032 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1033 int c, /**< column number of B^-1; this is NOT the number of the column in the LP;
1034 * you have to call SCIPlpiExactGetBasisInd() to get the array which links the
1035 * B^-1 column numbers to the row and column numbers of the LP!
1036 * c must be between 0 and nrows-1, since the basis has the size
1037 * nrows * nrows */
1038 SCIP_RATIONAL** coef, /**< pointer to store the coefficients of the column */
1039 int* inds, /**< array to store the non-zero indices, or NULL */
1040 int* ninds /**< pointer to store the number of non-zero indices, or NULL
1041 * (-1: if we do not store sparsity information) */
1042 )
1043{ /*lint --e{715}*/
1044 assert( lpi != NULL );
1045 assert( coef != NULL );
1046 errorMessage();
1047 return SCIP_PLUGINNOTFOUND;
1048}
1049
1050/**@} */
1051
1052
1053/*
1054 * LP State Methods
1055 */
1056
1057/**@name LP State Methods */
1058/**@{ */
1059
1060/** stores LPi state (like basis information) into lpistate object */
1062 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1063 BMS_BLKMEM* blkmem, /**< block memory */
1064 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
1065 )
1066{ /*lint --e{715}*/
1067 assert( lpi != NULL );
1068 assert( blkmem != NULL );
1069 assert( lpistate != NULL );
1070 assert( blkmem != NULL );
1071 errorMessage();
1072 return SCIP_PLUGINNOTFOUND;
1073}
1074
1075/** loads LPi state (like basis information) into solver; note that the LP might have been extended with additional
1076 * columns and rows since the state was stored with SCIPlpiExactGetState()
1077 */
1079 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1080 BMS_BLKMEM* blkmem, /**< block memory */
1081 SCIP_LPISTATE* lpistate /**< LPi state information (like basis information), or NULL */
1082 )
1083{ /*lint --e{715}*/
1084 assert( lpi != NULL );
1085 assert( blkmem != NULL );
1086 assert( lpistate != NULL );
1087 errorMessage();
1088 return SCIP_PLUGINNOTFOUND;
1089}
1090
1091/** clears current LPi state (like basis information) of the solver */
1093 SCIP_LPIEXACT* lpi /**< LP interface structure */
1094 )
1095{ /*lint --e{715}*/
1096 assert( lpi != NULL );
1097 return SCIP_OKAY;
1098}
1099
1100/** frees LPi state information */
1102 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1103 BMS_BLKMEM* blkmem, /**< block memory */
1104 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
1105 )
1106{ /*lint --e{715}*/
1107 assert( lpi != NULL );
1108 assert( lpistate != NULL );
1109 assert( blkmem != NULL );
1110 return SCIP_OKAY;
1111}
1112
1113/** checks, whether the given LP state contains simplex basis information */
1115 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1116 SCIP_LPISTATE* lpistate /**< LP state information (like basis information), or NULL */
1117 )
1118{ /*lint --e{715}*/
1119 assert( lpi != NULL );
1121 return FALSE;
1122}
1123
1124/** reads LP state (like basis information from a file */
1126 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1127 const char* fname /**< file name */
1128 )
1129{ /*lint --e{715}*/
1130 assert( lpi != NULL );
1131 assert( fname != NULL );
1132 errorMessage();
1133 return SCIP_PLUGINNOTFOUND;
1134}
1135
1136/** writes LPi state (i.e. basis information) to a file */
1138 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1139 const char* fname /**< file name */
1140 )
1141{ /*lint --e{715}*/
1142 assert( lpi != NULL );
1143 assert( fname != NULL );
1144 errorMessage();
1145 return SCIP_PLUGINNOTFOUND;
1146}
1147
1148/**@} */
1149
1150
1151/*
1152 * Parameter Methods
1153 */
1154
1155/**@name Parameter Methods */
1156/**@{ */
1157
1158/** gets integer parameter of LP */
1160 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1161 SCIP_LPPARAM type, /**< parameter number */
1162 int* ival /**< buffer to store the parameter value */
1163 )
1164{ /*lint --e{715}*/
1165 assert( lpi != NULL );
1166 assert( ival != NULL );
1167 return SCIP_PARAMETERUNKNOWN;
1168}
1169
1170/** sets integer parameter of LP */
1172 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1173 SCIP_LPPARAM type, /**< parameter number */
1174 int ival /**< parameter value */
1175 )
1176{ /*lint --e{715}*/
1177 assert( lpi != NULL );
1178 return SCIP_PARAMETERUNKNOWN;
1179}
1180
1181/** gets floating point parameter of LP */
1183 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1184 SCIP_LPPARAM type, /**< parameter number */
1185 SCIP_Real* dval /**< buffer to store the parameter value */
1186 )
1187{ /*lint --e{715}*/
1188 assert( lpi != NULL );
1189 assert( dval != NULL );
1190 return SCIP_PARAMETERUNKNOWN;
1191}
1192
1193/** sets floating point parameter of LP */
1195 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1196 SCIP_LPPARAM type, /**< parameter number */
1197 SCIP_Real dval /**< parameter value */
1198 )
1199{ /*lint --e{715}*/
1200 assert( lpi != NULL );
1201 return SCIP_PARAMETERUNKNOWN;
1202}
1203
1204/**@} */
1205
1206
1207
1208/*
1209 * Numerical Methods
1210 */
1211
1212/**@name Numerical Methods */
1213/**@{ */
1214
1215/** returns value treated as infinity in the LP solver */
1217 SCIP_LPIEXACT* lpi /**< LP interface structure */
1218 )
1219{ /*lint --e{715}*/
1220 assert( lpi != NULL );
1221 return LPIINFINITY;
1222}
1223
1224/** checks if given value is treated as infinity in the LP solver */
1226 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1227 SCIP_Real val /**< the value */
1228 )
1229{ /*lint --e{715}*/
1230 assert( lpi != NULL );
1231 if( val >= LPIINFINITY )
1232 return TRUE;
1233 return FALSE;
1234}
1235
1236/**@} */
1237
1238
1239/*
1240 * File Interface Methods
1241 */
1242
1243/**@name File Interface Methods */
1244/**@{ */
1245
1246/** reads LP from a file */
1248 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1249 const char* fname /**< file name */
1250 )
1251{ /*lint --e{715}*/
1252 assert( lpi != NULL );
1253 assert( fname != NULL );
1254 errorMessage();
1255 return SCIP_PLUGINNOTFOUND;
1256}
1257
1258/** writes LP to a file */
1260 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1261 const char* fname /**< file name */
1262 )
1263{ /*lint --e{715}*/
1264 assert( lpi != NULL );
1265 errorMessage();
1266 return SCIP_PLUGINNOTFOUND;
1267}
1268
1269/**@} */
SCIP_Real * r
Definition: circlepacking.c:59
#define NULL
Definition: def.h:248
#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
void * SCIPlpiExactGetSolverPointer(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactHasDualRay(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactSetRealpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, SCIP_Real dval)
SCIP_RETCODE SCIPlpiExactSetBase(SCIP_LPIEXACT *lpi, int *cstat, int *rstat)
SCIP_RETCODE SCIPlpiExactReadState(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_Bool SCIPlpiExactHasStateBasis(SCIP_LPIEXACT *lpi, SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiExactGetObj(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **vals)
SCIP_RETCODE SCIPlpiExactStartStrongbranch(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactIgnoreInstability(SCIP_LPIEXACT *lpi, SCIP_Bool *success)
SCIP_RETCODE SCIPlpiExactGetObjval(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *objval)
SCIP_Bool SCIPlpiExactIsDualUnbounded(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactWriteLP(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_Bool SCIPlpiExactHasPrimalRay(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactExistsDualRay(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetDualfarkas(SCIP_LPIEXACT *lpi, SCIP_RATIONAL **dualfarkas)
SCIP_RETCODE SCIPlpiExactEndStrongbranch(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactSolveDual(SCIP_LPIEXACT *lpi)
const char * SCIPlpiExactGetSolverDesc(void)
SCIP_RETCODE SCIPlpiExactChgObjsen(SCIP_LPIEXACT *lpi, SCIP_OBJSEN objsen)
SCIP_RETCODE SCIPlpiExactSetIntpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, int ival)
SCIP_RETCODE SCIPlpiExactWriteState(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_RETCODE SCIPlpiExactChgCoef(SCIP_LPIEXACT *lpi, int row, int col, SCIP_RATIONAL *newval)
SCIP_Bool SCIPlpiExactWasSolved(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsPrimalUnbounded(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetSides(SCIP_LPIEXACT *lpi, int firstrow, int lastrow, SCIP_RATIONAL **lhss, SCIP_RATIONAL **rhss)
const char * SCIPlpiExactGetSolverName(void)
Definition: lpiexact_none.c:92
SCIP_RETCODE SCIPlpiExactGetCols(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub, int *nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_Bool SCIPlpiExactIsPrimalInfeasible(SCIP_LPIEXACT *lpi)
SCIP_Real SCIPlpiExactInfinity(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetRows(SCIP_LPIEXACT *lpi, int firstrow, int lastrow, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs, int *nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_RETCODE SCIPlpiExactGetSolFeasibility(SCIP_LPIEXACT *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
SCIP_RETCODE SCIPlpiExactGetBInvCol(SCIP_LPIEXACT *lpi, int c, SCIP_RATIONAL **coef, int *inds, int *ninds)
SCIP_Bool SCIPlpiExactExistsPrimalRay(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsInfinity(SCIP_LPIEXACT *lpi, SCIP_Real val)
SCIP_RETCODE SCIPlpiExactAddRows(SCIP_LPIEXACT *lpi, int nrows, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs, char **rownames, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_RETCODE SCIPlpiExactCreate(SCIP_LPIEXACT **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_Bool SCIPlpiExactIsIterlimExc(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactLoadColLP(SCIP_LPIEXACT *lpi, SCIP_OBJSEN objsen, int ncols, SCIP_RATIONAL **obj, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub, char **colnames, int nrows, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs, char **rownames, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_Bool SCIPlpiExactIsPrimalFeasible(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsDualFeasible(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactReadLP(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_RETCODE SCIPlpiExactGetBasisInd(SCIP_LPIEXACT *lpi, int *bind)
SCIP_RETCODE SCIPlpiExactGetObjsen(SCIP_LPIEXACT *lpi, SCIP_OBJSEN *objsen)
SCIP_Bool SCIPlpiExactIsOptimal(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetRowNames(SCIP_LPIEXACT *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_RETCODE SCIPlpiExactAddCols(SCIP_LPIEXACT *lpi, int ncols, SCIP_RATIONAL **obj, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub, char **colnames, int nnonz, int *beg, int *ind, SCIP_RATIONAL **val)
SCIP_RETCODE SCIPlpiExactGetBase(SCIP_LPIEXACT *lpi, int *cstat, int *rstat)
SCIP_RETCODE SCIPlpiExactDelCols(SCIP_LPIEXACT *lpi, int firstcol, int lastcol)
SCIP_RETCODE SCIPlpiExactChgObj(SCIP_LPIEXACT *lpi, int ncols, int *ind, SCIP_RATIONAL **obj)
SCIP_RETCODE SCIPlpiExactGetPrimalRay(SCIP_LPIEXACT *lpi, SCIP_RATIONAL **ray)
SCIP_RETCODE SCIPlpiExactGetBounds(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, SCIP_RATIONAL **lbs, SCIP_RATIONAL **ubs)
int SCIPlpiExactGetInternalStatus(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetCoef(SCIP_LPIEXACT *lpi, int row, int col, SCIP_RATIONAL *val)
SCIP_RETCODE SCIPlpiExactGetColNames(SCIP_LPIEXACT *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
SCIP_RETCODE SCIPlpiExactClear(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetNNonz(SCIP_LPIEXACT *lpi, int *nnonz)
SCIP_RETCODE SCIPlpiExactFree(SCIP_LPIEXACT **lpi)
SCIP_Bool SCIPlpiExactIsDualInfeasible(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsObjlimExc(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactClearState(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetNCols(SCIP_LPIEXACT *lpi, int *ncols)
SCIP_RETCODE SCIPlpiExactSolveBarrier(SCIP_LPIEXACT *lpi, SCIP_Bool crossover)
SCIP_RETCODE SCIPlpiExactGetBInvRow(SCIP_LPIEXACT *lpi, int r, SCIP_RATIONAL **coef, int *inds, int *ninds)
SCIP_RETCODE SCIPlpiExactChgSides(SCIP_LPIEXACT *lpi, int nrows, int *ind, SCIP_RATIONAL **lhs, SCIP_RATIONAL **rhs)
SCIP_RETCODE SCIPlpiExactGetState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPlpiExactDelRows(SCIP_LPIEXACT *lpi, int firstrow, int lastrow)
SCIP_RETCODE SCIPlpiExactGetNRows(SCIP_LPIEXACT *lpi, int *nrows)
SCIP_Bool SCIPlpiExactIsTimelimExc(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetRealpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
SCIP_RETCODE SCIPlpiExactChgBounds(SCIP_LPIEXACT *lpi, int ncols, int *ind, SCIP_RATIONAL **lb, SCIP_RATIONAL **ub)
SCIP_RETCODE SCIPlpiExactFreeState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPlpiExactDelRowset(SCIP_LPIEXACT *lpi, int *dstat)
SCIP_RETCODE SCIPlpiExactGetSol(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *objval, SCIP_RATIONAL **primsol, SCIP_RATIONAL **dualsol, SCIP_RATIONAL **activity, SCIP_RATIONAL **redcost)
SCIP_RETCODE SCIPlpiExactSolvePrimal(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetIntpar(SCIP_LPIEXACT *lpi, SCIP_LPPARAM type, int *ival)
SCIP_RETCODE SCIPlpiExactSetState(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE *lpistate)
SCIP_RETCODE SCIPlpiExactGetIterations(SCIP_LPIEXACT *lpi, int *iterations)
interface methods for specific exact LP solvers
static void errorMessage(void)
Definition: lpiexact_none.c:72
#define LPINAME
Definition: lpiexact_none.c:37
static void errorMessageAbort(void)
Definition: lpiexact_none.c:62
#define LPIINFINITY
Definition: lpiexact_none.c:38
#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
enum SCIP_LPParam SCIP_LPPARAM
Definition: type_lpi.h:73
enum SCIP_ObjSen SCIP_OBJSEN
Definition: type_lpi.h:45
@ 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