Scippy

SCIP

Solving Constraint Integer Programs

lpi.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 lpi.h
26 * @ingroup LPIS
27 * @brief interface methods for specific LP solvers
28 * @author Tobias Achterberg
29 * @author Marc Pfetsch
30 *
31 */
32
33/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
34
35#ifndef __SCIP_LPI_H__
36#define __SCIP_LPI_H__
37
39#include "lpi/type_lpi.h"
40#include "scip/def.h"
41#include "scip/type_message.h"
42#include "scip/type_retcode.h"
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
48/**@addtogroup LPIS
49 *
50 * This file specifies a generic LP solver interface used by SCIP to create, modify, and solve linear programs of the
51 * form
52 *
53 * ```
54 * min/max obj * x
55 * lhs <= A * x <= rhs
56 * lb <= x <= ub
57 * ```
58 *
59 * and query information about the solution. Although it includes a few SCIP header files, e.g., because it uses SCIP's
60 * return codes, it can be used independently of any SCIP instance.
61 *
62 * The basis status for (column) variables are as follows:
63 * - If x_j = lb, then j is at its lower bound (SCIP_BASESTAT_LOWER).
64 * - If x_j = ub, then j is at its lower bound (SCIP_BASESTAT_UPPER).
65 * - If x_j is in the basis, it has SCIP_BASESTAT_BASIC status.
66 * - If x_j is free and non-basic, it has SCIP_BASESTAT_ZERO status.
67 *
68 * The basis status for (row) slack variables are:
69 * - If (A * x)_i = lhs, then i is at its lower bound (SCIP_BASESTAT_LOWER).
70 * - If (A * x)_i = rhs, then i is at its upper bound (SCIP_BASESTAT_UPPER).
71 * - If the slack variable for row i is basic, it has SCIP_BASESTAT_BASIC status.
72 *
73 * If the solvers use their status differently, those status codes have to be corrected.
74 *
75 * In the methods accessing information about the (inverse of the) basis matrix, the interface assumes the following
76 * column-oriented format: slack variables of rows have coefficient +1 and the basis matrix is a regular m times m
77 * submatrix of (A,I), where m is the number of rows and I is the identity matrix. This means that if, internally, the
78 * LP solver uses coefficients -1 for some of the slack variables, then every row associated with a slack variable whose
79 * coefficient is -1 should be negated in order to return the result in terms of the LP interface definition.
80 *
81 * The creation of a new LP should always be done in the following ways: Either one can use SCIPlpiLoadColLP() or one
82 * first adds empty columns or rows. Then the matrix entries can be added by adding columns and rows, respectively.
83 * Adding matrix entries for a row or column that have not been added before will result in an error.
84 *
85 * The handling of the objective limit is as follows, if supported by the LP-solver: If the objective is larger than the
86 * objective limit for minimization problems or smaller than the objective limit for maximization problems, the solution
87 * process can be stopped. This naturally occurs in a branch-and-bound process, where the objective limit is set to the
88 * value of the best solution found so far. If the problem is a minimization problem and we use the dual simplex, the
89 * dual feasible solutions are maximized. If their value are larger than the objective limit, the process can be
90 * stopped. In this case, no feasible integer solution can be found in the corresponding branch.
91 *
92 * Some LP-solvers also support the opposite setting, but this can easily be checked after the solution process (i.e.,
93 * for a minimization problem a check whether the optimal value is smaller than the limit). Note that this check can
94 * only be determined at the end of the optimization. Thus, we do not support this.
95 *
96 * @{
97 */
98
99/*
100 * Miscellaneous Methods
101 */
102
103/**@name Miscellaneous Methods */
104/**@{ */
105
106/** gets name and version of LP solver */
107SCIP_EXPORT
108const char* SCIPlpiGetSolverName(
109 void
110 );
111
112/** gets description of LP solver (developer, webpage, ...) */
113SCIP_EXPORT
114const char* SCIPlpiGetSolverDesc(
115 void
116 );
117
118/** gets pointer for LP solver - use only with great care
119 *
120 * The behavior of this function depends on the solver and its use is
121 * therefore only recommended if you really know what you are
122 * doing. In general, it returns a pointer to the LP solver object.
123 */
124SCIP_EXPORT
126 SCIP_LPI* lpi /**< pointer to an LP interface structure */
127 );
128
129/** pass integrality information about variables to the solver */
130SCIP_EXPORT
132 SCIP_LPI* lpi, /**< pointer to an LP interface structure */
133 int ncols, /**< length of integrality array */
134 int* intInfo /**< integrality array (0: continuous, 1: integer). May be NULL iff ncols is 0. */
135 );
136
137/** informs about availability of a primal simplex solving method */
138SCIP_EXPORT
140 void
141 );
142
143/** informs about availability of a dual simplex solving method */
144SCIP_EXPORT
146 void
147 );
148
149/** informs about availability of a barrier solving method */
150SCIP_EXPORT
152 void
153 );
154
155/**@} */
156
157
158
159
160/*
161 * LPI Creation and Destruction Methods
162 */
163
164/**@name LPI Creation and Destruction Methods */
165/**@{ */
166
167/** creates an LP problem object */
168SCIP_EXPORT
170 SCIP_LPI** lpi, /**< pointer to an LP interface structure */
171 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler to use for printing messages, or NULL */
172 const char* name, /**< problem name */
173 SCIP_OBJSEN objsen /**< objective sense */
174 );
175
176/** deletes an LP problem object */
177SCIP_EXPORT
179 SCIP_LPI** lpi /**< pointer to an LP interface structure */
180 );
181
182/**@} */
183
184
185
186
187/*
188 * Modification Methods
189 */
190
191/**@name Modification Methods */
192/**@{ */
193
194/** copies LP data with column matrix into LP solver */
195SCIP_EXPORT
197 SCIP_LPI* lpi, /**< LP interface structure */
198 SCIP_OBJSEN objsen, /**< objective sense */
199 int ncols, /**< number of columns */
200 const SCIP_Real* obj, /**< objective function values of columns */
201 const SCIP_Real* lb, /**< lower bounds of columns */
202 const SCIP_Real* ub, /**< upper bounds of columns */
203 char** colnames, /**< column names, or NULL */
204 int nrows, /**< number of rows */
205 const SCIP_Real* lhs, /**< left hand sides of rows */
206 const SCIP_Real* rhs, /**< right hand sides of rows */
207 char** rownames, /**< row names, or NULL */
208 int nnonz, /**< number of nonzero elements in the constraint matrix */
209 const int* beg, /**< start index of each column in ind- and val-array */
210 const int* ind, /**< row indices of constraint matrix entries */
211 const SCIP_Real* val /**< values of constraint matrix entries */
212 );
213
214/** adds columns to the LP
215 *
216 * @note ind array is not checked for duplicates, problems may appear if indices are added more than once
217 */
218SCIP_EXPORT
220 SCIP_LPI* lpi, /**< LP interface structure */
221 int ncols, /**< number of columns to be added */
222 const SCIP_Real* obj, /**< objective function values of new columns */
223 const SCIP_Real* lb, /**< lower bounds of new columns */
224 const SCIP_Real* ub, /**< upper bounds of new columns */
225 char** colnames, /**< column names, or NULL */
226 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
227 const int* beg, /**< start index of each column in ind- and val-array, or NULL if nnonz == 0 */
228 const int* ind, /**< row indices of constraint matrix entries, or NULL if nnonz == 0 */
229 const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
230 );
231
232/** deletes all columns in the given range from LP */
233SCIP_EXPORT
235 SCIP_LPI* lpi, /**< LP interface structure */
236 int firstcol, /**< first column to be deleted */
237 int lastcol /**< last column to be deleted */
238 );
239
240/** deletes columns from SCIP_LPI; the new position of a column must not be greater that its old position */
241SCIP_EXPORT
243 SCIP_LPI* lpi, /**< LP interface structure */
244 int* dstat /**< deletion status of columns
245 * input: 1 if column should be deleted, 0 if not
246 * output: new position of column, -1 if column was deleted */
247 );
248
249/** adds rows to the LP
250 *
251 * @note ind array is not checked for duplicates, problems may appear if indices are added more than once
252 */
253SCIP_EXPORT
255 SCIP_LPI* lpi, /**< LP interface structure */
256 int nrows, /**< number of rows to be added */
257 const SCIP_Real* lhs, /**< left hand sides of new rows */
258 const SCIP_Real* rhs, /**< right hand sides of new rows */
259 char** rownames, /**< row names, or NULL */
260 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
261 const int* beg, /**< start index of each row in ind- and val-array, or NULL if nnonz == 0 */
262 const int* ind, /**< column indices of constraint matrix entries, or NULL if nnonz == 0 */
263 const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
264 );
265
266/** deletes all rows in the given range from LP */
267SCIP_EXPORT
269 SCIP_LPI* lpi, /**< LP interface structure */
270 int firstrow, /**< first row to be deleted */
271 int lastrow /**< last row to be deleted */
272 );
273
274/** deletes rows from SCIP_LPI; the new position of a row must not be greater that its old position */
275SCIP_EXPORT
277 SCIP_LPI* lpi, /**< LP interface structure */
278 int* dstat /**< deletion status of rows
279 * input: 1 if row should be deleted, 0 if not
280 * output: new position of row, -1 if row was deleted */
281 );
282
283/** clears the whole LP */
284SCIP_EXPORT
286 SCIP_LPI* lpi /**< LP interface structure */
287 );
288
289/** changes lower and upper bounds of columns */
290SCIP_EXPORT
292 SCIP_LPI* lpi, /**< LP interface structure */
293 int ncols, /**< number of columns to change bounds for */
294 const int* ind, /**< column indices or NULL if ncols is zero */
295 const SCIP_Real* lb, /**< values for the new lower bounds or NULL if ncols is zero */
296 const SCIP_Real* ub /**< values for the new upper bounds or NULL if ncols is zero */
297 );
298
299/** changes left and right hand sides of rows */
300SCIP_EXPORT
302 SCIP_LPI* lpi, /**< LP interface structure */
303 int nrows, /**< number of rows to change sides for */
304 const int* ind, /**< row indices */
305 const SCIP_Real* lhs, /**< new values for left hand sides */
306 const SCIP_Real* rhs /**< new values for right hand sides */
307 );
308
309/** changes a single coefficient */
310SCIP_EXPORT
312 SCIP_LPI* lpi, /**< LP interface structure */
313 int row, /**< row number of coefficient to change */
314 int col, /**< column number of coefficient to change */
315 SCIP_Real newval /**< new value of coefficient */
316 );
317
318/** changes the objective sense */
319SCIP_EXPORT
321 SCIP_LPI* lpi, /**< LP interface structure */
322 SCIP_OBJSEN objsen /**< new objective sense */
323 );
324
325/** changes objective values of columns in the LP */
326SCIP_EXPORT
328 SCIP_LPI* lpi, /**< LP interface structure */
329 int ncols, /**< number of columns to change objective value for */
330 const int* ind, /**< column indices to change objective value for */
331 const SCIP_Real* obj /**< new objective values for columns */
332 );
333
334/** multiplies a row with a non-zero scalar; for negative scalars, the row's sense is switched accordingly */
335SCIP_EXPORT
337 SCIP_LPI* lpi, /**< LP interface structure */
338 int row, /**< row number to scale */
339 SCIP_Real scaleval /**< scaling multiplier */
340 );
341
342/** multiplies a column with a non-zero scalar; the objective value is multiplied with the scalar, and the bounds
343 * are divided by the scalar; for negative scalars, the column's bounds are switched
344 */
345SCIP_EXPORT
347 SCIP_LPI* lpi, /**< LP interface structure */
348 int col, /**< column number to scale */
349 SCIP_Real scaleval /**< scaling multiplier */
350 );
351
352/**@} */
353
354
355
356
357/*
358 * Data Accessing Methods
359 */
360
361/**@name Data Accessing Methods */
362/**@{ */
363
364/** gets the number of rows in the LP */
365SCIP_EXPORT
367 SCIP_LPI* lpi, /**< LP interface structure */
368 int* nrows /**< pointer to store the number of rows */
369 );
370
371/** gets the number of columns in the LP */
372SCIP_EXPORT
374 SCIP_LPI* lpi, /**< LP interface structure */
375 int* ncols /**< pointer to store the number of cols */
376 );
377
378/** gets the objective sense of the LP */
379SCIP_EXPORT
381 SCIP_LPI* lpi, /**< LP interface structure */
382 SCIP_OBJSEN* objsen /**< pointer to store objective sense */
383 );
384
385/** gets the number of nonzero elements in the LP constraint matrix */
386SCIP_EXPORT
388 SCIP_LPI* lpi, /**< LP interface structure */
389 int* nnonz /**< pointer to store the number of nonzeros */
390 );
391
392/** gets columns from LP problem object; the arrays have to be large enough to store all values;
393 * Either both, lb and ub, have to be NULL, or both have to be non-NULL,
394 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
395 */
396SCIP_EXPORT
398 SCIP_LPI* lpi, /**< LP interface structure */
399 int firstcol, /**< first column to get from LP */
400 int lastcol, /**< last column to get from LP */
401 SCIP_Real* lb, /**< buffer to store the lower bound vector, or NULL */
402 SCIP_Real* ub, /**< buffer to store the upper bound vector, or NULL */
403 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
404 int* beg, /**< buffer to store start index of each column in ind- and val-array, or NULL */
405 int* ind, /**< buffer to store row indices of constraint matrix entries, or NULL */
406 SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
407 );
408
409/** gets rows from LP problem object; the arrays have to be large enough to store all values.
410 * Either both, lhs and rhs, have to be NULL, or both have to be non-NULL,
411 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
412 */
413SCIP_EXPORT
415 SCIP_LPI* lpi, /**< LP interface structure */
416 int firstrow, /**< first row to get from LP */
417 int lastrow, /**< last row to get from LP */
418 SCIP_Real* lhs, /**< buffer to store left hand side vector, or NULL */
419 SCIP_Real* rhs, /**< buffer to store right hand side vector, or NULL */
420 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
421 int* beg, /**< buffer to store start index of each row in ind- and val-array, or NULL */
422 int* ind, /**< buffer to store column indices of constraint matrix entries, or NULL */
423 SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
424 );
425
426/** gets column names */
427SCIP_EXPORT
429 SCIP_LPI* lpi, /**< LP interface structure */
430 int firstcol, /**< first column to get name from LP */
431 int lastcol, /**< last column to get name from LP */
432 char** colnames, /**< pointers to column names (of size at least lastcol-firstcol+1) or NULL if namestoragesize is zero */
433 char* namestorage, /**< storage for col names or NULL if namestoragesize is zero */
434 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
435 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
436 );
437
438/** gets row names */
439SCIP_EXPORT
441 SCIP_LPI* lpi, /**< LP interface structure */
442 int firstrow, /**< first row to get name from LP */
443 int lastrow, /**< last row to get name from LP */
444 char** rownames, /**< pointers to row names (of size at least lastrow-firstrow+1) or NULL if namestoragesize is zero */
445 char* namestorage, /**< storage for row names or NULL if namestoragesize is zero */
446 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
447 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
448 );
449
450/** gets objective coefficients from LP problem object */
451SCIP_EXPORT
453 SCIP_LPI* lpi, /**< LP interface structure */
454 int firstcol, /**< first column to get objective coefficient for */
455 int lastcol, /**< last column to get objective coefficient for */
456 SCIP_Real* vals /**< array to store objective coefficients */
457 );
458
459/** gets current bounds from LP problem object */
460SCIP_EXPORT
462 SCIP_LPI* lpi, /**< LP interface structure */
463 int firstcol, /**< first column to get bounds for */
464 int lastcol, /**< last column to get bounds for */
465 SCIP_Real* lbs, /**< array to store lower bound values, or NULL */
466 SCIP_Real* ubs /**< array to store upper bound values, or NULL */
467 );
468
469/** gets current row sides from LP problem object */
470SCIP_EXPORT
472 SCIP_LPI* lpi, /**< LP interface structure */
473 int firstrow, /**< first row to get sides for */
474 int lastrow, /**< last row to get sides for */
475 SCIP_Real* lhss, /**< array to store left hand side values, or NULL */
476 SCIP_Real* rhss /**< array to store right hand side values, or NULL */
477 );
478
479/** gets a single coefficient */
480SCIP_EXPORT
482 SCIP_LPI* lpi, /**< LP interface structure */
483 int row, /**< row number of coefficient */
484 int col, /**< column number of coefficient */
485 SCIP_Real* val /**< pointer to store the value of the coefficient */
486 );
487
488/**@} */
489
490
491
492
493/*
494 * Solving Methods
495 */
496
497/**@name Solving Methods */
498/**@{ */
499
500/** calls primal simplex to solve the LP */
501SCIP_EXPORT
503 SCIP_LPI* lpi /**< LP interface structure */
504 );
505
506/** calls dual simplex to solve the LP */
507SCIP_EXPORT
509 SCIP_LPI* lpi /**< LP interface structure */
510 );
511
512/** calls barrier or interior point algorithm to solve the LP with crossover to simplex basis */
513SCIP_EXPORT
515 SCIP_LPI* lpi, /**< LP interface structure */
516 SCIP_Bool crossover /**< perform crossover */
517 );
518
519/** start strong branching - call before any strong branching */
520SCIP_EXPORT
522 SCIP_LPI* lpi /**< LP interface structure */
523 );
524
525/** end strong branching - call after any strong branching */
526SCIP_EXPORT
528 SCIP_LPI* lpi /**< LP interface structure */
529 );
530
531/** performs strong branching iterations on one @b fractional candidate */
532SCIP_EXPORT
534 SCIP_LPI* lpi, /**< LP interface structure */
535 int col, /**< column to apply strong branching on */
536 SCIP_Real psol, /**< fractional current primal solution value of column */
537 int itlim, /**< iteration limit for strong branchings */
538 SCIP_Real* down, /**< stores dual bound after branching column down */
539 SCIP_Real* up, /**< stores dual bound after branching column up */
540 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
541 * otherwise, it can only be used as an estimate value */
542 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
543 * otherwise, it can only be used as an estimate value */
544 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
545 );
546
547/** performs strong branching iterations on given @b fractional candidates */
548SCIP_EXPORT
550 SCIP_LPI* lpi, /**< LP interface structure */
551 int* cols, /**< columns to apply strong branching on */
552 int ncols, /**< number of columns */
553 SCIP_Real* psols, /**< fractional current primal solution values of columns */
554 int itlim, /**< iteration limit for strong branchings */
555 SCIP_Real* down, /**< stores dual bounds after branching columns down */
556 SCIP_Real* up, /**< stores dual bounds after branching columns up */
557 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
558 * otherwise, they can only be used as an estimate values */
559 SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
560 * otherwise, they can only be used as an estimate values */
561 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
562 );
563
564/** performs strong branching iterations on one candidate with @b integral value */
565SCIP_EXPORT
567 SCIP_LPI* lpi, /**< LP interface structure */
568 int col, /**< column to apply strong branching on */
569 SCIP_Real psol, /**< current integral primal solution value of column */
570 int itlim, /**< iteration limit for strong branchings */
571 SCIP_Real* down, /**< stores dual bound after branching column down */
572 SCIP_Real* up, /**< stores dual bound after branching column up */
573 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
574 * otherwise, it can only be used as an estimate value */
575 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
576 * otherwise, it can only be used as an estimate value */
577 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
578 );
579
580/** performs strong branching iterations on given candidates with @b integral values */
581SCIP_EXPORT
583 SCIP_LPI* lpi, /**< LP interface structure */
584 int* cols, /**< columns to apply strong branching on */
585 int ncols, /**< number of columns */
586 SCIP_Real* psols, /**< current integral primal solution values of columns */
587 int itlim, /**< iteration limit for strong branchings */
588 SCIP_Real* down, /**< stores dual bounds after branching columns down */
589 SCIP_Real* up, /**< stores dual bounds after branching columns up */
590 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
591 * otherwise, they can only be used as an estimate values */
592 SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
593 * otherwise, they can only be used as an estimate values */
594 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
595 );
596/**@} */
597
598
599
600
601/*
602 * Solution Information Methods
603 */
604
605/**@name Solution Information Methods */
606/**@{ */
607
608/** returns whether a solve method was called after the last modification of the LP */
609SCIP_EXPORT
611 SCIP_LPI* lpi /**< LP interface structure */
612 );
613
614/** gets information about primal and dual feasibility of the current LP solution
615 *
616 * The feasibility information is with respect to the last solving call and it is only relevant if SCIPlpiWasSolved()
617 * returns true. If the LP is changed, this information might be invalidated.
618 *
619 * Note that @p primalfeasible and @p dualfeasible should only return true if the solver has proved the respective LP to
620 * be feasible. Thus, the return values should be equal to the values of SCIPlpiIsPrimalFeasible() and
621 * SCIPlpiIsDualFeasible(), respectively. Note that if feasibility cannot be proved, they should return false (even if
622 * the problem might actually be feasible).
623 */
624SCIP_EXPORT
626 SCIP_LPI* lpi, /**< LP interface structure */
627 SCIP_Bool* primalfeasible, /**< pointer to store primal feasibility status */
628 SCIP_Bool* dualfeasible /**< pointer to store dual feasibility status */
629 );
630
631/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point);
632 * this does not necessarily mean, that the solver knows and can return the primal ray
633 */
634SCIP_EXPORT
636 SCIP_LPI* lpi /**< LP interface structure */
637 );
638
639/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point),
640 * and the solver knows and can return the primal ray
641 */
642SCIP_EXPORT
644 SCIP_LPI* lpi /**< LP interface structure */
645 );
646
647/** returns TRUE iff LP is proven to be primal unbounded */
648SCIP_EXPORT
650 SCIP_LPI* lpi /**< LP interface structure */
651 );
652
653/** returns TRUE iff LP is proven to be primal infeasible */
654SCIP_EXPORT
656 SCIP_LPI* lpi /**< LP interface structure */
657 );
658
659/** returns TRUE iff LP is proven to be primal feasible */
660SCIP_EXPORT
662 SCIP_LPI* lpi /**< LP interface structure */
663 );
664
665/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point);
666 * this does not necessarily mean, that the solver knows and can return the dual ray
667 */
668SCIP_EXPORT
670 SCIP_LPI* lpi /**< LP interface structure */
671 );
672
673/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point),
674 * and the solver knows and can return the dual ray
675 */
676SCIP_EXPORT
678 SCIP_LPI* lpi /**< LP interface structure */
679 );
680
681/** returns TRUE iff LP is proven to be dual unbounded */
682SCIP_EXPORT
684 SCIP_LPI* lpi /**< LP interface structure */
685 );
686
687/** returns TRUE iff LP is proven to be dual infeasible */
688SCIP_EXPORT
690 SCIP_LPI* lpi /**< LP interface structure */
691 );
692
693/** returns TRUE iff LP is proven to be dual feasible */
694SCIP_EXPORT
696 SCIP_LPI* lpi /**< LP interface structure */
697 );
698
699/** returns TRUE iff LP was solved to optimality */
700SCIP_EXPORT
702 SCIP_LPI* lpi /**< LP interface structure */
703 );
704
705/** returns TRUE iff current LP solution is stable
706 *
707 * This function should return true if the solution is reliable, i.e., feasible and optimal (or proven
708 * infeasible/unbounded) with respect to the original problem. The optimality status might be with respect to a scaled
709 * version of the problem, but the solution might not be feasible to the unscaled original problem; in this case,
710 * SCIPlpiIsStable() should return false.
711 */
712SCIP_EXPORT
714 SCIP_LPI* lpi /**< LP interface structure */
715 );
716
717/** returns TRUE iff the objective limit was reached */
718SCIP_EXPORT
720 SCIP_LPI* lpi /**< LP interface structure */
721 );
722
723/** returns TRUE iff the iteration limit was reached */
724SCIP_EXPORT
726 SCIP_LPI* lpi /**< LP interface structure */
727 );
728
729/** returns TRUE iff the time limit was reached */
730SCIP_EXPORT
732 SCIP_LPI* lpi /**< LP interface structure */
733 );
734
735/** returns the internal solution status of the solver */
736SCIP_EXPORT
738 SCIP_LPI* lpi /**< LP interface structure */
739 );
740
741/** tries to reset the internal status of the LP solver in order to ignore an instability of the last solving call */
742SCIP_EXPORT
744 SCIP_LPI* lpi, /**< LP interface structure */
745 SCIP_Bool* success /**< pointer to store, whether the instability could be ignored */
746 );
747
748/** gets objective value of solution */
749SCIP_EXPORT
751 SCIP_LPI* lpi, /**< LP interface structure */
752 SCIP_Real* objval /**< stores the objective value */
753 );
754
755/** gets primal and dual solution vectors for feasible LPs
756 *
757 * Before calling this function, the caller must ensure that the LP has been solved to optimality, i.e., that
758 * SCIPlpiIsOptimal() returns true.
759 */
760SCIP_EXPORT
762 SCIP_LPI* lpi, /**< LP interface structure */
763 SCIP_Real* objval, /**< stores the objective value, may be NULL if not needed */
764 SCIP_Real* primsol, /**< primal solution vector, may be NULL if not needed */
765 SCIP_Real* dualsol, /**< dual solution vector, may be NULL if not needed */
766 SCIP_Real* activity, /**< row activity vector, may be NULL if not needed */
767 SCIP_Real* redcost /**< reduced cost vector, may be NULL if not needed */
768 );
769
770/** gets primal ray for unbounded LPs */
771SCIP_EXPORT
773 SCIP_LPI* lpi, /**< LP interface structure */
774 SCIP_Real* ray /**< primal ray */
775 );
776
777/** gets dual Farkas proof for infeasibility */
778SCIP_EXPORT
780 SCIP_LPI* lpi, /**< LP interface structure */
781 SCIP_Real* dualfarkas /**< dual Farkas row multipliers */
782 );
783
784/** gets the number of LP iterations of the last solve call */
785SCIP_EXPORT
787 SCIP_LPI* lpi, /**< LP interface structure */
788 int* iterations /**< pointer to store the number of iterations of the last solve call */
789 );
790
791/** gets information about the quality of an LP solution
792 *
793 * Such information is usually only available, if also a (maybe not optimal) solution is available.
794 * The LPI should return SCIP_INVALID for @p quality, if the requested quantity is not available.
795 */
796SCIP_EXPORT
798 SCIP_LPI* lpi, /**< LP interface structure */
799 SCIP_LPSOLQUALITY qualityindicator, /**< indicates which quality should be returned */
800 SCIP_Real* quality /**< pointer to store quality number */
801 );
802
803/**@} */
804
805
806
807
808/*
809 * LP Basis Methods
810 */
811
812/**@name LP Basis Methods */
813/**@{ */
814
815/** gets current basis status for columns and rows; arrays must be large enough to store the basis status */
816SCIP_EXPORT
818 SCIP_LPI* lpi, /**< LP interface structure */
819 int* cstat, /**< array to store column basis status, or NULL */
820 int* rstat /**< array to store row basis status, or NULL */
821 );
822
823/** sets current basis status for columns and rows */
824SCIP_EXPORT
826 SCIP_LPI* lpi, /**< LP interface structure */
827 const int* cstat, /**< array with column basis status */
828 const int* rstat /**< array with row basis status */
829 );
830
831/** returns the indices of the basic columns and rows; basic column n gives value n, basic row m gives value -1-m */
832SCIP_EXPORT
834 SCIP_LPI* lpi, /**< LP interface structure */
835 int* bind /**< pointer to store basis indices ready to keep number of rows entries */
836 );
837
838/** get row of inverse basis matrix B^-1
839 *
840 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
841 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
842 * see also the explanation in lpi.h.
843 */
844SCIP_EXPORT
846 SCIP_LPI* lpi, /**< LP interface structure */
847 int r, /**< row number */
848 SCIP_Real* coef, /**< pointer to store the coefficients of the row */
849 int* inds, /**< array to store the non-zero indices, or NULL */
850 int* ninds /**< pointer to store the number of non-zero indices, or NULL
851 * (-1: if we do not store sparsity information) */
852 );
853
854/** get column of inverse basis matrix B^-1
855 *
856 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
857 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
858 * see also the explanation in lpi.h.
859 */
860SCIP_EXPORT
862 SCIP_LPI* lpi, /**< LP interface structure */
863 int c, /**< column number of B^-1; this is NOT the number of the column in the LP;
864 * you have to call SCIPlpiGetBasisInd() to get the array which links the
865 * B^-1 column numbers to the row and column numbers of the LP!
866 * c must be between 0 and nrows-1, since the basis has the size
867 * nrows * nrows */
868 SCIP_Real* coef, /**< pointer to store the coefficients of the column */
869 int* inds, /**< array to store the non-zero indices, or NULL */
870 int* ninds /**< pointer to store the number of non-zero indices, or NULL
871 * (-1: if we do not store sparsity information) */
872 );
873
874/** get row of inverse basis matrix times constraint matrix B^-1 * A
875 *
876 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
877 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
878 * see also the explanation in lpi.h.
879 */
880SCIP_EXPORT
882 SCIP_LPI* lpi, /**< LP interface structure */
883 int r, /**< row number */
884 const SCIP_Real* binvrow, /**< row in (A_B)^-1 from prior call to SCIPlpiGetBInvRow(), or NULL */
885 SCIP_Real* coef, /**< vector to return coefficients of the row */
886 int* inds, /**< array to store the non-zero indices, or NULL */
887 int* ninds /**< pointer to store the number of non-zero indices, or NULL
888 * (-1: if we do not store sparsity information) */
889 );
890
891/** get column of inverse basis matrix times constraint matrix B^-1 * A
892 *
893 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
894 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
895 * see also the explanation in lpi.h.
896 */
897SCIP_EXPORT
899 SCIP_LPI* lpi, /**< LP interface structure */
900 int c, /**< column number */
901 SCIP_Real* coef, /**< vector to return coefficients of the column */
902 int* inds, /**< array to store the non-zero indices, or NULL */
903 int* ninds /**< pointer to store the number of non-zero indices, or NULL
904 * (-1: if we do not store sparsity information) */
905 );
906
907/**@} */
908
909
910
911
912/*
913 * LPi State Methods
914 */
915
916/**@name LPi State Methods */
917/**@{ */
918
919/** stores LPi state (like basis information) into lpistate object */
920SCIP_EXPORT
922 SCIP_LPI* lpi, /**< LP interface structure */
923 BMS_BLKMEM* blkmem, /**< block memory */
924 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
925 );
926
927/** loads LPi state (like basis information) into solver; note that the LP might have been extended with additional
928 * columns and rows since the state was stored with SCIPlpiGetState()
929 */
930SCIP_EXPORT
932 SCIP_LPI* lpi, /**< LP interface structure */
933 BMS_BLKMEM* blkmem, /**< block memory */
934 const SCIP_LPISTATE* lpistate /**< LPi state information (like basis information), or NULL */
935 );
936
937/** clears current LPi state (like basis information) of the solver */
938SCIP_EXPORT
940 SCIP_LPI* lpi /**< LP interface structure */
941 );
942
943/** frees LPi state information */
944SCIP_EXPORT
946 SCIP_LPI* lpi, /**< LP interface structure */
947 BMS_BLKMEM* blkmem, /**< block memory */
948 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
949 );
950
951/** checks whether the given LPi state contains simplex basis information */
952SCIP_EXPORT
954 SCIP_LPI* lpi, /**< LP interface structure */
955 SCIP_LPISTATE* lpistate /**< LPi state information (like basis information) */
956 );
957
958/** reads LPi state (like basis information from a file */
959SCIP_EXPORT
961 SCIP_LPI* lpi, /**< LP interface structure */
962 const char* fname /**< file name */
963 );
964
965/** writes LPi state (i.e. basis information) to a file */
966SCIP_EXPORT
968 SCIP_LPI* lpi, /**< LP interface structure */
969 const char* fname /**< file name */
970 );
971
972/**@} */
973
974
975/*
976 * LPi Pricing Norms Methods
977 */
978
979/**@name LPi Pricing Norms Methods */
980/**@{ */
981
982/** stores LPi pricing norms into lpinorms object */
984 SCIP_LPI* lpi, /**< LP interface structure */
985 BMS_BLKMEM* blkmem, /**< block memory */
986 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information */
987 );
988
989/** loads LPi pricing norms into solver; note that the LP might have been extended with additional
990 * columns and rows since the norms were stored with SCIPlpiGetNorms()
991 */
993 SCIP_LPI* lpi, /**< LP interface structure */
994 BMS_BLKMEM* blkmem, /**< block memory */
995 const SCIP_LPINORMS* lpinorms /**< LPi pricing norms information, or NULL */
996 );
997
998/** frees LPi pricing norms information */
1000 SCIP_LPI* lpi, /**< LP interface structure */
1001 BMS_BLKMEM* blkmem, /**< block memory */
1002 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information, or NULL */
1003 );
1004
1005
1006/**@} */
1007
1008
1009
1010
1011/*
1012 * Parameter Methods
1013 */
1014
1015/**@name Parameter Methods */
1016/**@{ */
1017
1018/** gets integer parameter of LP */
1019SCIP_EXPORT
1021 SCIP_LPI* lpi, /**< LP interface structure */
1022 SCIP_LPPARAM type, /**< parameter number */
1023 int* ival /**< buffer to store the parameter value */
1024 );
1025
1026/** sets integer parameter of LP */
1027SCIP_EXPORT
1029 SCIP_LPI* lpi, /**< LP interface structure */
1030 SCIP_LPPARAM type, /**< parameter number */
1031 int ival /**< parameter value */
1032 );
1033
1034/** gets floating point parameter of LP */
1035SCIP_EXPORT
1037 SCIP_LPI* lpi, /**< LP interface structure */
1038 SCIP_LPPARAM type, /**< parameter number */
1039 SCIP_Real* dval /**< buffer to store the parameter value */
1040 );
1041
1042/** sets floating point parameter of LP */
1043SCIP_EXPORT
1045 SCIP_LPI* lpi, /**< LP interface structure */
1046 SCIP_LPPARAM type, /**< parameter number */
1047 SCIP_Real dval /**< parameter value */
1048 );
1049
1050/** interrupts the currently ongoing lp solve or disables the interrupt */
1051SCIP_EXPORT
1053 SCIP_LPI* lpi, /**< LP interface structure */
1054 SCIP_Bool interrupt /**< TRUE if interrupt should be set, FALSE if it should be disabled */
1055 );
1056
1057/**@} */
1058
1059
1060
1061
1062/*
1063 * Numerical Methods
1064 */
1065
1066/**@name Numerical Methods */
1067/**@{ */
1068
1069/** returns value treated as infinity in the LP solver */
1070SCIP_EXPORT
1072 SCIP_LPI* lpi /**< LP interface structure */
1073 );
1074
1075/** checks if given value is treated as infinity in the LP solver */
1076SCIP_EXPORT
1078 SCIP_LPI* lpi, /**< LP interface structure */
1079 SCIP_Real val /**< value to be checked for infinity */
1080 );
1081
1082/**@} */
1083
1084
1085
1086
1087/*
1088 * File Interface Methods
1089 */
1090
1091/**@name File Interface Methods */
1092/**@{ */
1093
1094/** reads LP from a file */
1095SCIP_EXPORT
1097 SCIP_LPI* lpi, /**< LP interface structure */
1098 const char* fname /**< file name */
1099 );
1100
1101/** writes LP to a file */
1102SCIP_EXPORT
1104 SCIP_LPI* lpi, /**< LP interface structure */
1105 const char* fname /**< file name */
1106 );
1107
1108/**@} */
1109
1110/**@} */
1111
1112
1113#ifdef __cplusplus
1114}
1115#endif
1116
1117#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
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
Definition: lpi_clp.cpp:1179
SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
Definition: lpi_clp.cpp:3457
SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_clp.cpp:3377
SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
Definition: lpi_clp.cpp:3824
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:3947
SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2718
SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen)
Definition: lpi_clp.cpp:1232
SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
Definition: lpi_clp.cpp:3959
SCIP_RETCODE SCIPlpiClear(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:1076
SCIP_RETCODE SCIPlpiClearState(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:3515
SCIP_Bool SCIPlpiExistsDualRay(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2565
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2478
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
Definition: lpi_clp.cpp:2995
SCIP_RETCODE SCIPlpiReadState(SCIP_LPI *lpi, const char *fname)
Definition: lpi_clp.cpp:3560
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_clp.cpp:920
SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray)
Definition: lpi_clp.cpp:2860
SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival)
Definition: lpi_clp.cpp:3676
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
Definition: lpi_clp.cpp:4029
SCIP_RETCODE SCIPlpiSetIntegralityInformation(SCIP_LPI *lpi, int ncols, int *intInfo)
Definition: lpi_clp.cpp:480
SCIP_Bool SCIPlpiIsDualInfeasible(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2623
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
Definition: lpi_clp.cpp:3861
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_clp.cpp:2311
SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
Definition: lpi_clp.cpp:3638
SCIP_RETCODE SCIPlpiGetNNonz(SCIP_LPI *lpi, int *nnonz)
Definition: lpi_clp.cpp:1465
SCIP_Bool SCIPlpiHasPrimalSolve(void)
Definition: lpi_clp.cpp:494
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_clp.cpp:2357
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
Definition: lpi_clp.cpp:1733
SCIP_Bool SCIPlpiHasBarrierSolve(void)
Definition: lpi_clp.cpp:510
SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
Definition: lpi_clp.cpp:2885
SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
Definition: lpi_clp.cpp:2794
SCIP_RETCODE SCIPlpiScaleCol(SCIP_LPI *lpi, int col, SCIP_Real scaleval)
Definition: lpi_clp.cpp:1352
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2780
SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2034
SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
Definition: lpi_clp.cpp:2433
SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
Definition: lpi_clp.cpp:3651
SCIP_Bool SCIPlpiIsIterlimExc(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2748
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
Definition: lpi_clp.cpp:1096
SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2516
SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success)
Definition: lpi_clp.cpp:1669
SCIP_RETCODE SCIPlpiWriteState(SCIP_LPI *lpi, const char *fname)
Definition: lpi_clp.cpp:3580
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
Definition: lpi_clp.cpp:643
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_clp.cpp:2332
SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
Definition: lpi_clp.cpp:1799
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2549
SCIP_RETCODE SCIPlpiReadLP(SCIP_LPI *lpi, const char *fname)
Definition: lpi_clp.cpp:4000
SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
Definition: lpi_clp.cpp:2968
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2637
SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
Definition: lpi_clp.cpp:3620
SCIP_Bool SCIPlpiIsTimelimExc(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2764
SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
Definition: lpi_clp.cpp:3550
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
Definition: lpi_clp.cpp:3720
const char * SCIPlpiGetSolverName(void)
Definition: lpi_clp.cpp:454
SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, const int *cstat, const int *rstat)
Definition: lpi_clp.cpp:3095
SCIP_Bool SCIPlpiHasPrimalRay(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2496
SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_clp.cpp:3269
SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow)
Definition: lpi_clp.cpp:992
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_clp.cpp:1486
SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_clp.cpp:3304
SCIP_RETCODE SCIPlpiGetColNames(SCIP_LPI *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
Definition: lpi_clp.cpp:1615
SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
Definition: lpi_clp.cpp:3342
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_clp.cpp:1552
SCIP_Bool SCIPlpiWasSolved(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2414
const char * SCIPlpiGetSolverDesc(void)
Definition: lpi_clp.cpp:463
SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover)
Definition: lpi_clp.cpp:1985
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2651
SCIP_RETCODE SCIPlpiGetRowNames(SCIP_LPI *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
Definition: lpi_clp.cpp:1642
SCIP_Bool SCIPlpiHasDualSolve(void)
Definition: lpi_clp.cpp:502
SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2046
SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
Definition: lpi_clp.cpp:1766
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_clp.cpp:2378
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
Definition: lpi_clp.cpp:2816
SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2584
SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat)
Definition: lpi_clp.cpp:874
SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals)
Definition: lpi_clp.cpp:1708
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_clp.cpp:3531
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2530
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:1908
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_clp.cpp:758
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:1833
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_clp.cpp:677
SCIP_Bool SCIPlpiIsDualUnbounded(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2606
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
Definition: lpi_clp.cpp:2949
SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind)
Definition: lpi_clp.cpp:3217
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
Definition: lpi_clp.cpp:531
void * SCIPlpiGetSolverPointer(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:471
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
Definition: lpi_clp.cpp:1252
SCIP_RETCODE SCIPlpiGetObjsen(SCIP_LPI *lpi, SCIP_OBJSEN *objsen)
Definition: lpi_clp.cpp:1688
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
Definition: lpi_clp.cpp:2675
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
Definition: lpi_clp.cpp:1447
SCIP_RETCODE SCIPlpiInterrupt(SCIP_LPI *lpi, SCIP_Bool interrupt)
Definition: lpi_clp.cpp:3923
SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol)
Definition: lpi_clp.cpp:837
SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat)
Definition: lpi_clp.cpp:1030
SCIP_RETCODE SCIPlpiScaleRow(SCIP_LPI *lpi, int row, SCIP_Real scaleval)
Definition: lpi_clp.cpp:1279
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
Definition: lpi_clp.cpp:1429
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
Definition: lpi_clp.cpp:3417
SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
Definition: lpi_clp.cpp:1209
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:437
type definitions for specific LP solvers interface
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
type definitions for message output methods
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63