Scippy

SCIP

Solving Constraint Integer Programs

lpiexact.h
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.h
26 * @ingroup LPIEXACTS
27 * @brief interface methods for specific exact LP solvers
28 * @author Daniel Espinoza
29 * @author Kati Wolter
30 * @author Marc Pfetsch
31 * @author Leon Eifler
32 */
33
34/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
35
36#ifndef __SCIP_LPIEXACT_H__
37#define __SCIP_LPIEXACT_H__
38
39#include "scip/def.h"
41#include "scip/type_retcode.h"
43#include "scip/rational.h"
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49/**@addtogroup LPIEXACTS
50 *
51 * This file specifies a generic interface for numerically exact LP solvers used by SCIP to create, modify, and solve
52 * linear programs with rational input data of the form
53 *
54 * ```
55 * min/max obj * x
56 * lhs <= A * x <= rhs
57 * lb <= x <= ub
58 * ```
59 *
60 * and query information about the solution. It is mainly a numerically exact analogue of the standard floating-point
61 * \ref LPIS, so we refer to this documentation for further details on the design of the interface.
62 *
63 * @{
64 */
65
66/*
67 * Miscellaneous Methods
68 */
69
70/**@name Miscellaneous Methods */
71/**@{ */
72
73/** gets name and version of LP solver */
74SCIP_EXPORT
76 void
77 );
78
79/** gets description of LP solver (developer, webpage, ...) */
80SCIP_EXPORT
82 void
83 );
84
85/** gets name and version of external package required for LP solver */
86SCIP_EXPORT
88 void
89 );
90
91/** prints additional lpiexact internal info */
92SCIP_EXPORT
94 SCIP_LPIEXACT* lpi /**< LP interface structure */
95 );
96
97/** gets description of external package required for LP solver (developer, webpage, ...) */
98SCIP_EXPORT
100 void
101 );
102
103/** gets pointer for LP solver - use only with great care
104 *
105 * The behavior of this function depends on the solver and its use is
106 * therefore only recommended if you really know what you are
107 * doing. In general, it returns a pointer to the LP solver object.
108 */
109SCIP_EXPORT
111 SCIP_LPIEXACT* lpi /**< pointer to an LP interface structure */
112 );
113
114/**@} */
115
116
117
118/*
119 * LPI Creation and Destruction Methods
120 */
121
122/**@name LPI Creation and Destruction Methods */
123/**@{ */
124
125/** calls initializator of LP solver; this is mainly needed for defining constants in extended and rational precision */
126SCIP_EXPORT
128 void
129 );
130
131/** calls deinitializator of LP solver; this is needed for freeing all internal data of the solver, like constants in
132 * extended and rational precision
133 */
134SCIP_EXPORT
136 void
137 );
138
139/** creates an LP problem object */
140SCIP_EXPORT
142 SCIP_LPIEXACT** lpi, /**< pointer to an LP interface structure */
143 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler to use for printing messages, or NULL */
144 const char* name, /**< problem name */
145 SCIP_OBJSEN objsen /**< objective sense */
146 );
147
148/** deletes an LP problem object */
149SCIP_EXPORT
151 SCIP_LPIEXACT** lpi /**< pointer to an LP interface structure */
152 );
153
154/**@} */
155
156
157
158/*
159 * Modification Methods
160 */
161
162/**@name Modification Methods */
163/**@{ */
164
165/** copies LP data with column matrix into LP solver */
166SCIP_EXPORT
168 SCIP_LPIEXACT* lpi, /**< LP interface structure */
169 SCIP_OBJSEN objsen, /**< objective sense */
170 int ncols, /**< number of columns */
171 SCIP_RATIONAL** obj, /**< objective function values of columns */
172 SCIP_RATIONAL** lb, /**< lower bounds of columns */
173 SCIP_RATIONAL** ub, /**< upper bounds of columns */
174 char** colnames, /**< column names, or NULL */
175 int nrows, /**< number of rows */
176 SCIP_RATIONAL** lhs, /**< left hand sides of rows */
177 SCIP_RATIONAL** rhs, /**< right hand sides of rows */
178 char** rownames, /**< row names, or NULL */
179 int nnonz, /**< number of nonzero elements in the constraint matrix */
180 int* beg, /**< start index of each column in ind- and val-array */
181 int* ind, /**< row indices of constraint matrix entries */
182 SCIP_RATIONAL** val /**< values of constraint matrix entries */
183 );
184
185/** adds columns to the LP */
186SCIP_EXPORT
188 SCIP_LPIEXACT* lpi, /**< LP interface structure */
189 int ncols, /**< number of columns to be added */
190 SCIP_RATIONAL** obj, /**< objective function values of new columns */
191 SCIP_RATIONAL** lb, /**< lower bounds of new columns */
192 SCIP_RATIONAL** ub, /**< upper bounds of new columns */
193 char** colnames, /**< column names, or NULL */
194 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
195 int* beg, /**< start index of each column in ind- and val-array, or NULL if nnonz == 0 */
196 int* ind, /**< row indices of constraint matrix entries, or NULL if nnonz == 0 */
197 SCIP_RATIONAL** val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
198 );
199
200/** deletes all columns in the given range from LP */
201SCIP_EXPORT
203 SCIP_LPIEXACT* lpi, /**< LP interface structure */
204 int firstcol, /**< first column to be deleted */
205 int lastcol /**< last column to be deleted */
206 );
207
208/** deletes columns from SCIP_LP; the new position of a column must not be greater that its old position */
209SCIP_EXPORT
211 SCIP_LPIEXACT* lpi, /**< LP interface structure */
212 int* dstat /**< deletion status of columns
213 * input: 1 if column should be deleted, 0 if not
214 * output: new position of column, -1 if column was deleted */
215 );
216
217/** adds rows to the LP */
218SCIP_EXPORT
220 SCIP_LPIEXACT* lpi, /**< LP interface structure */
221 int nrows, /**< number of rows to be added */
222 SCIP_RATIONAL** lhs, /**< left hand sides of new rows */
223 SCIP_RATIONAL** rhs, /**< right hand sides of new rows */
224 char** rownames, /**< row names, or NULL */
225 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
226 int* beg, /**< start index of each row in ind- and val-array, or NULL if nnonz == 0 */
227 int* ind, /**< column indices of constraint matrix entries, or NULL if nnonz == 0 */
228 SCIP_RATIONAL** val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
229 );
230
231/** deletes all rows in the given range from LP */
232SCIP_EXPORT
234 SCIP_LPIEXACT* lpi, /**< LP interface structure */
235 int firstrow, /**< first row to be deleted */
236 int lastrow /**< last row to be deleted */
237 );
238
239/** deletes rows from SCIP_LP; the new position of a row must not be greater that its old position */
240SCIP_EXPORT
242 SCIP_LPIEXACT* lpi, /**< LP interface structure */
243 int* dstat /**< deletion status of rows
244 * input: 1 if row should be deleted, 0 if not
245 * output: new position of row, -1 if row was deleted */
246 );
247
248/** clears the whole LP */
249SCIP_EXPORT
251 SCIP_LPIEXACT* lpi /**< LP interface structure */
252 );
253
254/** changes lower and upper bounds of columns */
255SCIP_EXPORT
257 SCIP_LPIEXACT* lpi, /**< LP interface structure */
258 int ncols, /**< number of columns to change bounds for */
259 int* ind, /**< column indices */
260 SCIP_RATIONAL** lb, /**< values for the new lower bounds, or NULL */
261 SCIP_RATIONAL** ub /**< values for the new upper bounds, or NULL */
262 );
263
264/** changes left and right hand sides of rows */
265SCIP_EXPORT
267 SCIP_LPIEXACT* lpi, /**< LP interface structure */
268 int nrows, /**< number of rows to change sides for */
269 int* ind, /**< row indices */
270 SCIP_RATIONAL** lhs, /**< new values for left hand sides */
271 SCIP_RATIONAL** rhs /**< new values for right hand sides */
272 );
273
274/** changes a single coefficient */
275SCIP_EXPORT
277 SCIP_LPIEXACT* lpi, /**< LP interface structure */
278 int row, /**< row number of coefficient to change */
279 int col, /**< column number of coefficient to change */
280 SCIP_RATIONAL* newval /**< new value of coefficient */
281 );
282
283/** changes the objective sense */
284SCIP_EXPORT
286 SCIP_LPIEXACT* lpi, /**< LP interface structure */
287 SCIP_OBJSEN objsen /**< new objective sense */
288 );
289
290/** changes objective values of columns in the LP */
291SCIP_EXPORT
293 SCIP_LPIEXACT* lpi, /**< LP interface structure */
294 int ncols, /**< number of columns to change objective value for */
295 int* ind, /**< column indices to change objective value for */
296 SCIP_RATIONAL** obj /**< new objective values for columns */
297 );
298
299/** multiplies a row with a non-zero scalar; for negative scalars, the row's sense is switched accordingly */
300SCIP_EXPORT
302 SCIP_LPIEXACT* lpi, /**< LP interface structure */
303 int row, /**< row number to scale */
304 SCIP_RATIONAL* scaleval /**< scaling multiplier */
305 );
306
307/** multiplies a column with a non-zero scalar; the objective value is multiplied with the scalar, and the bounds
308 * are divided by the scalar; for negative scalars, the column's bounds are switched
309 */
310SCIP_EXPORT
312 SCIP_LPIEXACT* lpi, /**< LP interface structure */
313 int col, /**< column number to scale */
314 SCIP_RATIONAL* scaleval /**< scaling multiplier */
315 );
316
317/**@} */
318
319
320
321/*
322 * Data Accessing Methods
323 */
324
325/**@name Data Accessing Methods */
326/**@{ */
327
328/** gets the number of rows in the LP */
329SCIP_EXPORT
331 SCIP_LPIEXACT* lpi, /**< LP interface structure */
332 int* nrows /**< pointer to store the number of rows */
333 );
334
335/** gets the number of columns in the LP */
336SCIP_EXPORT
338 SCIP_LPIEXACT* lpi, /**< LP interface structure */
339 int* ncols /**< pointer to store the number of cols */
340 );
341
342/** gets the objective sense of the LP */
343SCIP_EXPORT
345 SCIP_LPIEXACT* lpi, /**< LP interface structure */
346 SCIP_OBJSEN* objsen /**< pointer to store objective sense */
347 );
348
349/** gets the number of nonzero elements in the LP constraint matrix */
350SCIP_EXPORT
352 SCIP_LPIEXACT* lpi, /**< LP interface structure */
353 int* nnonz /**< pointer to store the number of nonzeros */
354 );
355
356/** gets columns from LP problem object; the arrays have to be large enough to store all values;
357 * Either both, lb and ub, have to be NULL, or both have to be non-NULL,
358 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
359 */
360SCIP_EXPORT
362 SCIP_LPIEXACT* lpi, /**< LP interface structure */
363 int firstcol, /**< first column to get from LP */
364 int lastcol, /**< last column to get from LP */
365 SCIP_RATIONAL** lb, /**< buffer to store the lower bound vector, or NULL */
366 SCIP_RATIONAL** ub, /**< buffer to store the upper bound vector, or NULL */
367 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
368 int* beg, /**< buffer to store start index of each column in ind- and val-array, or NULL */
369 int* ind, /**< buffer to store column indices of constraint matrix entries, or NULL */
370 SCIP_RATIONAL** val /**< buffer to store values of constraint matrix entries, or NULL */
371 );
372
373/** gets rows from LP problem object; the arrays have to be large enough to store all values.
374 * Either both, lhs and rhs, have to be NULL, or both have to be non-NULL,
375 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
376 */
377SCIP_EXPORT
379 SCIP_LPIEXACT* lpi, /**< LP interface structure */
380 int firstrow, /**< first row to get from LP */
381 int lastrow, /**< last row to get from LP */
382 SCIP_RATIONAL** lhs, /**< buffer to store left hand side vector, or NULL */
383 SCIP_RATIONAL** rhs, /**< buffer to store right hand side vector, or NULL */
384 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
385 int* beg, /**< buffer to store start index of each row in ind- and val-array, or NULL */
386 int* ind, /**< buffer to store row indices of constraint matrix entries, or NULL */
387 SCIP_RATIONAL** val /**< buffer to store values of constraint matrix entries, or NULL */
388 );
389
390/** gets column names */
391SCIP_EXPORT
393 SCIP_LPIEXACT* lpi, /**< LP interface structure */
394 int firstcol, /**< first column to get name from LP */
395 int lastcol, /**< last column to get name from LP */
396 char** colnames, /**< pointers to column names (of size at least lastcol-firstcol+1) or NULL if namestoragesize is zero */
397 char* namestorage, /**< storage for col names or NULL if namestoragesize is zero */
398 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
399 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
400 );
401
402/** gets row names */
403SCIP_EXPORT
405 SCIP_LPIEXACT* lpi, /**< LP interface structure */
406 int firstrow, /**< first row to get name from LP */
407 int lastrow, /**< last row to get name from LP */
408 char** rownames, /**< pointers to row names (of size at least lastrow-firstrow+1) or NULL if namestoragesize is zero */
409 char* namestorage, /**< storage for row names or NULL if namestoragesize is zero */
410 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
411 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
412 );
413
414/** gets objective coefficients from LP problem object */
415SCIP_EXPORT
417 SCIP_LPIEXACT* lpi, /**< LP interface structure */
418 int firstcol, /**< first column to get objective coefficient for */
419 int lastcol, /**< last column to get objective coefficient for */
420 SCIP_RATIONAL** vals /**< array to store objective coefficients */
421 );
422
423/** gets current bounds from LP problem object */
424SCIP_EXPORT
426 SCIP_LPIEXACT* lpi, /**< LP interface structure */
427 int firstcol, /**< first column to get bounds for */
428 int lastcol, /**< last column to get bounds for */
429 SCIP_RATIONAL** lbs, /**< array to store lower bound values, or NULL */
430 SCIP_RATIONAL** ubs /**< array to store upper bound values, or NULL */
431 );
432
433/** gets current row sides from LP problem object */
434SCIP_EXPORT
436 SCIP_LPIEXACT* lpi, /**< LP interface structure */
437 int firstrow, /**< first row to get sides for */
438 int lastrow, /**< last row to get sides for */
439 SCIP_RATIONAL** lhss, /**< array to store left hand side values, or NULL */
440 SCIP_RATIONAL** rhss /**< array to store right hand side values, or NULL */
441 );
442
443/** gets a single coefficient */
444SCIP_EXPORT
446 SCIP_LPIEXACT* lpi, /**< LP interface structure */
447 int row, /**< row number of coefficient */
448 int col, /**< column number of coefficient */
449 SCIP_RATIONAL* val /**< pointer to store the value of the coefficient */
450 );
451
452/**@} */
453
454
455
456/*
457 * Solving Methods
458 */
459
460/**@name Solving Methods */
461/**@{ */
462
463/** calls primal simplex to solve the LP */
464SCIP_EXPORT
466 SCIP_LPIEXACT* lpi /**< LP interface structure */
467 );
468
469/** calls dual simplex to solve the LP */
470SCIP_EXPORT
472 SCIP_LPIEXACT* lpi /**< LP interface structure */
473 );
474
475/** calls barrier or interior point algorithm to solve the LP with crossover to simplex basis */
476SCIP_EXPORT
478 SCIP_LPIEXACT* lpi, /**< LP interface structure */
479 SCIP_Bool crossover /**< perform crossover */
480 );
481
482/** start strong branching - call before any strong branching */
483SCIP_EXPORT
485 SCIP_LPIEXACT* lpi /**< LP interface structure */
486 );
487
488/** end strong branching - call after any strong branching */
489SCIP_EXPORT
491 SCIP_LPIEXACT* lpi /**< LP interface structure */
492 );
493
494/** performs strong branching iterations on all candidates */
495SCIP_EXPORT
497 SCIP_LPIEXACT* lpi, /**< LP interface structure */
498 int col, /**< column to apply strong branching on */
499 const SCIP_RATIONAL* psol, /**< current primal solution value of column */
500 int itlim, /**< iteration limit for strong branchings */
501 SCIP_RATIONAL* down, /**< stores dual bound after branching column down */
502 SCIP_RATIONAL* up, /**< stores dual bound after branching column up */
503 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
504 * otherwise, it can only be used as an estimate value */
505 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
506 * otherwise, it can only be used as an estimate value */
507 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
508 );
509
510
511/* TODO: Do we need the other strong branchiing methods? */
512
513/**@} */
514
515
516
517/*
518 * Solution Information Methods
519 */
520
521/**@name Solution Information Methods */
522/**@{ */
523
524/** returns whether a solve method was called after the last modification of the LP */
525SCIP_EXPORT
527 SCIP_LPIEXACT* lpi /**< LP interface structure */
528 );
529
530/** gets information about primal and dual feasibility of the current LP solution */
531SCIP_EXPORT
533 SCIP_LPIEXACT* lpi, /**< LP interface structure */
534 SCIP_Bool* primalfeasible, /**< stores primal feasibility status */
535 SCIP_Bool* dualfeasible /**< stores dual feasibility status */
536 );
537
538/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point);
539 * this does not necessarily mean, that the solver knows and can return the primal ray
540 */
541SCIP_EXPORT
543 SCIP_LPIEXACT* lpi /**< LP interface structure */
544 );
545
546/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point),
547 * and the solver knows and can return the primal ray
548 */
549SCIP_EXPORT
551 SCIP_LPIEXACT* lpi /**< LP interface structure */
552 );
553
554/** returns TRUE iff LP is proven to be primal unbounded */
555SCIP_EXPORT
557 SCIP_LPIEXACT* lpi /**< LP interface structure */
558 );
559
560/** returns TRUE iff LP is proven to be primal infeasible */
561SCIP_EXPORT
563 SCIP_LPIEXACT* lpi /**< LP interface structure */
564 );
565
566/** returns TRUE iff LP is proven to be primal feasible */
567SCIP_EXPORT
569 SCIP_LPIEXACT* lpi /**< LP interface structure */
570 );
571
572/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point);
573 * this does not necessarily mean, that the solver knows and can return the dual ray
574 */
575SCIP_EXPORT
577 SCIP_LPIEXACT* lpi /**< LP interface structure */
578 );
579
580/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point),
581 * and the solver knows and can return the dual ray
582 */
583SCIP_EXPORT
585 SCIP_LPIEXACT* lpi /**< LP interface structure */
586 );
587
588/** returns TRUE iff LP is proven to be dual unbounded */
589SCIP_EXPORT
591 SCIP_LPIEXACT* lpi /**< LP interface structure */
592 );
593
594/** returns TRUE iff LP is proven to be dual infeasible */
595SCIP_EXPORT
597 SCIP_LPIEXACT* lpi /**< LP interface structure */
598 );
599
600/** returns TRUE iff LP is proven to be dual feasible */
601SCIP_EXPORT
603 SCIP_LPIEXACT* lpi /**< LP interface structure */
604 );
605
606/** returns TRUE iff LP was solved to optimality */
607SCIP_EXPORT
609 SCIP_LPIEXACT* lpi /**< LP interface structure */
610 );
611
612/** returns TRUE iff current LP solution is stable
613 *
614 * This function should return true if the solution is reliable, i.e., feasible and optimal (or proven
615 * infeasible/unbounded) with respect to the original problem. The optimality status might be with respect to a scaled
616 * version of the problem, but the solution might not be feasible to the unscaled original problem; in this case,
617 * SCIPlpiIsStable() should return false.
618 */
619SCIP_EXPORT
621 SCIP_LPIEXACT* lpi /**< LP interface structure */
622 );
623
624/** returns TRUE iff the objective limit was reached */
625SCIP_EXPORT
627 SCIP_LPIEXACT* lpi /**< LP interface structure */
628 );
629
630/** returns TRUE iff the iteration limit was reached */
631SCIP_EXPORT
633 SCIP_LPIEXACT* lpi /**< LP interface structure */
634 );
635
636/** returns TRUE iff the time limit was reached */
637SCIP_EXPORT
639 SCIP_LPIEXACT* lpi /**< LP interface structure */
640 );
641
642/** returns the internal solution status of the solver */
643SCIP_EXPORT
645 SCIP_LPIEXACT* lpi /**< LP interface structure */
646 );
647
648/** tries to reset the internal status of the LP solver in order to ignore an instability of the last solving call */
649SCIP_EXPORT
651 SCIP_LPIEXACT* lpi, /**< LP interface structure */
652 SCIP_Bool* success /**< pointer to store, whether the instability could be ignored */
653 );
654
655/** gets objective value of solution */
656SCIP_EXPORT
658 SCIP_LPIEXACT* lpi, /**< LP interface structure */
659 SCIP_RATIONAL* objval /**< stores the objective value */
660 );
661
662/** gets primal and dual solution vectors for feasible LPs */
663SCIP_EXPORT
665 SCIP_LPIEXACT* lpi, /**< LP interface structure */
666 SCIP_RATIONAL* objval, /**< stores the objective value, may be NULL if not needed */
667 SCIP_RATIONAL** primsol, /**< primal solution vector, may be NULL if not needed */
668 SCIP_RATIONAL** dualsol, /**< dual solution vector, may be NULL if not needed */
669 SCIP_RATIONAL** activity, /**< row activity vector, may be NULL if not needed */
670 SCIP_RATIONAL** redcost /**< reduced cost vector, may be NULL if not needed */
671 );
672
673/** gets primal ray for unbounded LPs */
674SCIP_EXPORT
676 SCIP_LPIEXACT* lpi, /**< LP interface structure */
677 SCIP_RATIONAL** ray /**< primal ray */
678 );
679
680/** gets dual farkas proof for infeasibility */
681SCIP_EXPORT
683 SCIP_LPIEXACT* lpi, /**< LP interface structure */
684 SCIP_RATIONAL** dualfarkas /**< dual farkas row multipliers */
685 );
686
687/** gets the number of LP iterations of the last solve call */
688SCIP_EXPORT
690 SCIP_LPIEXACT* lpi, /**< LP interface structure */
691 int* iterations /**< pointer to store the number of iterations of the last solve call */
692 );
693
694/**@} */
695
696
697
698/*
699 * LP Basis Methods
700 */
701
702/**@name LP Basis Methods */
703/**@{ */
704
705/** gets current basis status for columns and rows; arrays must be large enough to store the basis status */
706SCIP_EXPORT
708 SCIP_LPIEXACT* lpi, /**< LP interface structure */
709 int* cstat, /**< array to store column basis status, or NULL */
710 int* rstat /**< array to store row basis status, or NULL */
711 );
712
713/** sets current basis status for columns and rows */
714SCIP_EXPORT
716 SCIP_LPIEXACT* lpi, /**< LP interface structure */
717 int* cstat, /**< array with column basis status */
718 int* rstat /**< array with row basis status */
719 );
720
721/** returns the indices of the basic columns and rows */
722SCIP_EXPORT
724 SCIP_LPIEXACT* lpi, /**< LP interface structure */
725 int* bind /**< basic column n gives value n, basic row m gives value -1-m */
726 );
727
728/** get dense row of inverse basis matrix B^-1 */
729SCIP_EXPORT
731 SCIP_LPIEXACT* lpi, /**< LP interface structure */
732 int r, /**< row number */
733 SCIP_RATIONAL** coef, /**< pointer to store the coefficients of the row */
734 int* inds, /**< array to store the non-zero indices, or NULL */
735 int* ninds /**< pointer to store the number of non-zero indices, or NULL
736 * (-1: if we do not store sparsity information) */
737 );
738
739/** get dense column of inverse basis matrix B^-1 */
740SCIP_EXPORT
742 SCIP_LPIEXACT* lpi, /**< LP interface structure */
743 int c, /**< column number of B^-1; this is NOT the number of the column in the LP;
744 * you have to call SCIPlpiExactGetBasisInd() to get the array which links the
745 * B^-1 column numbers to the row and column numbers of the LP!
746 * c must be between 0 and nrows-1, since the basis has the size
747 * nrows * nrows */
748 SCIP_RATIONAL** coef, /**< pointer to store the coefficients of the column */
749 int* inds, /**< array to store the non-zero indices, or NULL */
750 int* ninds /**< pointer to store the number of non-zero indices, or NULL
751 * (-1: if we do not store sparsity information) */
752 );
753
754/** get dense row of inverse basis matrix times constraint matrix B^-1 * A */
755SCIP_EXPORT
757 SCIP_LPIEXACT* lpi, /**< LP interface structure */
758 int r, /**< row number */
759 SCIP_RATIONAL** binvrow, /**< row in (A_B)^-1 from prior call to SCIPlpiExactGetBInvRow(), or NULL */
760 SCIP_RATIONAL** coef, /**< vector to return coefficients */
761 int* inds, /**< array to store the non-zero indices, or NULL */
762 int* ninds /**< pointer to store the number of non-zero indices, or NULL
763 * (-1: if we do not store sparsity information) */
764 );
765
766/** get dense column of inverse basis matrix times constraint matrix B^-1 * A */
767SCIP_EXPORT
769 SCIP_LPIEXACT* lpi, /**< LP interface structure */
770 int c, /**< column number */
771 SCIP_RATIONAL** coef, /**< vector to return coefficients */
772 int* inds, /**< array to store the non-zero indices, or NULL */
773 int* ninds /**< pointer to store the number of non-zero indices, or NULL
774 * (-1: if we do not store sparsity information) */
775 );
776
777/**@} */
778
779
780
781/*
782 * LPi State Methods
783 */
784
785/**@name LPi State Methods */
786/**@{ */
787
788/** stores LPi state (like basis information) into lpistate object */
789SCIP_EXPORT
791 SCIP_LPIEXACT* lpi, /**< LP interface structure */
792 BMS_BLKMEM* blkmem, /**< block memory */
793 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
794 );
795
796/** loads LPi state (like basis information) into solver; note that the LP might have been extended with additional
797 * columns and rows since the state was stored with SCIPlpiExactGetState()
798 */
799SCIP_EXPORT
801 SCIP_LPIEXACT* lpi, /**< LP interface structure */
802 BMS_BLKMEM* blkmem, /**< block memory */
803 SCIP_LPISTATE* lpistate /**< LPi state information (like basis information) */
804 );
805
806/** clears current LPi state (like basis information) of the solver */
807SCIP_EXPORT
809 SCIP_LPIEXACT* lpi /**< LP interface structure */
810 );
811
812/** frees LPi state information */
813SCIP_EXPORT
815 SCIP_LPIEXACT* lpi, /**< LP interface structure */
816 BMS_BLKMEM* blkmem, /**< block memory */
817 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
818 );
819
820/** checks, whether the given LPi state contains simplex basis information */
821SCIP_EXPORT
823 SCIP_LPIEXACT* lpi, /**< LP interface structure */
824 SCIP_LPISTATE* lpistate /**< LPi state information (like basis information) */
825 );
826
827/** reads LPi state (like basis information from a file */
828SCIP_EXPORT
830 SCIP_LPIEXACT* lpi, /**< LP interface structure */
831 const char* fname /**< file name */
832 );
833
834/** writes LPi state (like basis information) to a file */
835SCIP_EXPORT
837 SCIP_LPIEXACT* lpi, /**< LP interface structure */
838 const char* fname /**< file name */
839 );
840
841/** checks whether LPi state (i.e. basis information) is dual feasbile and returns corresponding dual objective value.
842 * if wanted it will first directly test the corresponding approximate dual and primal solution
843 * (corrected via dual variables for bounds and primal variables for slacks if possible) for optimality
844 * before performing the dual feasibility test on the more expensive exact basic solution.
845 */
846SCIP_EXPORT
848 SCIP_LPIEXACT* lpi, /**< LP interface structure */
849 BMS_BLKMEM* blkmem, /**< block memory */
850 SCIP_LPISTATE* lpistate, /**< LPi state information (like basis information) */
851 SCIP_Bool useprestep, /**< should approximate primal and dual solution first */
852 SCIP_Real* primalsol, /**< approximate primal solution; or NULL to compute by exact LP solver */
853 SCIP_Real* dualsol, /**< approximate dual solution; or NULL to compute by exact LP solver */
854 SCIP_Bool* result, /**< pointer to store whether given LPi state is dual feasible */
855 SCIP_RATIONAL** dualobjval /**< pointer to store dual objective value in case of dual feasibility */
856 );
857
858/**@} */
859
860
861
862/*
863 * LPi Pricing Norms Methods
864 */
865
866/**@name LPi Pricing Norms Methods */
867/**@{ */
868
869/** stores lpiexact pricing norms into lpiexactnorms object */
870SCIP_EXPORT
872 SCIP_LPIEXACT* lpi, /**< LP interface structure */
873 BMS_BLKMEM* blkmem, /**< block memory */
874 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information */
875 );
876
877/** loads LPi pricing norms into solver; note that the LP might have been extended with additional
878 * columns and rows since the norms were stored with SCIPlpiGetNorms()
879 */
880SCIP_EXPORT
882 SCIP_LPIEXACT* lpi, /**< LP interface structure */
883 BMS_BLKMEM* blkmem, /**< block memory */
884 const SCIP_LPINORMS* lpinorms /**< LPi pricing norms information, or NULL */
885 );
886
887/** frees LPi pricing norms information */
888SCIP_EXPORT
890 SCIP_LPIEXACT* lpi, /**< LP interface structure */
891 BMS_BLKMEM* blkmem, /**< block memory */
892 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information, or NULL */
893 );
894
895
896/**@} */
897
898
899
900/*
901 * Parameter Methods
902 */
903
904/**@name Parameter Methods */
905/**@{ */
906
907/** gets integer parameter of LP */
908SCIP_EXPORT
910 SCIP_LPIEXACT* lpi, /**< LP interface structure */
911 SCIP_LPPARAM type, /**< parameter number */
912 int* ival /**< buffer to store the parameter value */
913 );
914
915/** sets integer parameter of LP */
916SCIP_EXPORT
918 SCIP_LPIEXACT* lpi, /**< LP interface structure */
919 SCIP_LPPARAM type, /**< parameter number */
920 int ival /**< parameter value */
921 );
922
923/** gets floating point parameter of LP */
924SCIP_EXPORT
926 SCIP_LPIEXACT* lpi, /**< LP interface structure */
927 SCIP_LPPARAM type, /**< parameter number */
928 SCIP_Real* dval /**< buffer to store the parameter value */
929 );
930
931/** sets floating point parameter of LP */
932SCIP_EXPORT
934 SCIP_LPIEXACT* lpi, /**< LP interface structure */
935 SCIP_LPPARAM type, /**< parameter number */
936 SCIP_Real dval /**< parameter value */
937 );
938
939/**@} */
940
941
942
943/*
944 * Numerical Methods
945 */
946
947/**@name Numerical Methods */
948/**@{ */
949
950/** returns value treated as positive infinity in the LP solver */
951SCIP_EXPORT
953 SCIP_LPIEXACT* lpi, /**< LP interface structure */
954 SCIP_RATIONAL* infval /**< pointer to store positive infinity value of LP solver */
955 );
956
957/** checks if given value is treated as positive infinity in the LP solver */
958SCIP_EXPORT
960 SCIP_LPIEXACT* lpi, /**< LP interface structure */
961 SCIP_RATIONAL* val /**< given value */
962 );
963
964/** returns value treated as negative infinity in the LP solver */
965SCIP_EXPORT
967 SCIP_LPIEXACT* lpi, /**< LP interface structure */
968 SCIP_RATIONAL* infval /**< pointer to store negative infinity value of LP solver */
969 );
970
971/** checks if given value is treated as negative infinity in the LP solver */
972SCIP_EXPORT
974 SCIP_LPIEXACT* lpi, /**< LP interface structure */
975 SCIP_RATIONAL* val /**< given value */
976 );
977
978/** returns value treated as infinity in the LP solver */
979SCIP_EXPORT
981 SCIP_LPIEXACT* lpi /**< LP interface structure */
982 );
983
984/** checks if given value is treated as infinity in the LP solver */
985SCIP_EXPORT
987 SCIP_LPIEXACT* lpi, /**< LP interface structure */
988 SCIP_Real val /**< value to test */
989 );
990
991/**@} */
992
993
994
995/*
996 * File Interface Methods
997 */
998
999/**@name File Interface Methods */
1000/**@{ */
1001
1002/** reads LP from a file */
1003SCIP_EXPORT
1005 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1006 const char* fname /**< file name */
1007 );
1008
1009/** writes LP to a file */
1010SCIP_EXPORT
1012 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1013 const char* fname /**< file name */
1014 );
1015
1016/**@} */
1017
1018
1019/*
1020 * Exact LU decomposition solver interface
1021 */
1022
1023/**@name Exact LU decomposition solver interface */
1024/**@{ */
1025
1026/** computes and stores matrix factorization within the LPIEXACT structure */
1027SCIP_EXPORT
1029 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1030 int dim, /**< dimension of matrix */
1031 int* cbeg, /**< column indices of matrix */
1032 int* clen, /**< column lengths of matrix */
1033 int* cindx, /**< row index of entries */
1034 SCIP_RATIONAL* ccoef /**< coef values of matrix */
1035 );
1036
1037
1038/** solves a system using the stored factorization */
1039SCIP_EXPORT
1041 SCIP_LPIEXACT* lpi, /**< LP interface structure */
1042 int dim, /**< dimension of matrix */
1043 SCIP_RATIONAL* sol, /**< solution to system */
1044 SCIP_RATIONAL* rhs /**< rhs of system */
1045 );
1046/**@} */
1047
1048/**@} */
1049
1050#ifdef __cplusplus
1051}
1052#endif
1053
1054#endif
SCIP_Real * r
Definition: circlepacking.c:59
common defines and data types used in all packages of SCIP
#define SCIP_Bool
Definition: def.h:91
#define SCIP_Real
Definition: def.h:156
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)
void SCIPlpiExactEnd(void)
SCIP_RETCODE SCIPlpiExactScaleRow(SCIP_LPIEXACT *lpi, int row, SCIP_RATIONAL *scaleval)
const char * SCIPlpiExactGetExternalCodeDesc(void)
SCIP_Bool SCIPlpiExactIsPosInfinity(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *val)
SCIP_Bool SCIPlpiExactIsDualUnbounded(SCIP_LPIEXACT *lpi)
void SCIPlpiExactPrintInfo(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactWriteLP(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_Bool SCIPlpiExactHasPrimalRay(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactGetNorms(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
SCIP_Bool SCIPlpiExactExistsDualRay(SCIP_LPIEXACT *lpi)
SCIP_Bool SCIPlpiExactIsStable(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 SCIPlpiExactScaleCol(SCIP_LPIEXACT *lpi, int col, SCIP_RATIONAL *scaleval)
SCIP_RETCODE SCIPlpiExactSetNorms(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
SCIP_RETCODE SCIPlpiExactGetBInvARow(SCIP_LPIEXACT *lpi, int r, SCIP_RATIONAL **binvrow, SCIP_RATIONAL **coef, int *inds, int *ninds)
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_RETCODE SCIPlpiExactFreeNorms(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
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 SCIPlpiExactIsNegInfinity(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *val)
SCIP_Bool SCIPlpiExactIsDualFeasible(SCIP_LPIEXACT *lpi)
SCIP_RETCODE SCIPlpiExactReadLP(SCIP_LPIEXACT *lpi, const char *fname)
SCIP_RETCODE SCIPlpiExactCreateFactor(SCIP_LPIEXACT *lpi, int dim, int *cbeg, int *clen, int *cindx, SCIP_RATIONAL *ccoef)
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)
void SCIPlpiExactStart(void)
SCIP_RETCODE SCIPlpiExactGetBase(SCIP_LPIEXACT *lpi, int *cstat, int *rstat)
SCIP_RETCODE SCIPlpiExactDelColset(SCIP_LPIEXACT *lpi, int *dstat)
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)
const char * SCIPlpiExactGetExternalCodeName(void)
void SCIPlpiExactPosInfinity(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *infval)
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 SCIPlpiExactStrongbranch(SCIP_LPIEXACT *lpi, int col, const SCIP_RATIONAL *psol, int itlim, SCIP_RATIONAL *down, SCIP_RATIONAL *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
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)
void SCIPlpiExactNegInfinity(SCIP_LPIEXACT *lpi, SCIP_RATIONAL *infval)
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 SCIPlpiExactStateDualFeasible(SCIP_LPIEXACT *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE *lpistate, SCIP_Bool useprestep, SCIP_Real *primalsol, SCIP_Real *dualsol, SCIP_Bool *result, SCIP_RATIONAL **dualobjval)
SCIP_RETCODE SCIPlpiExactGetBInvACol(SCIP_LPIEXACT *lpi, int c, SCIP_RATIONAL **coef, int *inds, int *ninds)
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 SCIPlpiExactFactorSolve(SCIP_LPIEXACT *lpi, int dim, SCIP_RATIONAL *sol, SCIP_RATIONAL *rhs)
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)
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:437
wrapper for rational number arithmetic
enum SCIP_LPParam SCIP_LPPARAM
Definition: type_lpi.h:73
enum SCIP_ObjSen SCIP_OBJSEN
Definition: type_lpi.h:45
type definitions for specific exact LP solvers interface
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63