Scippy

    SCIP

    Solving Constraint Integer Programs

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