Scippy

    SCIP

    Solving Constraint Integer Programs

    struct_lpexact.h
    Go to the documentation of this file.
    1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    2/* */
    3/* This file is part of the program and library */
    4/* SCIP --- Solving Constraint Integer Programs */
    5/* */
    6/* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) */
    7/* */
    8/* Licensed under the Apache License, Version 2.0 (the "License"); */
    9/* you may not use this file except in compliance with the License. */
    10/* You may obtain a copy of the License at */
    11/* */
    12/* http://www.apache.org/licenses/LICENSE-2.0 */
    13/* */
    14/* Unless required by applicable law or agreed to in writing, software */
    15/* distributed under the License is distributed on an "AS IS" BASIS, */
    16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
    17/* See the License for the specific language governing permissions and */
    18/* limitations under the License. */
    19/* */
    20/* You should have received a copy of the Apache-2.0 license */
    21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
    22/* */
    23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    24
    25/**@file struct_lpexact.h
    26 * @ingroup INTERNALAPI
    27 * @brief data structures for exact LP management
    28 * @author Leon Eifler
    29 *
    30 * In SCIP, the LP is defined as follows:
    31 *
    32 * min obj * x
    33 * lhs <= A * x + const <= rhs
    34 * lb <= x <= ub
    35 *
    36 * The row activities are defined as activity = A * x + const and must
    37 * therefore be in the range of [lhs,rhs].
    38 *
    39 * Mathematically, each range constraint would account for two dual
    40 * variables, one for each inequality. Since in an optimal solution (at
    41 * least) one of them may be chosen to be zero, we may define one dual
    42 * multiplier for each row as the difference of those two.
    43 *
    44 * Let y be the vector of dual multipliers for the rows, then the reduced
    45 * costs are defined as
    46 *
    47 * redcost = obj - A^T * y.
    48 *
    49 * In an optimal solution, y must be
    50 *
    51 * - nonnegative, if the corresponding row activity is not tight at its rhs
    52 * - nonpositive, if the corresponding row activity is not tight at its lhs
    53 * - zero, if the corresponding row activity is not at any of its sides
    54 *
    55 * and the reduced costs must be
    56 *
    57 * - nonnegative, if the corresponding variable is not tight at its ub
    58 * - nonpositive, if the corresponding variable is not tight at its lb
    59 * - zero, if the corresponding variable is not at any of its bounds.
    60 *
    61 * The main datastructures for storing an LP are the rows and the columns.
    62 * A row can live on its own (if it was created by a separator), or as SCIP_LP
    63 * relaxation of a constraint. Thus, it has a nuses-counter, and is
    64 * deleted, if not needed any more.
    65 * A column cannot live on its own. It is always connected to a problem
    66 * variable. Because pricing is always problem specific, it cannot create
    67 * LP columns without introducing new variables. Thus, each column is
    68 * connected to exactly one variable, and is deleted, if the variable
    69 * is deleted.
    70 */
    71
    72/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    73
    74#ifndef __SCIP_STRUCT_LPEXACT_H__
    75#define __SCIP_STRUCT_LPEXACT_H__
    76
    77
    78#include "scip/def.h"
    79#include "scip/intervalarith.h"
    80#include "scip/scip_exact.h"
    81#include "scip/type_lp.h"
    82#include "scip/type_lpexact.h"
    83#include "scip/type_sol.h"
    84#include "scip/type_var.h"
    85#include "scip/type_event.h"
    86#include "lpi/type_lpi.h"
    88#include "scip/rational.h"
    89#ifdef SCIP_WITH_EXACTSOLVE
    90#include "rectlu/rectlu.h"
    91#endif
    92
    93#ifdef __cplusplus
    94extern "C" {
    95#endif
    96
    97/** collected values of an exact column which depend on the LP solution
    98 * We store these values in each column to recover the LP solution at start of diving or probing mode, say, without
    99 * having to resolve the LP. Note that we do not store the farkascoef value since we do expect a node with infeasible
    100 * LP to be pruned anyway.
    101 */
    103{
    104 SCIP_RATIONAL* primsol; /**< primal solution value in LP, is 0 if col is not in LP */
    105 SCIP_RATIONAL* redcost; /**< reduced cost value in LP, or SCIP_INVALID if not yet calculated */
    106 unsigned int basisstatus:2; /**< basis status of column in last LP solution, invalid for non-LP columns */
    107};
    108
    109/** collected values of an exact row which depend on the LP solution
    110 * We store these values in each row to recover the LP solution at start of diving or probing mode, say, without having
    111 * to resolve the LP. We do not store the dualfarkas value since we expect a node with infeasible LP to be pruned
    112 * anyway. In this unlikely case, we have to resolve the LP.
    113 */
    115{
    116 SCIP_RATIONAL* dualsol; /**< dual solution value in LP, is 0 if row is not in LP */
    117 SCIP_RATIONAL* activity; /**< row activity value in LP, or SCIP_INVALID if not yet calculated */
    118 unsigned int basisstatus:2; /**< basis status of row in last LP solution, invalid for non-LP rows */
    119};
    120
    121/** collected values of the exact LP data which depend on the exact LP solution
    122 * We store these values to recover the exact LP solution at start of diving or probing mode, say, without having
    123 * to resolve the exact LP.
    124 */
    126{
    127 SCIP_LPSOLSTAT lpsolstat; /**< solution status of last LP solution */
    128 SCIP_RATIONAL* lpobjval; /**< objective value of LP without loose variables, or SCIP_INVALID */
    129 SCIP_Bool primalfeasible; /**< is current LP solution primal feasible? */
    130 SCIP_Bool primalchecked; /**< was current LP solution checked for primal feasibility? */
    131 SCIP_Bool dualfeasible; /**< is current LP solution dual feasible? */
    132 SCIP_Bool dualchecked; /**< was current LP solution checked for primal feasibility? */
    133 SCIP_Bool solisbasic; /**< is current LP solution a basic solution? */
    134 SCIP_Bool lpissolved; /**< is current LP solved? */
    135};
    136
    137/** LP column;
    138 * The row vector of the LP column is partitioned into two parts: The first col->nlprows rows in the rows array
    139 * are the ones that belong to the current LP (col->rows[j]->lppos >= 0) and that are linked to the column
    140 * (col->linkpos[j] >= 0). The remaining col->len - col->nlprows rows in the rows array are the ones that
    141 * don't belong to the current LP (col->rows[j]->lppos == -1) or that are not linked to the column
    142 * (col->linkpos[j] == -1).
    143 */
    145{
    146 SCIP_COL* fpcol; /**< the floating point column corresponding to this exact column */
    147 SCIP_ROWEXACT** rows; /**< the exact rows corresponding the this exact column */
    148 SCIP_RATIONAL* obj; /**< current objective value of column in LP (might be changed in diving or probing) */
    149 SCIP_RATIONAL* lb; /**< current lower bound of column in LP */
    150 SCIP_RATIONAL* ub; /**< current upper bound of column in LP */
    151 SCIP_RATIONAL* flushedobj; /**< objective value of column already flushed to the LP solver */
    152 SCIP_RATIONAL* flushedlb; /**< lower bound of column already flushed to the LP solver */
    153 SCIP_RATIONAL* flushedub; /**< upper bound of column already flushed to the LP solver */
    154 SCIP_RATIONAL* primsol; /**< primal solution value in LP, is 0 if col is not in LP */
    155 SCIP_RATIONAL* redcost; /**< reduced cost value in LP, or SCIP_INVALID if not yet calculated */
    156 SCIP_RATIONAL* farkascoef; /**< coefficient in dual Farkas infeasibility proof (== dualfarkas^T A_c) */
    157 SCIP_VAR* var; /**< variable, this column represents; there cannot be a column without variable */
    158 SCIP_RATIONAL** vals; /**< coefficients of column entries */
    159 SCIP_Longint validredcostlp; /**< LP number for which reduced cost value is valid */
    160 SCIP_Longint validfarkaslp; /**< LP number for which Farkas coefficient is valid */
    161 SCIP_COLEXACTSOLVALS* storedsolvals; /**< values stored before entering diving or probing mode */
    162 int* linkpos; /**< position of col in col vector of the row, or -1 if not yet linked */
    163 int index; /**< consecutively numbered column identifier */
    164 int size; /**< size of the row- and val-arrays */
    165 int len; /**< number of nonzeros in column */
    166 int nlprows; /**< number of linked rows in column, that belong to the current LP */
    167 int nunlinked; /**< number of column entries, where the rows don't know about the column */
    168 int lppos; /**< column position number in current LP, or -1 if not in current LP */
    169 int lpipos; /**< column position number in LP solver, or -1 if not in LP solver */
    170 unsigned int basisstatus:2; /**< basis status of column in last LP solution, invalid for non-LP columns */
    171 unsigned int lprowssorted:1; /**< are the linked LP rows in the rows array sorted by non-decreasing index? */
    172 unsigned int nonlprowssorted:1; /**< are the non-LP/not linked rows sorted by non-decreasing index? */
    173 unsigned int objchanged:1; /**< has objective value changed, and has data of LP solver to be updated? */
    174 unsigned int lbchanged:1; /**< has lower bound changed, and has data of LP solver to be updated? */
    175 unsigned int ubchanged:1; /**< has upper bound changed, and has data of LP solver to be updated? */
    176 unsigned int coefchanged:1; /**< has the coefficient vector changed, and has LP solver to be updated? */
    177};
    178
    179/** LP row
    180 * The column vector of the LP row is partitioned into two parts: The first row->nlpcols columns in the cols array
    181 * are the ones that belong to the current LP (row->cols[j]->lppos >= 0) and that are linked to the row
    182 * (row->linkpos[j] >= 0). The remaining row->len - row->nlpcols columns in the cols array are the ones that
    183 * don't belong to the current LP (row->cols[j]->lppos == -1) or that are not linked to the row
    184 * (row->linkpos[j] == -1).
    185 */
    187{
    188 SCIP_ROW* fprow; /**< pointer to the corresponding row in the fp lp */
    189 SCIP_ROW* fprowrhs; /**< if two rows are needed to make a relaxation of this row, this saves the rhs-part */
    190 SCIP_RATIONAL* constant; /**< constant shift c in row lhs <= ax + c <= rhs */
    191 SCIP_RATIONAL* lhs; /**< left hand side of row */
    192 SCIP_RATIONAL* rhs; /**< right hand side of row */
    193 SCIP_Real lhsreal; /**< fp relaxation of lhsreal */
    194 SCIP_Real rhsreal; /**< fp relaxation of rhsreal */
    195 SCIP_INTERVAL constantreal; /**< fp approximation of constant */
    196 SCIP_RATIONAL* flushedlhs; /**< left hand side minus constant of row already flushed to the LP solver */
    197 SCIP_RATIONAL* flushedrhs; /**< right hand side minus constant of row already flushed to the LP solver */
    198 SCIP_RATIONAL* objprod; /**< scalar product of row vector with objective function */
    199 SCIP_RATIONAL* dualsol; /**< dual solution value in LP, is 0 if row is not in LP */
    200 SCIP_RATIONAL* activity; /**< row activity value in LP, or SCIP_INVALID if not yet calculated */
    201 SCIP_RATIONAL* dualfarkas; /**< multiplier value in dual Farkas infeasibility proof */
    202 SCIP_RATIONAL* pseudoactivity; /**< row activity value in pseudo solution, or SCIP_INVALID if not yet calculated */
    203 SCIP_RATIONAL** vals; /**< coefficients of row entries */
    204 SCIP_INTERVAL* valsinterval; /**< interval-array of coefficients rounded up and down, respectively */
    205 SCIP_COLEXACT** cols; /**< columns of row entries, that may have a nonzero primal solution value */
    206 SCIP_ROWEXACTSOLVALS* storedsolvals; /**< values stored before entering diving or probing mode */
    207 int* cols_index; /**< copy of cols[i]->index for avoiding expensive dereferencing */
    208 int* linkpos; /**< position of row in row vector of the column, or -1 if not yet linked */
    209 SCIP_Longint validactivitylp; /**< LP number for which activity value is valid */
    210 int index; /**< consecutively numbered row identifier */
    211 int size; /**< size of the col- and val-arrays */
    212 int len; /**< number of nonzeros in row */
    213 int nlpcols; /**< number of linked columns in row, that belong to the current LP */
    214 int nunlinked; /**< number of row entries, where the columns don't know about the row */
    215 int nuses; /**< number of times, this row is referenced */
    216 int lppos; /**< row position number in current LP, or -1 if not in current LP */
    217 int lpipos; /**< row position number in LP solver, or -1 if not in LP solver */
    218 int lpdepth; /**< depth level at which row entered the LP, or -1 if not in current LP */
    219 unsigned int basisstatus:2; /**< basis status of row in last LP solution, invalid for non-LP rows */
    220 unsigned int lpcolssorted:1; /**< are the linked LP columns in the cols array sorted by non-decreasing index? */
    221 unsigned int nonlpcolssorted:1; /**< are the non-LP/not linked columns sorted by non-decreasing index? */
    222 unsigned int delaysort:1; /**< should the row sorting be delayed and done in a lazy fashion? */
    223 unsigned int lhschanged:1; /**< was left hand side or constant changed, and has LP solver to be updated? */
    224 unsigned int rhschanged:1; /**< was right hand side or constant changed, and has LP solver to be updated? */
    225 unsigned int coefchanged:1; /**< was the coefficient vector changed, and has LP solver to be updated? */
    226 unsigned int integral:1; /**< is activity (without constant) of row always integral in feasible solution? */
    227 unsigned int nlocks:15; /**< number of sealed locks of an unmodifiable row */
    228 unsigned int modifiable:1; /**< is row modifiable during node processing (subject to column generation)? */
    229 unsigned int removable:1; /**< is row removable from the LP (due to aging or cleanup)? */
    230 unsigned int fprelaxable:1; /**< is it possible to make a fp-approximation of this row (only false if vars with both bounds inf present) */
    231};
    232
    233struct SCIP_ProjShiftData
    234{
    235 SCIP_LPIEXACT* lpiexact; /**< exact LP solved for computing interior ray and point */
    236 int* dvarmap; /**< mapping between variables in lpiexact and the original problem */
    237 int ndvarmap; /**< length of dvarmap array */
    238 SCIP_RATIONAL** interiorpoint; /**< stores S-interior point for root node dual problem */
    239 SCIP_RATIONAL** interiorray; /**< stores S-interior ray for root node dual problem */
    240 SCIP_RATIONAL** violation; /**< needed on every iteration, so only construct once and possibly resize */
    241 SCIP_RATIONAL** correction; /**< needed on every iteration, so only construct once and possibly resize */
    242 int* includedrows; /**< 1 if constraints (or vars) dual variable is included in original S-interior point/ray */
    243 int* projshiftbasis; /**< mapping for basis used in factorization (maps [1,...,|includedrows|] -> 2*nrows+2*ncols) */
    244#if defined SCIP_WITH_GMP && defined SCIP_WITH_EXACTSOLVE
    245 qsnum_factor_work* rectfactor; /**< stores factorized matrix for project-and-shift */
    246#endif
    247 SCIP_RATIONAL* commonslack; /**< slack by which S-interior point/ray satisfies inequalities */
    248 int projshiftbasisdim; /**< length of projshiftbasis */
    249 int nextendedrows; /**< dimension of S-interior point/ray = 2*(ncols+nrows) */
    250 int violationsize; /**< size of violation array */
    251 unsigned int projshiftdatacon:1; /**< was project-and-shift data structure constructed? */
    252 unsigned int projshiftdatafail:1;/**< did the construction of the project-and-shift root node data fail? */
    253 unsigned int projshifthaspoint:1;/**< has an S-interior point successfully been constructed? */
    254 unsigned int projshifthasray:1; /**< has an S-interior ray successfully been constructed? */
    255 unsigned int projshiftobjweight:1;/**< weight of the original objective function in lp to compute interior point */
    256 unsigned int scaleobj:1; /**< should the objective be scaled to be integral if possible? */
    257 unsigned int projshiftuseintpoint:1;/**< should correction shift use an interior pt? (otherwise use interior ray of recession cone) */
    258};
    259
    260
    261/** current LP data */
    263{
    264 SCIP_LP* fplp; /**< pointer to the floating point lp */
    265 SCIP_PROJSHIFTDATA* projshiftdata; /**< data stored for usage in project+shift, NULL if ps not used */
    266 SCIP_RATIONAL* lpobjval; /**< objective value of LP without loose variables, or SCIP_INVALID */
    267 SCIP_RATIONAL* looseobjval; /**< current solution value of all loose variables set to their best bounds,
    268 * ignoring variables, with infinite best bound */
    269 SCIP_RATIONAL* glbpseudoobjval; /**< global pseudo solution value with all variables set to their best global bounds,
    270 * ignoring variables, with infinite best bound */
    271 SCIP_RATIONAL* pseudoobjval; /**< current pseudo solution value with all variables set to their best bounds,
    272 * ignoring variables, with infinite best bound */
    273 SCIP_RATIONAL** divechgsides; /**< stores the lhs/rhs changed in the current diving */
    274 SCIP_SIDETYPE* divechgsidetypes; /**< stores the side type of the changes done in the current diving */
    275 SCIP_ROWEXACT** divechgrows; /**< stores the rows changed in the current diving */
    276 SCIP_Real cutoffbound; /**< upper objective limit of LP (copy of primal->cutoffbound) */
    277 SCIP_Real lpiobjlim; /**< current objective limit in LPI */
    278 SCIP_Real oldcutoffbound; /**< place to store cutoffbound if it gets relaxed/removed for safe bounding */
    279 SCIP_LPIEXACT* lpiexact; /**< exact LP solver interface */
    280 SCIP_LPISTATE* divelpistate; /**< stores LPI state (basis information) before exact diving starts */
    281 SCIP_COLEXACT** lpicols; /**< array with columns currently stored in the LP solver */
    282 SCIP_ROWEXACT** lpirows; /**< array with rows currently stored in the LP solver */
    283 SCIP_COLEXACT** chgcols; /**< array of changed columns not yet applied to the LP solver */
    284 SCIP_ROWEXACT** chgrows; /**< array of changed rows not yet applied to the LP solver */
    285 SCIP_COLEXACT** cols; /**< array with current LP columns in correct order */
    286 SCIP_ROWEXACT** rows; /**< array with current LP rows in correct order */
    287 SCIP_Longint divenolddomchgs; /**< number of domain changes before diving has started */
    288 SCIP_LPEXACTSOLVALS* storedsolvals; /**< collected values of the LP data which depend on the LP solution */
    289
    290 int lpicolssize; /**< available slots in lpicols vector */
    291 int nlpicols; /**< number of columns in the LP solver */
    292 int lpifirstchgcol; /**< first column of the LP which differs from the column in the LP solver */
    293 int lpirowssize; /**< available slots in lpirows vector */
    294 int nlpirows; /**< number of rows in the LP solver */
    295 int lpifirstchgrow; /**< first row of the LP which differs from the row in the LP solver */
    296 int chgcolssize; /**< available slots in chgcols vector */
    297 int nchgcols; /**< current number of chgcols (number of used slots in chgcols vector) */
    298 int chgrowssize; /**< available slots in chgrows vector */
    299 int nchgrows; /**< current number of chgrows (number of used slots in chgrows vector) */
    300 int colssize; /**< available slots in cols vector */
    301 int ncols; /**< current number of LP columns (number of used slots in cols vector) */
    302 int nremovablecols; /**< number of removable columns in the LP */
    303 int firstnewcol; /**< first column added at the current node */
    304 int rowssize; /**< available slots in rows vector */
    305 int nrows; /**< current number of LP rows (number of used slots in rows vector) */
    306 int nremovablerows; /**< number of removable rows in the LP */
    307 int firstnewrow; /**< first row added at the current node */
    308 int looseobjvalinf; /**< number of loose variables with infinite best bound in current solution */
    309 int nloosevars; /**< number of loose variables in LP */
    310 int glbpseudoobjvalinf; /**< number of variables with infinite best bound in global pseudo solution */
    311 int pseudoobjvalinf; /**< number of variables with infinite best bound in current pseudo solution */
    312 int lpiitlim; /**< current iteration limit setting in LPI */
    313 int lpitiming; /**< current timing type in LPI */
    314 int lpirandomseed; /**< current initial random seed in LPI */
    315 int lpiscaling; /**< current SCALING setting in LPI */
    316 int lpirefactorinterval;/**< current refactorization interval */
    317 int ndivingrows; /**< number of rows when entering diving mode */
    318 int ndivechgsides; /**< number of side changes in current diving */
    319 int divinglpiitlim; /**< LPI iteration limit when entering diving mode */
    320 SCIP_PRICING lpipricing; /**< current pricing setting in LPI */
    321 SCIP_LPSOLSTAT lpsolstat; /**< solution status of last LP solution */
    322 SCIP_LPALGO lastlpalgo; /**< algorithm used for last LP solve */
    323 SCIP_Bool lpisolutionpolishing;/**< LP solution polishing method (0: disabled, 1: enabled) */
    324 SCIP_Bool flushdeletedcols; /**< have LPI-columns been deleted in the last lpFlush() call? */
    325 SCIP_Bool flushaddedcols; /**< have LPI-columns been added in the last lpFlush() call? */
    326 SCIP_Bool flushdeletedrows; /**< have LPI-rows been deleted in the last lpFlush() call? */
    327 SCIP_Bool flushaddedrows; /**< have LPI-rows been added in the last lpFlush() call? */
    328 SCIP_Bool updateintegrality; /**< does integrality information need to be updated? */
    329 SCIP_Bool flushed; /**< are all cached changes applied to the LP solver? */
    330 SCIP_Bool solved; /**< is current LP solved? */
    331 SCIP_Bool primalfeasible; /**< is current LP solution (rather LPI state) primal feasible? */
    332 SCIP_Bool primalchecked; /**< was current LP solution checked for primal feasibility?? */
    333 SCIP_Bool dualfeasible; /**< is current LP solution (rather LPI state) dual feasible? */
    334 SCIP_Bool dualchecked; /**< was current LP solution checked for primal feasibility?? */
    335 SCIP_Bool solisbasic; /**< is current LP solution a basic solution? */
    336 SCIP_Bool resolvelperror; /**< an error occured during resolving the LP after diving or probing */
    337 SCIP_Bool lpihasscaling; /**< does the LPI support the SCALING parameter? */
    338 SCIP_Bool lpihaspresolving; /**< does the LPI support the PRESOLVING parameter? */
    339 SCIP_Bool projshiftpossible; /**< can a safe bound be computed with project-and-shift? */
    340 SCIP_Bool boundshiftuseful; /**< is boundshift useful? set to FALSE if success rate too low */
    341 SCIP_Bool forceexactsolve; /**< should the next safe bounding step be forced to solve the lp exactly? */
    342 SCIP_Bool allowexactsolve; /**< is the next bounding call allowed to be an exact solve? (this should only happen for the last call at each node) */
    343 SCIP_Bool diving; /**< LP is used for exact diving: col bounds and obj don't correspond to variables */
    344 SCIP_Bool divelpwasprimfeas; /**< primal feasibility when diving started */
    345 SCIP_Bool divelpwasprimchecked;/**< primal feasibility was checked when diving started */
    346 SCIP_Bool divelpwasdualfeas; /**< dual feasibility when diving started */
    347 SCIP_Bool divelpwasdualchecked;/**< dual feasibility was checked when diving started */
    348 SCIP_Bool divingobjchg; /**< objective values were changed in diving or probing: LP objective is invalid */
    349 SCIP_Bool forcesafebound; /**< should the next safe bounding step be forced to execute, even in probing/diving/etc? */
    350 SCIP_Bool wasforcedsafebound; /**< was the last safe bound forced to execute? */
    351};
    352
    353#ifdef __cplusplus
    354}
    355#endif
    356
    357#endif
    common defines and data types used in all packages of SCIP
    #define SCIP_Longint
    Definition: def.h:141
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_Real
    Definition: def.h:156
    interval arithmetics for provable bounds
    wrapper for rational number arithmetic
    public methods for exact solving
    unsigned int basisstatus
    SCIP_RATIONAL * redcost
    SCIP_RATIONAL * primsol
    SCIP_RATIONAL * primsol
    SCIP_COL * fpcol
    SCIP_RATIONAL * farkascoef
    SCIP_RATIONAL * flushedobj
    unsigned int lbchanged
    SCIP_ROWEXACT ** rows
    unsigned int lprowssorted
    SCIP_RATIONAL * obj
    SCIP_RATIONAL ** vals
    SCIP_RATIONAL * ub
    unsigned int nonlprowssorted
    unsigned int ubchanged
    unsigned int coefchanged
    unsigned int basisstatus
    SCIP_Longint validredcostlp
    SCIP_RATIONAL * redcost
    SCIP_VAR * var
    SCIP_RATIONAL * lb
    unsigned int objchanged
    SCIP_RATIONAL * flushedub
    SCIP_RATIONAL * flushedlb
    SCIP_Longint validfarkaslp
    SCIP_COLEXACTSOLVALS * storedsolvals
    SCIP_LPSOLSTAT lpsolstat
    SCIP_RATIONAL * lpobjval
    SCIP_RATIONAL ** divechgsides
    SCIP_SIDETYPE * divechgsidetypes
    SCIP_Bool divelpwasprimfeas
    SCIP_Bool divelpwasdualchecked
    SCIP_Bool lpihaspresolving
    SCIP_ROWEXACT ** lpirows
    SCIP_Bool projshiftpossible
    SCIP_RATIONAL * glbpseudoobjval
    SCIP_Bool primalfeasible
    SCIP_PROJSHIFTDATA * projshiftdata
    SCIP_Bool wasforcedsafebound
    SCIP_Bool lpihasscaling
    SCIP_ROWEXACT ** chgrows
    SCIP_Bool solved
    SCIP_RATIONAL * looseobjval
    SCIP_Bool lpisolutionpolishing
    SCIP_Real lpiobjlim
    SCIP_Longint divenolddomchgs
    SCIP_LPEXACTSOLVALS * storedsolvals
    SCIP_ROWEXACT ** divechgrows
    SCIP_LPALGO lastlpalgo
    SCIP_COLEXACT ** cols
    SCIP_Bool dualchecked
    SCIP_LPIEXACT * lpiexact
    SCIP_COLEXACT ** lpicols
    SCIP_LPSOLSTAT lpsolstat
    SCIP_Bool flushdeletedrows
    SCIP_ROWEXACT ** rows
    SCIP_Bool boundshiftuseful
    SCIP_Bool flushdeletedcols
    SCIP_Bool divelpwasdualfeas
    SCIP_COLEXACT ** chgcols
    SCIP_Bool diving
    SCIP_Bool solisbasic
    SCIP_Bool resolvelperror
    SCIP_Real cutoffbound
    SCIP_Bool flushed
    SCIP_Bool divingobjchg
    SCIP_LP * fplp
    SCIP_Bool primalchecked
    SCIP_Bool flushaddedcols
    SCIP_Real oldcutoffbound
    SCIP_Bool forcesafebound
    SCIP_PRICING lpipricing
    SCIP_Bool dualfeasible
    SCIP_Bool allowexactsolve
    SCIP_RATIONAL * lpobjval
    SCIP_Bool forceexactsolve
    SCIP_Bool updateintegrality
    SCIP_Bool divelpwasprimchecked
    SCIP_Bool flushaddedrows
    SCIP_RATIONAL * pseudoobjval
    SCIP_LPISTATE * divelpistate
    SCIP_RATIONAL * activity
    SCIP_RATIONAL * dualsol
    unsigned int basisstatus
    SCIP_INTERVAL constantreal
    unsigned int coefchanged
    SCIP_ROW * fprow
    unsigned int rhschanged
    unsigned int lpcolssorted
    unsigned int modifiable
    SCIP_RATIONAL ** vals
    SCIP_Longint validactivitylp
    unsigned int nlocks
    unsigned int delaysort
    SCIP_RATIONAL * objprod
    unsigned int fprelaxable
    SCIP_RATIONAL * flushedrhs
    SCIP_RATIONAL * dualfarkas
    SCIP_ROW * fprowrhs
    SCIP_RATIONAL * flushedlhs
    unsigned int lhschanged
    SCIP_RATIONAL * lhs
    unsigned int nonlpcolssorted
    unsigned int removable
    SCIP_COLEXACT ** cols
    SCIP_RATIONAL * rhs
    SCIP_ROWEXACTSOLVALS * storedsolvals
    SCIP_RATIONAL * dualsol
    SCIP_RATIONAL * pseudoactivity
    unsigned int basisstatus
    SCIP_RATIONAL * activity
    SCIP_Real rhsreal
    unsigned int integral
    SCIP_Real lhsreal
    SCIP_INTERVAL * valsinterval
    SCIP_RATIONAL * constant
    type definitions for managing events
    type definitions for LP management
    enum SCIP_LPSolStat SCIP_LPSOLSTAT
    Definition: type_lp.h:52
    enum SCIP_LPAlgo SCIP_LPALGO
    Definition: type_lp.h:89
    enum SCIP_SideType SCIP_SIDETYPE
    Definition: type_lp.h:68
    type definitions for exact LP management
    struct SCIP_ProjShiftData SCIP_PROJSHIFTDATA
    Definition: type_lpexact.h:58
    type definitions for specific LP solvers interface
    enum SCIP_Pricing SCIP_PRICING
    Definition: type_lpi.h:86
    type definitions for specific exact LP solvers interface
    type definitions for storing primal CIP solutions
    type definitions for problem variables