Scippy

    SCIP

    Solving Constraint Integer Programs

    lpi_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 lpi_none.c
    26 * @ingroup LPIS
    27 * @brief dummy interface for the case no LP solver is needed
    28 * @author Stefan Heinz
    29 */
    30
    31/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    32
    33#include <assert.h>
    34
    35#include "lpi/lpi.h"
    36#include "scip/pub_message.h"
    37
    38#define LPINAME "NONE" /**< name of the LPI interface */
    39#define LPIINFINITY 1e20 /**< infinity value */
    40
    41
    42/* globally turn off lint warnings: */
    43/*lint --e{715}*/
    44
    45/** LP interface
    46 *
    47 * Store several statistic values about the LP. These values are only needed in order to provide a rudimentary
    48 * communication, e.g., there are asserts that check the number of rows and columns.
    49 */
    50struct SCIP_LPi
    51{
    52 int nrows; /**< number of rows */
    53 int ncols; /**< number of columns */
    54};
    55
    56
    57/*
    58 * Local Methods
    59 */
    60
    61/** error handling method */
    62static
    64 void
    65 )
    66{ /*lint --e{2707}*/
    67 SCIPerrorMessage("No LP solver available (LPS=none).\n");
    68 SCIPerrorMessage("Ensure <lp/solvefreq = -1>; note that continuous variables might require an LP-solver.\n");
    69 SCIPABORT();
    70}
    71
    72/** error handling method */
    73static
    75 void
    76 )
    77{
    78 SCIPerrorMessage("No LP solver available (LPS=none).\n");
    79 SCIPerrorMessage("Ensure <lp/solvefreq = -1>; note that continuous variables might require an LP-solver.\n");
    80}
    81
    82/*
    83 * LP Interface Methods
    84 */
    85
    86
    87/*
    88 * Miscellaneous Methods
    89 */
    90
    91/**@name Miscellaneous Methods */
    92/**@{ */
    93
    94/** gets name and version of LP solver */
    96 void
    97 )
    98{
    99 return LPINAME;
    100}
    101
    102/** gets description of LP solver (developer, webpage, ...) */
    104 void
    105 )
    106{
    107 return "dummy LP solver interface which solely purpose is to resolve references at linking";
    108}
    109
    110/** gets pointer for LP solver - use only with great care */
    112 SCIP_LPI* lpi /**< pointer to an LP interface structure */
    113 )
    114{ /*lint --e{715}*/
    115 return (void*) NULL;
    116}
    117
    118/** pass integrality information to LP solver */
    120 SCIP_LPI* lpi, /**< pointer to an LP interface structure */
    121 int ncols, /**< length of integrality array */
    122 int* intInfo /**< integrality array (0: continuous, 1: integer). May be NULL iff ncols is 0. */
    123 )
    124{ /*lint --e{715}*/
    125 SCIPerrorMessage("SCIPlpiSetIntegralityInformation() has not been implemented yet.\n");
    126 return SCIP_LPERROR;
    127}
    128
    129/** informs about availability of a primal simplex solving method */
    131 void
    132 )
    133{
    134 return FALSE;
    135}
    136
    137/** informs about availability of a dual simplex solving method */
    139 void
    140 )
    141{
    142 return FALSE;
    143}
    144
    145/** informs about availability of a barrier solving method */
    147 void
    148 )
    149{
    150 return FALSE;
    151}
    152
    153/**@} */
    154
    155
    156
    157
    158/*
    159 * LPI Creation and Destruction Methods
    160 */
    161
    162/**@name LPI Creation and Destruction Methods */
    163/**@{ */
    164
    165/** creates an LP problem object */
    167 SCIP_LPI** lpi, /**< pointer to an LP interface structure */
    168 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler to use for printing messages, or NULL */
    169 const char* name, /**< problem name */
    170 SCIP_OBJSEN objsen /**< objective sense */
    171 )
    172{ /*lint --e{715}*/
    173 assert(lpi != NULL);
    174 assert(name != NULL);
    175 SCIPdebugMessage("SCIPlpiCreate()\n");
    176 SCIPdebugMessage("Note that there is no LP solver linked to the binary\n");
    177
    178 /* create empty LPI */
    180 (*lpi)->nrows = 0;
    181 (*lpi)->ncols = 0;
    182
    183 return SCIP_OKAY;
    184}
    185
    186/** deletes an LP problem object */
    188 SCIP_LPI** lpi /**< pointer to an LP interface structure */
    189 )
    190{ /*lint --e{715}*/
    191 assert( lpi != NULL );
    192 SCIPdebugMessage("SCIPlpiFree()\n");
    193
    194 BMSfreeMemory(lpi);
    195
    196 return SCIP_OKAY;
    197}
    198
    199/**@} */
    200
    201
    202
    203
    204/*
    205 * Modification Methods
    206 */
    207
    208/**@name Modification Methods */
    209/**@{ */
    210
    211/** copies LP data with column matrix into LP solver */
    213 SCIP_LPI* lpi, /**< LP interface structure */
    214 SCIP_OBJSEN objsen, /**< objective sense */
    215 int ncols, /**< number of columns */
    216 const SCIP_Real* obj, /**< objective function values of columns */
    217 const SCIP_Real* lb, /**< lower bounds of columns */
    218 const SCIP_Real* ub, /**< upper bounds of columns */
    219 char** colnames, /**< column names, or NULL */
    220 int nrows, /**< number of rows */
    221 const SCIP_Real* lhs, /**< left hand sides of rows */
    222 const SCIP_Real* rhs, /**< right hand sides of rows */
    223 char** rownames, /**< row names, or NULL */
    224 int nnonz, /**< number of nonzero elements in the constraint matrix */
    225 const int* beg, /**< start index of each column in ind- and val-array */
    226 const int* ind, /**< row indices of constraint matrix entries */
    227 const SCIP_Real* val /**< values of constraint matrix entries */
    228 )
    229{ /*lint --e{715}*/
    230#ifndef NDEBUG
    231 {
    232 int j;
    233 for( j = 0; j < nnonz; j++ )
    234 assert( val[j] != 0 );
    235 }
    236#endif
    237
    238 assert( lpi != NULL );
    239 assert(lhs != NULL);
    240 assert(rhs != NULL);
    241 assert(obj != NULL);
    242 assert(lb != NULL);
    243 assert(ub != NULL);
    244 assert(beg != NULL);
    245 assert(ind != NULL);
    246 assert(val != NULL);
    247
    248 lpi->nrows = nrows;
    249 lpi->ncols = ncols;
    250 assert( lpi->nrows >= 0 );
    251 assert( lpi->ncols >= 0 );
    252
    253 return SCIP_OKAY;
    254}
    255
    256/** adds columns to the LP */
    258 SCIP_LPI* lpi, /**< LP interface structure */
    259 int ncols, /**< number of columns to be added */
    260 const SCIP_Real* obj, /**< objective function values of new columns */
    261 const SCIP_Real* lb, /**< lower bounds of new columns */
    262 const SCIP_Real* ub, /**< upper bounds of new columns */
    263 char** colnames, /**< column names, or NULL */
    264 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
    265 const int* beg, /**< start index of each column in ind- and val-array, or NULL if nnonz == 0 */
    266 const int* ind, /**< row indices of constraint matrix entries, or NULL if nnonz == 0 */
    267 const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
    268 )
    269{ /*lint --e{715}*/
    270 assert( lpi != NULL );
    271 assert( lpi->ncols >= 0 );
    272 assert(obj != NULL);
    273 assert(lb != NULL);
    274 assert(ub != NULL);
    275 assert(nnonz == 0 || beg != NULL);
    276 assert(nnonz == 0 || ind != NULL);
    277 assert(nnonz == 0 || val != NULL);
    278 assert(nnonz >= 0);
    279 assert(ncols >= 0);
    280
    281#ifndef NDEBUG
    282 {
    283 int j;
    284 for( j = 0; j < nnonz; j++ )
    285 {
    286 assert( val[j] != 0.0 );
    287 /* perform check that no new rows are added - this is forbidden */
    288 assert( 0 <= ind[j] && ind[j] < lpi->nrows );
    289 }
    290 }
    291#endif
    292
    293 lpi->ncols += ncols;
    294
    295 return SCIP_OKAY;
    296}
    297
    298/** deletes all columns in the given range from LP */
    300 SCIP_LPI* lpi, /**< LP interface structure */
    301 int firstcol, /**< first column to be deleted */
    302 int lastcol /**< last column to be deleted */
    303 )
    304{ /*lint --e{715}*/
    305 assert(lpi != NULL);
    306 assert(firstcol >= 0);
    307 assert(lastcol < lpi->ncols);
    308 assert(firstcol <= lastcol + 1);
    309 lpi->ncols -= lastcol - firstcol + 1;
    310 assert(lpi->ncols >= 0);
    311
    312 return SCIP_OKAY;
    313}
    314
    315/** deletes columns from SCIP_LP; the new position of a column must not be greater that its old position */
    317 SCIP_LPI* lpi, /**< LP interface structure */
    318 int* dstat /**< deletion status of columns
    319 * input: 1 if column should be deleted, 0 if not
    320 * output: new position of column, -1 if column was deleted */
    321 )
    322{ /*lint --e{715}*/
    323 int cnt = 0;
    324 int j;
    325
    326 assert( lpi != NULL );
    327 assert( dstat != NULL );
    328 assert( lpi->ncols >= 0 );
    329
    330 for (j = 0; j < lpi->ncols; ++j)
    331 {
    332 if ( dstat[j] )
    333 {
    334 ++cnt;
    335 dstat[j] = -1;
    336 }
    337 else
    338 dstat[j] = cnt;
    339 }
    340 lpi->ncols -= cnt;
    341 assert( lpi->ncols >= 0 );
    342
    343 return SCIP_OKAY;
    344}
    345
    346/** adds rows to the LP */
    348 SCIP_LPI* lpi, /**< LP interface structure */
    349 int nrows, /**< number of rows to be added */
    350 const SCIP_Real* lhs, /**< left hand sides of new rows */
    351 const SCIP_Real* rhs, /**< right hand sides of new rows */
    352 char** rownames, /**< row names, or NULL */
    353 int nnonz, /**< number of nonzero elements to be added to the constraint matrix */
    354 const int* beg, /**< start index of each row in ind- and val-array, or NULL if nnonz == 0 */
    355 const int* ind, /**< column indices of constraint matrix entries, or NULL if nnonz == 0 */
    356 const SCIP_Real* val /**< values of constraint matrix entries, or NULL if nnonz == 0 */
    357 )
    358{ /*lint --e{715}*/
    359 assert( lpi != NULL );
    360 assert( lpi->nrows >= 0 );
    361 assert(lhs != NULL);
    362 assert(rhs != NULL);
    363 assert(nnonz == 0 || beg != NULL);
    364 assert(nnonz == 0 || ind != NULL);
    365 assert(nnonz == 0 || val != NULL);
    366
    367#ifndef NDEBUG
    368 /* perform check that no new columns are added - this is forbidden */
    369 {
    370 int j;
    371 for (j = 0; j < nnonz; ++j)
    372 {
    373 assert( val[j] != 0.0 );
    374 assert( 0 <= ind[j] && ind[j] < lpi->ncols );
    375 }
    376 }
    377#endif
    378
    379 lpi->nrows += nrows;
    380
    381 return SCIP_OKAY;
    382}
    383
    384/** deletes all rows in the given range from LP */
    386 SCIP_LPI* lpi, /**< LP interface structure */
    387 int firstrow, /**< first row to be deleted */
    388 int lastrow /**< last row to be deleted */
    389 )
    390{ /*lint --e{715}*/
    391 assert(lpi != NULL);
    392 assert(firstrow >= 0);
    393 assert(lastrow < lpi->nrows);
    394 assert(firstrow <= lastrow + 1);
    395 lpi->nrows -= lastrow - firstrow + 1;
    396 assert(lpi->nrows >= 0);
    397
    398 return SCIP_OKAY;
    399}
    400
    401/** deletes rows from SCIP_LP; the new position of a row must not be greater that its old position */
    403 SCIP_LPI* lpi, /**< LP interface structure */
    404 int* dstat /**< deletion status of rows
    405 * input: 1 if row should be deleted, 0 if not
    406 * output: new position of row, -1 if row was deleted */
    407 )
    408{ /*lint --e{715}*/
    409 int cnt = 0;
    410 int i;
    411
    412 assert( lpi != NULL );
    413 assert( dstat != NULL );
    414 assert( lpi->nrows >= 0 );
    415
    416 for (i = 0; i < lpi->nrows; ++i)
    417 {
    418 if ( dstat[i] )
    419 {
    420 ++cnt;
    421 dstat[i] = -1;
    422 }
    423 else
    424 dstat[i] = cnt;
    425 }
    426 lpi->nrows -= cnt;
    427 assert( lpi->nrows >= 0 );
    428
    429 return SCIP_OKAY;
    430}
    431
    432/** clears the whole LP */
    434 SCIP_LPI* lpi /**< LP interface structure */
    435 )
    436{ /*lint --e{715}*/
    437 assert( lpi != NULL );
    438 assert( lpi->nrows >= 0 );
    439 assert( lpi->ncols >= 0 );
    440
    441 lpi->nrows = 0;
    442 lpi->ncols = 0;
    443
    444 return SCIP_OKAY;
    445}
    446
    447/** changes lower and upper bounds of columns */
    449 SCIP_LPI* lpi, /**< LP interface structure */
    450 int ncols, /**< number of columns to change bounds for */
    451 const int* ind, /**< column indices or NULL if ncols is zero */
    452 const SCIP_Real* lb, /**< values for the new lower bounds or NULL if ncols is zero */
    453 const SCIP_Real* ub /**< values for the new upper bounds or NULL if ncols is zero */
    454 )
    455{ /*lint --e{715}*/
    456 int j;
    457
    458 assert(ncols == 0 || (ind != NULL && lb != NULL && ub != NULL));
    459
    460 if( ncols <= 0 )
    461 return SCIP_OKAY;
    462
    463 for (j = 0; j < ncols; ++j)
    464 {
    465 if ( SCIPlpiIsInfinity(lpi, lb[j]) )
    466 {
    467 SCIPerrorMessage("LP Error: fixing lower bound for variable %d to infinity.\n", ind[j]);
    468 return SCIP_LPERROR;
    469 }
    470 if ( SCIPlpiIsInfinity(lpi, -ub[j]) )
    471 {
    472 SCIPerrorMessage("LP Error: fixing upper bound for variable %d to -infinity.\n", ind[j]);
    473 return SCIP_LPERROR;
    474 }
    475 }
    476
    477 return SCIP_OKAY;
    478}
    479
    480/** changes left and right hand sides of rows */
    482 SCIP_LPI* lpi, /**< LP interface structure */
    483 int nrows, /**< number of rows to change sides for */
    484 const int* ind, /**< row indices */
    485 const SCIP_Real* lhs, /**< new values for left hand sides */
    486 const SCIP_Real* rhs /**< new values for right hand sides */
    487 )
    488{ /*lint --e{715}*/
    489 assert(lpi != NULL);
    490 assert(ind != NULL);
    491 assert(lhs != NULL);
    492 assert(rhs != NULL);
    493 return SCIP_OKAY;
    494}
    495
    496/** changes a single coefficient */
    498 SCIP_LPI* lpi, /**< LP interface structure */
    499 int row, /**< row number of coefficient to change */
    500 int col, /**< column number of coefficient to change */
    501 SCIP_Real newval /**< new value of coefficient */
    502 )
    503{ /*lint --e{715}*/
    504 assert(lpi != NULL);
    505 return SCIP_OKAY;
    506}
    507
    508/** changes the objective sense */
    510 SCIP_LPI* lpi, /**< LP interface structure */
    511 SCIP_OBJSEN objsen /**< new objective sense */
    512 )
    513{ /*lint --e{715}*/
    514 assert(lpi != NULL);
    515 return SCIP_OKAY;
    516}
    517
    518/** changes objective values of columns in the LP */
    520 SCIP_LPI* lpi, /**< LP interface structure */
    521 int ncols, /**< number of columns to change objective value for */
    522 const int* ind, /**< column indices to change objective value for */
    523 const SCIP_Real* obj /**< new objective values for columns */
    524 )
    525{ /*lint --e{715}*/
    526 assert(lpi != NULL);
    527 assert(ind != NULL);
    528 assert(obj != NULL);
    529 return SCIP_OKAY;
    530}
    531
    532/** multiplies a row with a non-zero scalar; for negative scalars, the row's sense is switched accordingly */
    534 SCIP_LPI* lpi, /**< LP interface structure */
    535 int row, /**< row number to scale */
    536 SCIP_Real scaleval /**< scaling multiplier */
    537 )
    538{ /*lint --e{715}*/
    539 assert(lpi != NULL);
    540 return SCIP_OKAY;
    541}
    542
    543/** multiplies a column with a non-zero scalar; the objective value is multiplied with the scalar, and the bounds
    544 * are divided by the scalar; for negative scalars, the column's bounds are switched
    545 */
    547 SCIP_LPI* lpi, /**< LP interface structure */
    548 int col, /**< column number to scale */
    549 SCIP_Real scaleval /**< scaling multiplier */
    550 )
    551{ /*lint --e{715}*/
    552 assert(lpi != NULL);
    553 return SCIP_OKAY;
    554}
    555
    556/**@} */
    557
    558
    559
    560
    561/*
    562 * Data Accessing Methods
    563 */
    564
    565/**@name Data Accessing Methods */
    566/**@{ */
    567
    568/** gets the number of rows in the LP */
    570 SCIP_LPI* lpi, /**< LP interface structure */
    571 int* nrows /**< pointer to store the number of rows */
    572 )
    573{ /*lint --e{715}*/
    574 assert( lpi != NULL );
    575 assert( nrows != NULL );
    576 assert( lpi->nrows >= 0 );
    577
    578 *nrows = lpi->nrows;
    579
    580 return SCIP_OKAY;
    581}
    582
    583/** gets the number of columns in the LP */
    585 SCIP_LPI* lpi, /**< LP interface structure */
    586 int* ncols /**< pointer to store the number of cols */
    587 )
    588{ /*lint --e{715}*/
    589 assert( lpi != NULL );
    590 assert( ncols != NULL );
    591 assert( lpi->ncols >= 0 );
    592
    593 *ncols = lpi->ncols;
    594
    595 return SCIP_OKAY;
    596}
    597
    598/** gets the number of nonzero elements in the LP constraint matrix */
    600 SCIP_LPI* lpi, /**< LP interface structure */
    601 int* nnonz /**< pointer to store the number of nonzeros */
    602 )
    603{ /*lint --e{715}*/
    604 assert(nnonz != NULL);
    605 assert(lpi != NULL);
    606 errorMessage();
    607 return SCIP_PLUGINNOTFOUND;
    608}
    609
    610/** gets columns from LP problem object; the arrays have to be large enough to store all values
    611 * Either both, lb and ub, have to be NULL, or both have to be non-NULL,
    612 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
    613 */
    615 SCIP_LPI* lpi, /**< LP interface structure */
    616 int firstcol, /**< first column to get from LP */
    617 int lastcol, /**< last column to get from LP */
    618 SCIP_Real* lb, /**< buffer to store the lower bound vector, or NULL */
    619 SCIP_Real* ub, /**< buffer to store the upper bound vector, or NULL */
    620 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
    621 int* beg, /**< buffer to store start index of each column in ind- and val-array, or NULL */
    622 int* ind, /**< buffer to store row indices of constraint matrix entries, or NULL */
    623 SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
    624 )
    625{ /*lint --e{715}*/
    626 assert(lpi != NULL);
    627 assert(firstcol >= 0);
    628 assert(lastcol < lpi->ncols);
    629 assert(firstcol <= lastcol + 1);
    630
    631 errorMessage();
    632
    633 return SCIP_PLUGINNOTFOUND;
    634}
    635
    636/** gets rows from LP problem object; the arrays have to be large enough to store all values.
    637 * Either both, lhs and rhs, have to be NULL, or both have to be non-NULL,
    638 * either nnonz, beg, ind, and val have to be NULL, or all of them have to be non-NULL.
    639 */
    641 SCIP_LPI* lpi, /**< LP interface structure */
    642 int firstrow, /**< first row to get from LP */
    643 int lastrow, /**< last row to get from LP */
    644 SCIP_Real* lhs, /**< buffer to store left hand side vector, or NULL */
    645 SCIP_Real* rhs, /**< buffer to store right hand side vector, or NULL */
    646 int* nnonz, /**< pointer to store the number of nonzero elements returned, or NULL */
    647 int* beg, /**< buffer to store start index of each row in ind- and val-array, or NULL */
    648 int* ind, /**< buffer to store column indices of constraint matrix entries, or NULL */
    649 SCIP_Real* val /**< buffer to store values of constraint matrix entries, or NULL */
    650 )
    651{ /*lint --e{715}*/
    652 assert(lpi != NULL);
    653 assert(firstrow >= 0);
    654 assert(lastrow < lpi->nrows);
    655 assert(firstrow <= lastrow + 1);
    656
    657 errorMessage();
    658
    659 return SCIP_PLUGINNOTFOUND;
    660}
    661
    662/** gets column names */
    664 SCIP_LPI* lpi, /**< LP interface structure */
    665 int firstcol, /**< first column to get name from LP */
    666 int lastcol, /**< last column to get name from LP */
    667 char** colnames, /**< pointers to column names (of size at least lastcol-firstcol+1) or NULL if namestoragesize is zero */
    668 char* namestorage, /**< storage for col names or NULL if namestoragesize is zero */
    669 int namestoragesize, /**< size of namestorage (if 0, storageleft returns the storage needed) */
    670 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
    671 )
    672{ /*lint --e{715}*/
    673 assert(lpi != NULL);
    674 assert(colnames != NULL || namestoragesize == 0);
    675 assert(namestorage != NULL || namestoragesize == 0);
    676 assert(namestoragesize >= 0);
    677 assert(storageleft != NULL);
    678 assert(firstcol >= 0);
    679 assert(lastcol < lpi->ncols);
    680 assert(firstcol <= lastcol + 1);
    681
    682 errorMessage();
    683
    684 return SCIP_PLUGINNOTFOUND;
    685}
    686
    687/** gets row names */
    689 SCIP_LPI* lpi, /**< LP interface structure */
    690 int firstrow, /**< first row to get name from LP */
    691 int lastrow, /**< last row to get name from LP */
    692 char** rownames, /**< pointers to row names (of size at least lastrow-firstrow+1) or NULL if namestoragesize is zero */
    693 char* namestorage, /**< storage for row names or NULL if namestoragesize is zero */
    694 int namestoragesize, /**< size of namestorage (if 0, -storageleft returns the storage needed) */
    695 int* storageleft /**< amount of storage left (if < 0 the namestorage was not big enough) or NULL if namestoragesize is zero */
    696 )
    697{ /*lint --e{715}*/
    698 assert(lpi != NULL);
    699 assert(rownames != NULL || namestoragesize == 0);
    700 assert(namestorage != NULL || namestoragesize == 0);
    701 assert(namestoragesize >= 0);
    702 assert(storageleft != NULL);
    703 assert(firstrow >= 0);
    704 assert(lastrow < lpi->nrows);
    705 assert(firstrow <= lastrow + 1);
    706
    707 errorMessage();
    708
    709 return SCIP_PLUGINNOTFOUND;
    710}
    711
    712/** gets the objective sense of the LP */
    714 SCIP_LPI* lpi, /**< LP interface structure */
    715 SCIP_OBJSEN* objsen /**< pointer to store objective sense */
    716 )
    717{ /*lint --e{715}*/
    718 errorMessage();
    719 return SCIP_PLUGINNOTFOUND;
    720}
    721
    722/** gets objective coefficients from LP problem object */
    724 SCIP_LPI* lpi, /**< LP interface structure */
    725 int firstcol, /**< first column to get objective coefficient for */
    726 int lastcol, /**< last column to get objective coefficient for */
    727 SCIP_Real* vals /**< array to store objective coefficients */
    728 )
    729{ /*lint --e{715}*/
    730 assert(lpi != NULL);
    731 assert(vals != NULL);
    732 assert(firstcol >= 0);
    733 assert(lastcol < lpi->ncols);
    734 assert(firstcol <= lastcol + 1);
    735
    736 errorMessage();
    737
    738 return SCIP_PLUGINNOTFOUND;
    739}
    740
    741/** gets current bounds from LP problem object */
    743 SCIP_LPI* lpi, /**< LP interface structure */
    744 int firstcol, /**< first column to get bounds for */
    745 int lastcol, /**< last column to get bounds for */
    746 SCIP_Real* lbs, /**< array to store lower bound values, or NULL */
    747 SCIP_Real* ubs /**< array to store upper bound values, or NULL */
    748 )
    749{ /*lint --e{715}*/
    750 assert(lpi != NULL);
    751 assert(firstcol >= 0);
    752 assert(lastcol < lpi->ncols);
    753 assert(firstcol <= lastcol + 1);
    754
    755 errorMessage();
    756
    757 return SCIP_PLUGINNOTFOUND;
    758}
    759
    760/** gets current row sides from LP problem object */
    762 SCIP_LPI* lpi, /**< LP interface structure */
    763 int firstrow, /**< first row to get sides for */
    764 int lastrow, /**< last row to get sides for */
    765 SCIP_Real* lhss, /**< array to store left hand side values, or NULL */
    766 SCIP_Real* rhss /**< array to store right hand side values, or NULL */
    767 )
    768{ /*lint --e{715}*/
    769 assert(lpi != NULL);
    770 assert(firstrow >= 0);
    771 assert(lastrow < lpi->nrows);
    772 assert(firstrow <= lastrow + 1);
    773
    774 errorMessage();
    775
    776 return SCIP_PLUGINNOTFOUND;
    777}
    778
    779/** gets a single coefficient */
    781 SCIP_LPI* lpi, /**< LP interface structure */
    782 int row, /**< row number of coefficient */
    783 int col, /**< column number of coefficient */
    784 SCIP_Real* val /**< pointer to store the value of the coefficient */
    785 )
    786{ /*lint --e{715}*/
    787 assert(lpi != NULL);
    788 assert(val != NULL);
    789 errorMessage();
    790 return SCIP_PLUGINNOTFOUND;
    791}
    792
    793/**@} */
    794
    795
    796
    797
    798/*
    799 * Solving Methods
    800 */
    801
    802/**@name Solving Methods */
    803/**@{ */
    804
    805/** calls primal simplex to solve the LP */
    807 SCIP_LPI* lpi /**< LP interface structure */
    808 )
    809{ /*lint --e{715}*/
    810 assert(lpi != NULL);
    811 errorMessage();
    812 return SCIP_PLUGINNOTFOUND;
    813}
    814
    815/** calls dual simplex to solve the LP */
    817 SCIP_LPI* lpi /**< LP interface structure */
    818 )
    819{ /*lint --e{715}*/
    820 assert(lpi != NULL);
    821 errorMessage();
    822 return SCIP_PLUGINNOTFOUND;
    823}
    824
    825/** calls barrier or interior point algorithm to solve the LP with crossover to simplex basis */
    827 SCIP_LPI* lpi, /**< LP interface structure */
    828 SCIP_Bool crossover /**< perform crossover */
    829 )
    830{ /*lint --e{715}*/
    831 assert(lpi != NULL);
    832 errorMessage();
    833 return SCIP_PLUGINNOTFOUND;
    834}
    835
    836/** start strong branching - call before any strong branching */
    838 SCIP_LPI* lpi /**< LP interface structure */
    839 )
    840{ /*lint --e{715}*/
    841 assert(lpi != NULL);
    842 return SCIP_OKAY;
    843}
    844
    845/** end strong branching - call after any strong branching */
    847 SCIP_LPI* lpi /**< LP interface structure */
    848 )
    849{ /*lint --e{715}*/
    850 assert(lpi != NULL);
    851 return SCIP_OKAY;
    852}
    853
    854/** performs strong branching iterations on one @b fractional candidate */
    856 SCIP_LPI* lpi, /**< LP interface structure */
    857 int col, /**< column to apply strong branching on */
    858 SCIP_Real psol, /**< fractional current primal solution value of column */
    859 int itlim, /**< iteration limit for strong branchings */
    860 SCIP_Real* down, /**< stores dual bound after branching column down */
    861 SCIP_Real* up, /**< stores dual bound after branching column up */
    862 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
    863 * otherwise, it can only be used as an estimate value */
    864 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
    865 * otherwise, it can only be used as an estimate value */
    866 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
    867 )
    868{ /*lint --e{715}*/
    869 assert(lpi != NULL);
    870 assert( down != NULL );
    871 assert( up != NULL );
    872 assert( downvalid != NULL );
    873 assert( upvalid != NULL );
    874 errorMessage();
    875 return SCIP_PLUGINNOTFOUND;
    876}
    877
    878/** performs strong branching iterations on given @b fractional candidates */
    880 SCIP_LPI* lpi, /**< LP interface structure */
    881 int* cols, /**< columns to apply strong branching on */
    882 int ncols, /**< number of columns */
    883 SCIP_Real* psols, /**< fractional current primal solution values of columns */
    884 int itlim, /**< iteration limit for strong branchings */
    885 SCIP_Real* down, /**< stores dual bounds after branching columns down */
    886 SCIP_Real* up, /**< stores dual bounds after branching columns up */
    887 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
    888 * otherwise, they can only be used as an estimate values */
    889 SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
    890 * otherwise, they can only be used as an estimate values */
    891 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
    892 )
    893{ /*lint --e{715}*/
    894 assert(lpi != NULL);
    895 assert( cols != NULL );
    896 assert( psols != NULL );
    897 assert( down != NULL );
    898 assert( up != NULL );
    899 assert( downvalid != NULL );
    900 assert( upvalid != NULL );
    901 errorMessage();
    902 return SCIP_PLUGINNOTFOUND;
    903}
    904
    905/** performs strong branching iterations on one candidate with @b integral value */
    907 SCIP_LPI* lpi, /**< LP interface structure */
    908 int col, /**< column to apply strong branching on */
    909 SCIP_Real psol, /**< current integral primal solution value of column */
    910 int itlim, /**< iteration limit for strong branchings */
    911 SCIP_Real* down, /**< stores dual bound after branching column down */
    912 SCIP_Real* up, /**< stores dual bound after branching column up */
    913 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound;
    914 * otherwise, it can only be used as an estimate value */
    915 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound;
    916 * otherwise, it can only be used as an estimate value */
    917 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
    918 )
    919{ /*lint --e{715}*/
    920 assert(lpi != NULL);
    921 assert( down != NULL );
    922 assert( up != NULL );
    923 assert( downvalid != NULL );
    924 assert( upvalid != NULL );
    925 errorMessage();
    926 return SCIP_PLUGINNOTFOUND;
    927}
    928
    929/** performs strong branching iterations on given candidates with @b integral values */
    931 SCIP_LPI* lpi, /**< LP interface structure */
    932 int* cols, /**< columns to apply strong branching on */
    933 int ncols, /**< number of columns */
    934 SCIP_Real* psols, /**< current integral primal solution values of columns */
    935 int itlim, /**< iteration limit for strong branchings */
    936 SCIP_Real* down, /**< stores dual bounds after branching columns down */
    937 SCIP_Real* up, /**< stores dual bounds after branching columns up */
    938 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds;
    939 * otherwise, they can only be used as an estimate values */
    940 SCIP_Bool* upvalid, /**< stores whether the returned up values are a valid dual bounds;
    941 * otherwise, they can only be used as an estimate values */
    942 int* iter /**< stores total number of strong branching iterations, or -1; may be NULL */
    943 )
    944{ /*lint --e{715}*/
    945 assert(lpi != NULL);
    946 assert( cols != NULL );
    947 assert( psols != NULL );
    948 assert( down != NULL );
    949 assert( up != NULL );
    950 assert( downvalid != NULL );
    951 assert( upvalid != NULL );
    952 errorMessage();
    953 return SCIP_PLUGINNOTFOUND;
    954}
    955/**@} */
    956
    957
    958
    959
    960/*
    961 * Solution Information Methods
    962 */
    963
    964/**@name Solution Information Methods */
    965/**@{ */
    966
    967/** returns whether a solve method was called after the last modification of the LP */
    969 SCIP_LPI* lpi /**< LP interface structure */
    970 )
    971{ /*lint --e{715}*/
    972 assert(lpi != NULL);
    974 return FALSE;
    975}
    976
    977/** gets information about primal and dual feasibility of the current LP solution
    978 *
    979 * The feasibility information is with respect to the last solving call and it is only relevant if SCIPlpiWasSolved()
    980 * returns true. If the LP is changed, this information might be invalidated.
    981 *
    982 * Note that @a primalfeasible and @a dualfeasible should only return true if the solver has proved the respective LP to
    983 * be feasible. Thus, the return values should be equal to the values of SCIPlpiIsPrimalFeasible() and
    984 * SCIPlpiIsDualFeasible(), respectively. Note that if feasibility cannot be proved, they should return false (even if
    985 * the problem might actually be feasible).
    986 */
    988 SCIP_LPI* lpi, /**< LP interface structure */
    989 SCIP_Bool* primalfeasible, /**< pointer to store primal feasibility status */
    990 SCIP_Bool* dualfeasible /**< pointer to store dual feasibility status */
    991 )
    992{ /*lint --e{715}*/
    993 assert(lpi != NULL);
    994 assert(primalfeasible != NULL);
    995 assert(dualfeasible != NULL);
    996 errorMessage();
    997 return SCIP_PLUGINNOTFOUND;
    998}
    999
    1000/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point);
    1001 * this does not necessarily mean, that the solver knows and can return the primal ray
    1002 */
    1004 SCIP_LPI* lpi /**< LP interface structure */
    1005 )
    1006{ /*lint --e{715}*/
    1007 assert(lpi != NULL);
    1009 return FALSE;
    1010}
    1011
    1012/** returns TRUE iff LP is proven to have a primal unbounded ray (but not necessary a primal feasible point),
    1013 * and the solver knows and can return the primal ray
    1014 */
    1016 SCIP_LPI* lpi /**< LP interface structure */
    1017 )
    1018{ /*lint --e{715}*/
    1019 assert(lpi != NULL);
    1021 return FALSE;
    1022}
    1023
    1024/** returns TRUE iff LP is proven to be primal unbounded */
    1026 SCIP_LPI* lpi /**< LP interface structure */
    1027 )
    1028{ /*lint --e{715}*/
    1029 assert(lpi != NULL);
    1031 return FALSE;
    1032}
    1033
    1034/** returns TRUE iff LP is proven to be primal infeasible */
    1036 SCIP_LPI* lpi /**< LP interface structure */
    1037 )
    1038{ /*lint --e{715}*/
    1039 assert(lpi != NULL);
    1041 return FALSE;
    1042}
    1043
    1044/** returns TRUE iff LP is proven to be primal feasible */
    1046 SCIP_LPI* lpi /**< LP interface structure */
    1047 )
    1048{ /*lint --e{715}*/
    1049 assert(lpi != NULL);
    1051 return FALSE;
    1052}
    1053
    1054/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point);
    1055 * this does not necessarily mean, that the solver knows and can return the dual ray
    1056 */
    1058 SCIP_LPI* lpi /**< LP interface structure */
    1059 )
    1060{ /*lint --e{715}*/
    1061 assert(lpi != NULL);
    1063 return FALSE;
    1064}
    1065
    1066/** returns TRUE iff LP is proven to have a dual unbounded ray (but not necessary a dual feasible point),
    1067 * and the solver knows and can return the dual ray
    1068 */
    1070 SCIP_LPI* lpi /**< LP interface structure */
    1071 )
    1072{ /*lint --e{715}*/
    1073 assert(lpi != NULL);
    1075 return FALSE;
    1076}
    1077
    1078/** returns TRUE iff LP is proven to be dual unbounded */
    1080 SCIP_LPI* lpi /**< LP interface structure */
    1081 )
    1082{ /*lint --e{715}*/
    1083 assert(lpi != NULL);
    1085 return FALSE;
    1086}
    1087
    1088/** returns TRUE iff LP is proven to be dual infeasible */
    1090 SCIP_LPI* lpi /**< LP interface structure */
    1091 )
    1092{ /*lint --e{715}*/
    1093 assert(lpi != NULL);
    1095 return FALSE;
    1096}
    1097
    1098/** returns TRUE iff LP is proven to be dual feasible */
    1100 SCIP_LPI* lpi /**< LP interface structure */
    1101 )
    1102{ /*lint --e{715}*/
    1103 assert(lpi != NULL);
    1105 return FALSE;
    1106}
    1107
    1108/** returns TRUE iff LP was solved to optimality */
    1110 SCIP_LPI* lpi /**< LP interface structure */
    1111 )
    1112{ /*lint --e{715}*/
    1113 assert(lpi != NULL);
    1115 return FALSE;
    1116}
    1117
    1118/** returns TRUE iff current LP solution is stable
    1119 *
    1120 * This function should return true if the solution is reliable, i.e., feasible and optimal (or proven
    1121 * infeasible/unbounded) with respect to the original problem. The optimality status might be with respect to a scaled
    1122 * version of the problem, but the solution might not be feasible to the unscaled original problem; in this case,
    1123 * SCIPlpiIsStable() should return false.
    1124 */
    1126 SCIP_LPI* lpi /**< LP interface structure */
    1127 )
    1128{ /*lint --e{715}*/
    1129 assert(lpi != NULL);
    1131 return FALSE;
    1132}
    1133
    1134/** returns TRUE iff the objective limit was reached */
    1136 SCIP_LPI* lpi /**< LP interface structure */
    1137 )
    1138{ /*lint --e{715}*/
    1139 assert(lpi != NULL);
    1141 return FALSE;
    1142}
    1143
    1144/** returns TRUE iff the iteration limit was reached */
    1146 SCIP_LPI* lpi /**< LP interface structure */
    1147 )
    1148{ /*lint --e{715}*/
    1149 assert(lpi != NULL);
    1151 return FALSE;
    1152}
    1153
    1154/** returns TRUE iff the time limit was reached */
    1156 SCIP_LPI* lpi /**< LP interface structure */
    1157 )
    1158{ /*lint --e{715}*/
    1159 assert(lpi != NULL);
    1161 return FALSE;
    1162}
    1163
    1164/** returns the internal solution status of the solver */
    1166 SCIP_LPI* lpi /**< LP interface structure */
    1167 )
    1168{ /*lint --e{715}*/
    1169 assert(lpi != NULL);
    1171 return FALSE;
    1172}
    1173
    1174/** tries to reset the internal status of the LP solver in order to ignore an instability of the last solving call */
    1176 SCIP_LPI* lpi, /**< LP interface structure */
    1177 SCIP_Bool* success /**< pointer to store, whether the instability could be ignored */
    1178 )
    1179{ /*lint --e{715}*/
    1180 assert(lpi != NULL);
    1181 assert(success != NULL);
    1182 errorMessage();
    1183 return SCIP_PLUGINNOTFOUND;
    1184}
    1185
    1186/** gets objective value of solution */
    1188 SCIP_LPI* lpi, /**< LP interface structure */
    1189 SCIP_Real* objval /**< stores the objective value */
    1190 )
    1191{ /*lint --e{715}*/
    1192 assert(lpi != NULL);
    1193 assert(objval != NULL);
    1194 errorMessage();
    1195 return SCIP_PLUGINNOTFOUND;
    1196}
    1197
    1198/** gets primal and dual solution vectors for feasible LPs
    1199 *
    1200 * Before calling this function, the caller must ensure that the LP has been solved to optimality, i.e., that
    1201 * SCIPlpiIsOptimal() returns true.
    1202 */
    1204 SCIP_LPI* lpi, /**< LP interface structure */
    1205 SCIP_Real* objval, /**< stores the objective value, may be NULL if not needed */
    1206 SCIP_Real* primsol, /**< primal solution vector, may be NULL if not needed */
    1207 SCIP_Real* dualsol, /**< dual solution vector, may be NULL if not needed */
    1208 SCIP_Real* activity, /**< row activity vector, may be NULL if not needed */
    1209 SCIP_Real* redcost /**< reduced cost vector, may be NULL if not needed */
    1210 )
    1211{ /*lint --e{715}*/
    1212 assert(lpi != NULL);
    1213 errorMessage();
    1214 return SCIP_PLUGINNOTFOUND;
    1215}
    1216
    1217/** gets primal ray for unbounded LPs */
    1219 SCIP_LPI* lpi, /**< LP interface structure */
    1220 SCIP_Real* ray /**< primal ray */
    1221 )
    1222{ /*lint --e{715}*/
    1223 assert(lpi != NULL);
    1224 assert(ray != NULL);
    1225 errorMessage();
    1226 return SCIP_PLUGINNOTFOUND;
    1227}
    1228
    1229/** gets dual Farkas proof for infeasibility */
    1231 SCIP_LPI* lpi, /**< LP interface structure */
    1232 SCIP_Real* dualfarkas /**< dual Farkas row multipliers */
    1233 )
    1234{ /*lint --e{715}*/
    1235 assert(lpi != NULL);
    1236 assert(dualfarkas != NULL);
    1237 errorMessage();
    1238 return SCIP_PLUGINNOTFOUND;
    1239}
    1240
    1241/** gets the number of LP iterations of the last solve call */
    1243 SCIP_LPI* lpi, /**< LP interface structure */
    1244 int* iterations /**< pointer to store the number of iterations of the last solve call */
    1245 )
    1246{ /*lint --e{715}*/
    1247 assert(lpi != NULL);
    1248 assert(iterations != NULL);
    1249 errorMessage();
    1250 return SCIP_PLUGINNOTFOUND;
    1251}
    1252
    1253/** gets information about the quality of an LP solution
    1254 *
    1255 * Such information is usually only available, if also a (maybe not optimal) solution is available.
    1256 * The LPI should return SCIP_INVALID for @p quality, if the requested quantity is not available.
    1257 */
    1259 SCIP_LPI* lpi, /**< LP interface structure */
    1260 SCIP_LPSOLQUALITY qualityindicator, /**< indicates which quality should be returned */
    1261 SCIP_Real* quality /**< pointer to store quality number */
    1262 )
    1263{ /*lint --e{715}*/
    1264 assert(lpi != NULL);
    1265 assert(quality != NULL);
    1266
    1267 *quality = SCIP_INVALID;
    1268
    1269 return SCIP_OKAY;
    1270}
    1271
    1272/**@} */
    1273
    1274
    1275
    1276
    1277/*
    1278 * LP Basis Methods
    1279 */
    1280
    1281/**@name LP Basis Methods */
    1282/**@{ */
    1283
    1284/** gets current basis status for columns and rows; arrays must be large enough to store the basis status */
    1286 SCIP_LPI* lpi, /**< LP interface structure */
    1287 int* cstat, /**< array to store column basis status, or NULL */
    1288 int* rstat /**< array to store row basis status, or NULL */
    1289 )
    1290{ /*lint --e{715}*/
    1291 assert(lpi != NULL);
    1292 errorMessage();
    1293 return SCIP_PLUGINNOTFOUND;
    1294}
    1295
    1296/** sets current basis status for columns and rows */
    1298 SCIP_LPI* lpi, /**< LP interface structure */
    1299 const int* cstat, /**< array with column basis status */
    1300 const int* rstat /**< array with row basis status */
    1301 )
    1302{ /*lint --e{715}*/
    1303 assert(lpi != NULL);
    1304 assert(cstat != NULL);
    1305 assert(rstat != NULL);
    1306 errorMessage();
    1307 return SCIP_PLUGINNOTFOUND;
    1308}
    1309
    1310/** returns the indices of the basic columns and rows; basic column n gives value n, basic row m gives value -1-m */
    1312 SCIP_LPI* lpi, /**< LP interface structure */
    1313 int* bind /**< pointer to store basis indices ready to keep number of rows entries */
    1314 )
    1315{ /*lint --e{715}*/
    1316 assert(lpi != NULL);
    1317 assert(bind != NULL);
    1318 errorMessage();
    1319 return SCIP_PLUGINNOTFOUND;
    1320}
    1321
    1322/** get row of inverse basis matrix B^-1
    1323 *
    1324 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
    1325 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
    1326 * see also the explanation in lpi.h.
    1327 */
    1329 SCIP_LPI* lpi, /**< LP interface structure */
    1330 int r, /**< row number */
    1331 SCIP_Real* coef, /**< pointer to store the coefficients of the row */
    1332 int* inds, /**< array to store the non-zero indices, or NULL */
    1333 int* ninds /**< pointer to store the number of non-zero indices, or NULL
    1334 * (-1: if we do not store sparsity information) */
    1335 )
    1336{ /*lint --e{715}*/
    1337 assert(lpi != NULL);
    1338 assert(coef != NULL);
    1339 errorMessage();
    1340 return SCIP_PLUGINNOTFOUND;
    1341}
    1342
    1343/** get column of inverse basis matrix B^-1
    1344 *
    1345 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
    1346 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
    1347 * see also the explanation in lpi.h.
    1348 */
    1350 SCIP_LPI* lpi, /**< LP interface structure */
    1351 int c, /**< column number of B^-1; this is NOT the number of the column in the LP;
    1352 * you have to call SCIPlpiGetBasisInd() to get the array which links the
    1353 * B^-1 column numbers to the row and column numbers of the LP!
    1354 * c must be between 0 and nrows-1, since the basis has the size
    1355 * nrows * nrows */
    1356 SCIP_Real* coef, /**< pointer to store the coefficients of the column */
    1357 int* inds, /**< array to store the non-zero indices, or NULL */
    1358 int* ninds /**< pointer to store the number of non-zero indices, or NULL
    1359 * (-1: if we do not store sparsity information) */
    1360 )
    1361{ /*lint --e{715}*/
    1362 assert(lpi != NULL);
    1363 assert(coef != NULL);
    1364 errorMessage();
    1365 return SCIP_PLUGINNOTFOUND;
    1366}
    1367
    1368/** get row of inverse basis matrix times constraint matrix B^-1 * A
    1369 *
    1370 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
    1371 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
    1372 * see also the explanation in lpi.h.
    1373 */
    1375 SCIP_LPI* lpi, /**< LP interface structure */
    1376 int r, /**< row number */
    1377 const SCIP_Real* binvrow, /**< row in (A_B)^-1 from prior call to SCIPlpiGetBInvRow(), or NULL */
    1378 SCIP_Real* coef, /**< vector to return coefficients of the row */
    1379 int* inds, /**< array to store the non-zero indices, or NULL */
    1380 int* ninds /**< pointer to store the number of non-zero indices, or NULL
    1381 * (-1: if we do not store sparsity information) */
    1382 )
    1383{ /*lint --e{715}*/
    1384 assert(lpi != NULL);
    1385 assert(coef != NULL);
    1386 errorMessage();
    1387 return SCIP_PLUGINNOTFOUND;
    1388}
    1389
    1390/** get column of inverse basis matrix times constraint matrix B^-1 * A
    1391 *
    1392 * @note The LP interface defines slack variables to have coefficient +1. This means that if, internally, the LP solver
    1393 * uses a -1 coefficient, then rows associated with slacks variables whose coefficient is -1, should be negated;
    1394 * see also the explanation in lpi.h.
    1395 */
    1397 SCIP_LPI* lpi, /**< LP interface structure */
    1398 int c, /**< column number */
    1399 SCIP_Real* coef, /**< vector to return coefficients of the column */
    1400 int* inds, /**< array to store the non-zero indices, or NULL */
    1401 int* ninds /**< pointer to store the number of non-zero indices, or NULL
    1402 * (-1: if we do not store sparsity information) */
    1403 )
    1404{ /*lint --e{715}*/
    1405 assert(lpi != NULL);
    1406 assert(coef != NULL);
    1407 errorMessage();
    1408 return SCIP_PLUGINNOTFOUND;
    1409}
    1410
    1411/**@} */
    1412
    1413
    1414
    1415
    1416/*
    1417 * LP State Methods
    1418 */
    1419
    1420/**@name LP State Methods */
    1421/**@{ */
    1422
    1423/** stores LPi state (like basis information) into lpistate object */
    1425 SCIP_LPI* lpi, /**< LP interface structure */
    1426 BMS_BLKMEM* blkmem, /**< block memory */
    1427 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
    1428 )
    1429{ /*lint --e{715}*/
    1430 assert(lpi != NULL);
    1431 assert(blkmem != NULL);
    1432 assert(lpistate != NULL);
    1433 assert(blkmem != NULL);
    1434 errorMessage();
    1435 return SCIP_PLUGINNOTFOUND;
    1436}
    1437
    1438/** loads LPi state (like basis information) into solver; note that the LP might have been extended with additional
    1439 * columns and rows since the state was stored with SCIPlpiGetState()
    1440 */
    1442 SCIP_LPI* lpi, /**< LP interface structure */
    1443 BMS_BLKMEM* blkmem, /**< block memory */
    1444 const SCIP_LPISTATE* lpistate /**< LPi state information (like basis information), or NULL */
    1445 )
    1446{ /*lint --e{715}*/
    1447 assert(lpi != NULL);
    1448 assert(blkmem != NULL);
    1449 assert(lpistate != NULL);
    1450 errorMessage();
    1451 return SCIP_PLUGINNOTFOUND;
    1452}
    1453
    1454/** clears current LPi state (like basis information) of the solver */
    1456 SCIP_LPI* lpi /**< LP interface structure */
    1457 )
    1458{ /*lint --e{715}*/
    1459 assert(lpi != NULL);
    1460 return SCIP_OKAY;
    1461}
    1462
    1463/** frees LPi state information */
    1465 SCIP_LPI* lpi, /**< LP interface structure */
    1466 BMS_BLKMEM* blkmem, /**< block memory */
    1467 SCIP_LPISTATE** lpistate /**< pointer to LPi state information (like basis information) */
    1468 )
    1469{ /*lint --e{715}*/
    1470 assert(lpi != NULL);
    1471 assert(lpistate != NULL);
    1472 assert(blkmem != NULL);
    1473 return SCIP_OKAY;
    1474}
    1475
    1476/** checks whether the given LP state contains simplex basis information */
    1478 SCIP_LPI* lpi, /**< LP interface structure */
    1479 SCIP_LPISTATE* lpistate /**< LP state information (like basis information), or NULL */
    1480 )
    1481{ /*lint --e{715}*/
    1482 assert(lpi != NULL);
    1484 return FALSE;
    1485}
    1486
    1487/** reads LP state (like basis information from a file */
    1489 SCIP_LPI* lpi, /**< LP interface structure */
    1490 const char* fname /**< file name */
    1491 )
    1492{ /*lint --e{715}*/
    1493 assert(lpi != NULL);
    1494 assert(fname != NULL);
    1495 errorMessage();
    1496 return SCIP_PLUGINNOTFOUND;
    1497}
    1498
    1499/** writes LPi state (i.e. basis information) to a file */
    1501 SCIP_LPI* lpi, /**< LP interface structure */
    1502 const char* fname /**< file name */
    1503 )
    1504{ /*lint --e{715}*/
    1505 assert(lpi != NULL);
    1506 assert(fname != NULL);
    1507 errorMessage();
    1508 return SCIP_PLUGINNOTFOUND;
    1509}
    1510
    1511/**@} */
    1512
    1513
    1514
    1515
    1516/*
    1517 * LP Pricing Norms Methods
    1518 */
    1519
    1520/**@name LP Pricing Norms Methods */
    1521/**@{ */
    1522
    1523/** stores LPi pricing norms information
    1524 * @todo should we store norm information?
    1525 */
    1527 SCIP_LPI* lpi, /**< LP interface structure */
    1528 BMS_BLKMEM* blkmem, /**< block memory */
    1529 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information */
    1530 )
    1531{ /*lint --e{715}*/
    1532 assert(lpi != NULL);
    1533 assert(blkmem != NULL);
    1534 assert(lpinorms != NULL);
    1535 errorMessage();
    1536 return SCIP_PLUGINNOTFOUND;
    1537}
    1538
    1539/** loads LPi pricing norms into solver; note that the LP might have been extended with additional
    1540 * columns and rows since the state was stored with SCIPlpiGetNorms()
    1541 */
    1543 SCIP_LPI* lpi, /**< LP interface structure */
    1544 BMS_BLKMEM* blkmem, /**< block memory */
    1545 const SCIP_LPINORMS* lpinorms /**< LPi pricing norms information, or NULL */
    1546 )
    1547{ /*lint --e{715}*/
    1548 assert(lpi != NULL);
    1549 errorMessage();
    1550 return SCIP_PLUGINNOTFOUND;
    1551}
    1552
    1553/** frees pricing norms information */
    1555 SCIP_LPI* lpi, /**< LP interface structure */
    1556 BMS_BLKMEM* blkmem, /**< block memory */
    1557 SCIP_LPINORMS** lpinorms /**< pointer to LPi pricing norms information, or NULL */
    1558 )
    1559{ /*lint --e{715}*/
    1560 assert(lpi != NULL);
    1561 errorMessage();
    1562 return SCIP_PLUGINNOTFOUND;
    1563}
    1564
    1565/**@} */
    1566
    1567
    1568
    1569
    1570/*
    1571 * Parameter Methods
    1572 */
    1573
    1574/**@name Parameter Methods */
    1575/**@{ */
    1576
    1577/** gets integer parameter of LP */
    1579 SCIP_LPI* lpi, /**< LP interface structure */
    1580 SCIP_LPPARAM type, /**< parameter number */
    1581 int* ival /**< buffer to store the parameter value */
    1582 )
    1583{ /*lint --e{715}*/
    1584 assert(lpi != NULL);
    1585 assert(ival != NULL);
    1586 return SCIP_PARAMETERUNKNOWN;
    1587}
    1588
    1589/** sets integer parameter of LP */
    1591 SCIP_LPI* lpi, /**< LP interface structure */
    1592 SCIP_LPPARAM type, /**< parameter number */
    1593 int ival /**< parameter value */
    1594 )
    1595{ /*lint --e{715}*/
    1596 assert(lpi != NULL);
    1597 return SCIP_PARAMETERUNKNOWN;
    1598}
    1599
    1600/** gets floating point parameter of LP */
    1602 SCIP_LPI* lpi, /**< LP interface structure */
    1603 SCIP_LPPARAM type, /**< parameter number */
    1604 SCIP_Real* dval /**< buffer to store the parameter value */
    1605 )
    1606{ /*lint --e{715}*/
    1607 assert(lpi != NULL);
    1608 assert(dval != NULL);
    1609 return SCIP_PARAMETERUNKNOWN;
    1610}
    1611
    1612/** sets floating point parameter of LP */
    1614 SCIP_LPI* lpi, /**< LP interface structure */
    1615 SCIP_LPPARAM type, /**< parameter number */
    1616 SCIP_Real dval /**< parameter value */
    1617 )
    1618{ /*lint --e{715}*/
    1619 assert(lpi != NULL);
    1620 return SCIP_PARAMETERUNKNOWN;
    1621}
    1622
    1623/** interrupts the currently ongoing lp solve or disables the interrupt */
    1625 SCIP_LPI* lpi, /**< LP interface structure */
    1626 SCIP_Bool interrupt /**< TRUE if interrupt should be set, FALSE if it should be disabled */
    1627 )
    1628{
    1629 /*lint --e{715}*/
    1630 assert(lpi != NULL);
    1631
    1632 return SCIP_OKAY;
    1633}
    1634
    1635/**@} */
    1636
    1637/*
    1638 * Numerical Methods
    1639 */
    1640
    1641/**@name Numerical Methods */
    1642/**@{ */
    1643
    1644/** returns value treated as infinity in the LP solver */
    1646 SCIP_LPI* lpi /**< LP interface structure */
    1647 )
    1648{ /*lint --e{715}*/
    1649 assert(lpi != NULL);
    1650 return LPIINFINITY;
    1651}
    1652
    1653/** checks if given value is treated as infinity in the LP solver */
    1655 SCIP_LPI* lpi, /**< LP interface structure */
    1656 SCIP_Real val /**< value to be checked for infinity */
    1657 )
    1658{ /*lint --e{715}*/
    1659 assert(lpi != NULL);
    1660 if( val >= LPIINFINITY )
    1661 return TRUE;
    1662 return FALSE;
    1663}
    1664
    1665/**@} */
    1666
    1667
    1668
    1669
    1670/*
    1671 * File Interface Methods
    1672 */
    1673
    1674/**@name File Interface Methods */
    1675/**@{ */
    1676
    1677/** reads LP from a file */
    1679 SCIP_LPI* lpi, /**< LP interface structure */
    1680 const char* fname /**< file name */
    1681 )
    1682{ /*lint --e{715}*/
    1683 assert(lpi != NULL);
    1684 assert(fname != NULL);
    1685 errorMessage();
    1686 return SCIP_PLUGINNOTFOUND;
    1687}
    1688
    1689/** writes LP to a file */
    1691 SCIP_LPI* lpi, /**< LP interface structure */
    1692 const char* fname /**< file name */
    1693 )
    1694{ /*lint --e{715}*/
    1695 assert(lpi != NULL);
    1696 errorMessage();
    1697 return SCIP_PLUGINNOTFOUND;
    1698}
    1699
    1700/**@} */
    SCIP_Real * r
    Definition: circlepacking.c:59
    #define NULL
    Definition: def.h:248
    #define SCIP_INVALID
    Definition: def.h:178
    #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
    SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
    Definition: lpi_none.c:481
    SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
    Definition: lpi_none.c:1441
    SCIP_RETCODE SCIPlpiGetBInvACol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
    Definition: lpi_none.c:1396
    SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
    Definition: lpi_none.c:1601
    SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
    Definition: lpi_none.c:1645
    SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
    Definition: lpi_none.c:1135
    SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen)
    Definition: lpi_none.c:509
    SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
    Definition: lpi_none.c:1654
    SCIP_RETCODE SCIPlpiClear(SCIP_LPI *lpi)
    Definition: lpi_none.c:433
    SCIP_RETCODE SCIPlpiClearState(SCIP_LPI *lpi)
    Definition: lpi_none.c:1455
    SCIP_Bool SCIPlpiExistsDualRay(SCIP_LPI *lpi)
    Definition: lpi_none.c:1057
    SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
    Definition: lpi_none.c:1003
    SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
    Definition: lpi_none.c:1285
    SCIP_RETCODE SCIPlpiReadState(SCIP_LPI *lpi, const char *fname)
    Definition: lpi_none.c:1488
    SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
    Definition: lpi_none.c:347
    SCIP_RETCODE SCIPlpiGetPrimalRay(SCIP_LPI *lpi, SCIP_Real *ray)
    Definition: lpi_none.c:1218
    SCIP_RETCODE SCIPlpiGetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int *ival)
    Definition: lpi_none.c:1578
    SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
    Definition: lpi_none.c:1690
    SCIP_RETCODE SCIPlpiSetIntegralityInformation(SCIP_LPI *lpi, int ncols, int *intInfo)
    Definition: lpi_none.c:119
    SCIP_Bool SCIPlpiIsDualInfeasible(SCIP_LPI *lpi)
    Definition: lpi_none.c:1089
    SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
    Definition: lpi_none.c:1613
    SCIP_RETCODE SCIPlpiStrongbranchFrac(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
    Definition: lpi_none.c:855
    SCIP_RETCODE SCIPlpiSetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPINORMS *lpinorms)
    Definition: lpi_none.c:1542
    SCIP_RETCODE SCIPlpiGetNNonz(SCIP_LPI *lpi, int *nnonz)
    Definition: lpi_none.c:599
    SCIP_Bool SCIPlpiHasPrimalSolve(void)
    Definition: lpi_none.c:130
    SCIP_RETCODE SCIPlpiStrongbranchInt(SCIP_LPI *lpi, int col, SCIP_Real psol, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
    Definition: lpi_none.c:906
    SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
    Definition: lpi_none.c:742
    SCIP_Bool SCIPlpiHasBarrierSolve(void)
    Definition: lpi_none.c:146
    SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
    Definition: lpi_none.c:1230
    SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
    Definition: lpi_none.c:1187
    SCIP_RETCODE SCIPlpiScaleCol(SCIP_LPI *lpi, int col, SCIP_Real scaleval)
    Definition: lpi_none.c:546
    int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
    Definition: lpi_none.c:1165
    SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
    Definition: lpi_none.c:837
    SCIP_RETCODE SCIPlpiGetSolFeasibility(SCIP_LPI *lpi, SCIP_Bool *primalfeasible, SCIP_Bool *dualfeasible)
    Definition: lpi_none.c:987
    SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
    Definition: lpi_none.c:1554
    SCIP_Bool SCIPlpiIsIterlimExc(SCIP_LPI *lpi)
    Definition: lpi_none.c:1145
    SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
    Definition: lpi_none.c:448
    SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
    Definition: lpi_none.c:1025
    SCIP_RETCODE SCIPlpiIgnoreInstability(SCIP_LPI *lpi, SCIP_Bool *success)
    Definition: lpi_none.c:1175
    SCIP_RETCODE SCIPlpiWriteState(SCIP_LPI *lpi, const char *fname)
    Definition: lpi_none.c:1500
    SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
    Definition: lpi_none.c:187
    SCIP_RETCODE SCIPlpiStrongbranchesFrac(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
    Definition: lpi_none.c:879
    SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
    Definition: lpi_none.c:780
    SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
    Definition: lpi_none.c:1045
    SCIP_RETCODE SCIPlpiReadLP(SCIP_LPI *lpi, const char *fname)
    Definition: lpi_none.c:1678
    SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
    Definition: lpi_none.c:1258
    SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
    Definition: lpi_none.c:1099
    SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
    Definition: lpi_none.c:1526
    SCIP_Bool SCIPlpiIsTimelimExc(SCIP_LPI *lpi)
    Definition: lpi_none.c:1155
    SCIP_Bool SCIPlpiHasStateBasis(SCIP_LPI *lpi, SCIP_LPISTATE *lpistate)
    Definition: lpi_none.c:1477
    SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
    Definition: lpi_none.c:1590
    const char * SCIPlpiGetSolverName(void)
    Definition: lpi_none.c:95
    SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, const int *cstat, const int *rstat)
    Definition: lpi_none.c:1297
    SCIP_Bool SCIPlpiHasPrimalRay(SCIP_LPI *lpi)
    Definition: lpi_none.c:1015
    SCIP_RETCODE SCIPlpiGetBInvRow(SCIP_LPI *lpi, int r, SCIP_Real *coef, int *inds, int *ninds)
    Definition: lpi_none.c:1328
    SCIP_RETCODE SCIPlpiDelRows(SCIP_LPI *lpi, int firstrow, int lastrow)
    Definition: lpi_none.c:385
    SCIP_RETCODE SCIPlpiGetCols(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lb, SCIP_Real *ub, int *nnonz, int *beg, int *ind, SCIP_Real *val)
    Definition: lpi_none.c:614
    SCIP_RETCODE SCIPlpiGetBInvCol(SCIP_LPI *lpi, int c, SCIP_Real *coef, int *inds, int *ninds)
    Definition: lpi_none.c:1349
    SCIP_RETCODE SCIPlpiGetColNames(SCIP_LPI *lpi, int firstcol, int lastcol, char **colnames, char *namestorage, int namestoragesize, int *storageleft)
    Definition: lpi_none.c:663
    SCIP_RETCODE SCIPlpiGetBInvARow(SCIP_LPI *lpi, int r, const SCIP_Real *binvrow, SCIP_Real *coef, int *inds, int *ninds)
    Definition: lpi_none.c:1374
    SCIP_RETCODE SCIPlpiGetRows(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhs, SCIP_Real *rhs, int *nnonz, int *beg, int *ind, SCIP_Real *val)
    Definition: lpi_none.c:640
    SCIP_Bool SCIPlpiWasSolved(SCIP_LPI *lpi)
    Definition: lpi_none.c:968
    const char * SCIPlpiGetSolverDesc(void)
    Definition: lpi_none.c:103
    SCIP_RETCODE SCIPlpiSolveBarrier(SCIP_LPI *lpi, SCIP_Bool crossover)
    Definition: lpi_none.c:826
    SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
    Definition: lpi_none.c:1109
    SCIP_RETCODE SCIPlpiGetRowNames(SCIP_LPI *lpi, int firstrow, int lastrow, char **rownames, char *namestorage, int namestoragesize, int *storageleft)
    Definition: lpi_none.c:688
    SCIP_Bool SCIPlpiHasDualSolve(void)
    Definition: lpi_none.c:138
    SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
    Definition: lpi_none.c:846
    SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
    Definition: lpi_none.c:761
    SCIP_RETCODE SCIPlpiStrongbranchesInt(SCIP_LPI *lpi, int *cols, int ncols, SCIP_Real *psols, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, int *iter)
    Definition: lpi_none.c:930
    SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
    Definition: lpi_none.c:1203
    SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
    Definition: lpi_none.c:1069
    SCIP_RETCODE SCIPlpiDelColset(SCIP_LPI *lpi, int *dstat)
    Definition: lpi_none.c:316
    SCIP_RETCODE SCIPlpiGetObj(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *vals)
    Definition: lpi_none.c:723
    SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
    Definition: lpi_none.c:1464
    SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
    Definition: lpi_none.c:1035
    SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
    Definition: lpi_none.c:816
    SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
    Definition: lpi_none.c:257
    SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
    Definition: lpi_none.c:806
    SCIP_RETCODE SCIPlpiLoadColLP(SCIP_LPI *lpi, SCIP_OBJSEN objsen, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
    Definition: lpi_none.c:212
    SCIP_Bool SCIPlpiIsDualUnbounded(SCIP_LPI *lpi)
    Definition: lpi_none.c:1079
    SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
    Definition: lpi_none.c:1242
    SCIP_RETCODE SCIPlpiGetBasisInd(SCIP_LPI *lpi, int *bind)
    Definition: lpi_none.c:1311
    SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
    Definition: lpi_none.c:166
    void * SCIPlpiGetSolverPointer(SCIP_LPI *lpi)
    Definition: lpi_none.c:111
    SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
    Definition: lpi_none.c:519
    SCIP_RETCODE SCIPlpiGetObjsen(SCIP_LPI *lpi, SCIP_OBJSEN *objsen)
    Definition: lpi_none.c:713
    SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
    Definition: lpi_none.c:1125
    SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
    Definition: lpi_none.c:584
    SCIP_RETCODE SCIPlpiInterrupt(SCIP_LPI *lpi, SCIP_Bool interrupt)
    Definition: lpi_none.c:1624
    SCIP_RETCODE SCIPlpiDelCols(SCIP_LPI *lpi, int firstcol, int lastcol)
    Definition: lpi_none.c:299
    SCIP_RETCODE SCIPlpiDelRowset(SCIP_LPI *lpi, int *dstat)
    Definition: lpi_none.c:402
    SCIP_RETCODE SCIPlpiScaleRow(SCIP_LPI *lpi, int row, SCIP_Real scaleval)
    Definition: lpi_none.c:533
    SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
    Definition: lpi_none.c:569
    SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
    Definition: lpi_none.c:1424
    SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
    Definition: lpi_none.c:497
    interface methods for specific LP solvers
    static void errorMessage(void)
    Definition: lpi_none.c:74
    #define LPINAME
    Definition: lpi_none.c:38
    static void errorMessageAbort(void)
    Definition: lpi_none.c:63
    #define LPIINFINITY
    Definition: lpi_none.c:39
    #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
    int ncols
    Definition: lpi_none.c:53
    int nrows
    Definition: lpi_none.c:52
    enum SCIP_LPParam SCIP_LPPARAM
    Definition: type_lpi.h:73
    enum SCIP_LPSolQuality SCIP_LPSOLQUALITY
    Definition: type_lpi.h:104
    enum SCIP_ObjSen SCIP_OBJSEN
    Definition: type_lpi.h:45
    @ SCIP_LPERROR
    Definition: type_retcode.h:49
    @ 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