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