Scippy

    SCIP

    Solving Constraint Integer Programs

    struct_lp.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_lp.h
    26 * @ingroup INTERNALAPI
    27 * @brief data structures for LP management
    28 * @author Tobias Achterberg
    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_LP_H__
    75#define __SCIP_STRUCT_LP_H__
    76
    77
    78#include "scip/def.h"
    79#include "scip/type_lp.h"
    80#include "scip/type_var.h"
    81#include "scip/type_event.h"
    82#include "lpi/type_lpi.h"
    83#include "scip/type_lpexact.h"
    84
    85#ifdef __cplusplus
    86extern "C" {
    87#endif
    88
    89/** collected values of a column which depend on the LP solution
    90 * We store these values in each column to recover the LP solution at start of diving or probing mode, say, without
    91 * having to resolve the LP. Note that we do not store the farkascoef value since we do expect a node with infeasible
    92 * LP to be pruned anyway.
    93 */
    95{
    96 SCIP_Real primsol; /**< primal solution value in LP, is 0 if col is not in LP */
    97 SCIP_Real redcost; /**< reduced cost value in LP, or SCIP_INVALID if not yet calculated */
    98 unsigned int basisstatus:2; /**< basis status of column in last LP solution, invalid for non-LP columns */
    99};
    100
    101/** collected values of a row which depend on the LP solution
    102 * We store these values in each row to recover the LP solution at start of diving or probing mode, say, without having
    103 * to resolve the LP. We do not store the dualfarkas value since we expect a node with infeasible LP to be pruned
    104 * anyway. In this unlikely case, we have to resolve the LP.
    105 */
    107{
    108 SCIP_Real dualsol; /**< dual solution value in LP, is 0 if row is not in LP */
    109 SCIP_Real activity; /**< row activity value in LP, or SCIP_INVALID if not yet calculated */
    110 unsigned int basisstatus:2; /**< basis status of row in last LP solution, invalid for non-LP rows */
    111};
    112
    113/** collected values of the LP data which depend on the LP solution
    114 * We store these values to recover the LP solution at start of diving or probing mode, say, without having to resolve
    115 * the LP.
    116 */
    118{
    119 SCIP_LPSOLSTAT lpsolstat; /**< solution status of last LP solution */
    120 SCIP_Real lpobjval; /**< objective value of LP without loose variables, or SCIP_INVALID */
    121 SCIP_Bool primalfeasible; /**< is current LP solution primal feasible? */
    122 SCIP_Bool primalchecked; /**< was current LP solution checked for primal feasibility? */
    123 SCIP_Bool dualfeasible; /**< is current LP solution dual feasible? */
    124 SCIP_Bool dualchecked; /**< was current LP solution checked for primal feasibility? */
    125 SCIP_Bool solisbasic; /**< is current LP solution a basic solution? */
    126 SCIP_Bool lpissolved; /**< is current LP solved? */
    127 SCIP_Bool hasprovedboundexact; /**< is the current LP provably dual feasible (in exact mode) */
    128};
    129
    130/** LP column;
    131 * The row vector of the LP column is partitioned into two parts: The first col->nlprows rows in the rows array
    132 * are the ones that belong to the current LP (col->rows[j]->lppos >= 0) and that are linked to the column
    133 * (col->linkpos[j] >= 0). The remaining col->len - col->nlprows rows in the rows array are the ones that
    134 * don't belong to the current LP (col->rows[j]->lppos == -1) or that are not linked to the column
    135 * (col->linkpos[j] == -1).
    136 */
    138{
    139 SCIP_Real obj; /**< current objective value of column in LP (might be changed in diving or probing) */
    140 SCIP_Real lb; /**< current lower bound of column in LP */
    141 SCIP_Real ub; /**< current upper bound of column in LP */
    142 SCIP_Real unchangedobj; /**< unchanged objective value of column (ignoring diving or probing changes) */
    143 SCIP_Real lazylb; /**< lazy lower bound of the column; if the current lower bound is not greater than
    144 * the lazy lower bound, then the lower bound has not to be added to the LP */
    145 SCIP_Real lazyub; /**< lazy upper bound of the column; if the current upper bound is not smaller than
    146 * the lazy upper bound, then the upper bound has not to be added to the LP */
    147 SCIP_Real flushedobj; /**< objective value of column already flushed to the LP solver */
    148 SCIP_Real flushedlb; /**< lower bound of column already flushed to the LP solver */
    149 SCIP_Real flushedub; /**< upper bound of column already flushed to the LP solver */
    150 SCIP_Real primsol; /**< primal solution value in LP, is 0 if col is not in LP */
    151 SCIP_Real redcost; /**< reduced cost value in LP, or SCIP_INVALID if not yet calculated */
    152 SCIP_Real farkascoef; /**< coefficient in dual Farkas infeasibility proof (== dualfarkas^T A_c) */
    153 SCIP_Real minprimsol; /**< minimal LP solution value, this column ever assumed */
    154 SCIP_Real maxprimsol; /**< maximal LP solution value, this column ever assumed */
    155 SCIP_Real sbdown; /**< strong branching information for downwards branching */
    156 SCIP_Real sbup; /**< strong branching information for upwards branching */
    157 SCIP_Real sbsolval; /**< LP solution value of column at last strong branching call */
    158 SCIP_Real sblpobjval; /**< LP objective value at last strong branching call on the column */
    159 SCIP_Longint sbnode; /**< node number of the last strong branching call on this column */
    160 SCIP_Longint obsoletenode; /**< last node where this column was removed due to aging */
    161 SCIP_COLSOLVALS* storedsolvals; /**< values stored before entering diving or probing mode */
    162 SCIP_VAR* var; /**< variable, this column represents; there cannot be a column without variable */
    163 SCIP_ROW** rows; /**< rows of column entries, that may have a nonzero dual solution value */
    164 SCIP_Real* vals; /**< coefficients of column entries */
    165 SCIP_Longint validredcostlp; /**< LP number for which reduced cost value is valid */
    166 SCIP_Longint validfarkaslp; /**< LP number for which Farkas coefficient is valid */
    167 SCIP_Longint validsblp; /**< LP number for which strong branching values are valid */
    168 int* linkpos; /**< position of col in col vector of the row, or -1 if not yet linked */
    169 int index; /**< consecutively numbered column identifier */
    170 int size; /**< size of the row- and val-arrays */
    171 int len; /**< number of nonzeros in column */
    172 int nlprows; /**< number of linked rows in column, that belong to the current LP */
    173 int nunlinked; /**< number of column entries, where the rows don't know about the column */
    174 int lppos; /**< column position number in current LP, or -1 if not in current LP */
    175 int lpipos; /**< column position number in LP solver, or -1 if not in LP solver */
    176 int lpdepth; /**< depth level at which column entered the LP, or -1 if not in current LP */
    177 int sbitlim; /**< strong branching iteration limit used to get strong branching values, or -1 */
    178 int nsbcalls; /**< number of times, strong branching was applied on the column */
    179 int age; /**< number of successive times this variable was in LP and was 0.0 in solution */
    180 int var_probindex; /**< copy of var->probindex for avoiding expensive dereferencing */
    181 unsigned int basisstatus:2; /**< basis status of column in last LP solution, invalid for non-LP columns */
    182 unsigned int lprowssorted:1; /**< are the linked LP rows in the rows array sorted by non-decreasing index? */
    183 unsigned int nonlprowssorted:1; /**< are the non-LP/not linked rows sorted by non-decreasing index? */
    184 unsigned int objchanged:1; /**< has objective value changed, and has data of LP solver to be updated? */
    185 unsigned int lbchanged:1; /**< has lower bound changed, and has data of LP solver to be updated? */
    186 unsigned int ubchanged:1; /**< has upper bound changed, and has data of LP solver to be updated? */
    187 unsigned int coefchanged:1; /**< has the coefficient vector changed, and has LP solver to be updated? */
    188 unsigned int integral:1; /**< is associated variable of integral type? */
    189 unsigned int impliedintegral:1; /**< is associated variable implied integral? */
    190 unsigned int removable:1; /**< is column removable from the LP (due to aging or cleanup)? */
    191 unsigned int sbdownvalid:1; /**< stores whether the stored strong branching down value is a valid dual bound;
    192 * otherwise, it can only be used as an estimate value */
    193 unsigned int sbupvalid:1; /**< stores whether the stored strong branching up value is a valid dual bound;
    194 * otherwise, it can only be used as an estimate value */
    195};
    196
    197/** LP row
    198 * The column vector of the LP row is partitioned into two parts: The first row->nlpcols columns in the cols array
    199 * are the ones that belong to the current LP (row->cols[j]->lppos >= 0) and that are linked to the row
    200 * (row->linkpos[j] >= 0). The remaining row->len - row->nlpcols columns in the cols array are the ones that
    201 * don't belong to the current LP (row->cols[j]->lppos == -1) or that are not linked to the row
    202 * (row->linkpos[j] == -1).
    203 */
    205{
    206 SCIP_Real constant; /**< constant shift c in row lhs <= ax + c <= rhs */
    207 SCIP_Real lhs; /**< left hand side of row */
    208 SCIP_Real rhs; /**< right hand side of row */
    209 SCIP_Real flushedlhs; /**< left hand side minus constant of row already flushed to the LP solver */
    210 SCIP_Real flushedrhs; /**< right hand side minus constant of row already flushed to the LP solver */
    211 SCIP_Real sqrnorm; /**< squared Euclidean norm of row vector */
    212 SCIP_Real sumnorm; /**< sum norm of row vector (sum of absolute values of coefficients) */
    213 SCIP_Real objprod; /**< scalar product of row vector with objective function */
    214 SCIP_Real maxval; /**< maximal absolute value of row vector, only valid if nummaxval > 0 */
    215 SCIP_Real minval; /**< minimal absolute non-zero value of row vector, only valid if numminval > 0 */
    216 SCIP_Real dualsol; /**< dual solution value in LP, is 0 if row is not in LP */
    217 SCIP_Real activity; /**< row activity value in LP, or SCIP_INVALID if not yet calculated */
    218 SCIP_Real dualfarkas; /**< multiplier value in dual Farkas infeasibility proof */
    219 SCIP_Real pseudoactivity; /**< row activity value in pseudo solution, or SCIP_INVALID if not yet calculated */
    220 SCIP_Real minactivity; /**< minimal activity value w.r.t. the column's bounds, or SCIP_INVALID */
    221 SCIP_Real maxactivity; /**< maximal activity value w.r.t. the column's bounds, or SCIP_INVALID */
    222 SCIP_Longint validpsactivitydomchg; /**< domain change number for which pseudo activity value is valid */
    223 SCIP_Longint validactivitybdsdomchg;/**< domain change number for which activity bound values are valid */
    224 SCIP_Longint obsoletenode; /**< last node where this row was removed due to aging */
    225 SCIP_Longint activeinlpcounter; /**< counter for the number of times this row was active in an optimal LP solution */
    226 SCIP_Longint nlpsaftercreation; /**< counter for the number of LPs after the row has been created */
    227 SCIP_ROWSOLVALS* storedsolvals; /**< values stored before entering diving or probing mode */
    228 void* origin; /**< pointer to constraint handler or separator who created the row (NULL if unknown) */
    229 char* name; /**< name of the row */
    230 SCIP_COL** cols; /**< columns of row entries, that may have a nonzero primal solution value */
    231 int* cols_index; /**< copy of cols[i]->index for avoiding expensive dereferencing */
    232 SCIP_Real* vals; /**< coefficients of row entries */
    233 int* linkpos; /**< position of row in row vector of the column, or -1 if not yet linked */
    234 SCIP_EVENTFILTER* eventfilter; /**< event filter for events concerning this row */
    235 SCIP_ROWEXACT* rowexact; /**< pointer to exact row if it exists, or NULL in fp-scip */
    236 SCIP_Longint validactivitylp; /**< LP number for which activity value is valid */
    237 int index; /**< consecutively numbered row identifier */
    238 int size; /**< size of the col- and val-arrays */
    239 int len; /**< number of nonzeros in row */
    240 int nlpcols; /**< number of linked columns in row, that belong to the current LP */
    241 int nunlinked; /**< number of row entries, where the columns don't know about the row */
    242 int nuses; /**< number of times, this row is referenced */
    243 int lppos; /**< row position number in current LP, or -1 if not in current LP */
    244 int lpipos; /**< row position number in LP solver, or -1 if not in LP solver */
    245 int lpdepth; /**< depth level at which row entered the LP, or -1 if not in current LP */
    246 int minidx; /**< minimal column index of row entries */
    247 int maxidx; /**< maximal column index of row entries */
    248 int numintcols; /**< number of integral columns */
    249 int numimplintcols; /**< number of implied integral columns */
    250 int nummaxval; /**< number of coefs with absolute value equal to maxval, zero if maxval invalid */
    251 int numminval; /**< number of coefs with absolute value equal to minval, zero if minval invalid */
    252 int age; /**< number of successive times this row was in LP and was not sharp in solution */
    253 int rank; /**< rank of the row (upper bound, to be precise) */
    254 unsigned int fromcutpool:1; /**< added from cutpool to sepastore */
    255 unsigned int basisstatus:2; /**< basis status of row in last LP solution, invalid for non-LP rows */
    256 unsigned int lpcolssorted:1; /**< are the linked LP columns in the cols array sorted by non-decreasing index? */
    257 unsigned int nonlpcolssorted:1; /**< are the non-LP/not linked columns sorted by non-decreasing index? */
    258 unsigned int delaysort:1; /**< should the row sorting be delayed and done in a lazy fashion? */
    259 unsigned int validminmaxidx:1; /**< are minimal and maximal column index valid? */
    260 unsigned int lhschanged:1; /**< was left hand side or constant changed, and has LP solver to be updated? */
    261 unsigned int rhschanged:1; /**< was right hand side or constant changed, and has LP solver to be updated? */
    262 unsigned int coefchanged:1; /**< was the coefficient vector changed, and has LP solver to be updated? */
    263 unsigned int integral:1; /**< is activity (without constant) of row always integral in feasible solution? */
    264 unsigned int local:1; /**< is row only valid locally? */
    265 unsigned int modifiable:1; /**< is row modifiable during node processing (subject to column generation)? */
    266 unsigned int removable:1; /**< is row removable from the LP (due to aging or cleanup)? */
    267 unsigned int inglobalcutpool:1; /**< is row contained in the global cut pool? */
    268 unsigned int normunreliable:1; /**< is the objective product of the row unreliable? */
    269 unsigned int nlocks:13; /**< number of sealed locks of an unmodifiable row */
    270 unsigned int origintype:3; /**< origin of row (0: unknown, 1: constraint handler, 2: constraint, 3: separator, 4: reoptimization) */
    271};
    272
    273/** current LP data */
    275{
    276 SCIP_Real lpobjval; /**< objective value of LP without loose variables, or SCIP_INVALID */
    277 SCIP_Real looseobjval; /**< current solution value of all loose variables set to their best bounds,
    278 * ignoring variables, with infinite best bound */
    279 SCIP_Real rellooseobjval; /**< last reliable solution value of all loose variables set to their best bounds,
    280 * ignoring variables, with infinite best bound */
    281 SCIP_Real glbpseudoobjval; /**< global pseudo solution value with all variables set to their best global bounds,
    282 * ignoring variables, with infinite best bound */
    283 SCIP_Real relglbpseudoobjval; /**< last reliable global pseudo solution value */
    284 SCIP_Real pseudoobjval; /**< current pseudo solution value with all variables set to their best bounds,
    285 * ignoring variables, with infinite best bound */
    286 SCIP_Real relpseudoobjval; /**< last reliable pseudo solution value */
    287 SCIP_Real rootlpobjval; /**< objective value of root LP without loose variables, or SCIP_INVALID */
    288 SCIP_Real rootlooseobjval; /**< objective value of loose variables in root node, or SCIP_INVALID */
    289 SCIP_Real cutoffbound; /**< upper objective limit of LP (copy of primal->cutoffbound) */
    290 SCIP_Real feastol; /**< current feasibility tolerance */
    291 SCIP_Real lpiobjlim; /**< current objective limit in LPI */
    292 SCIP_Real lpifeastol; /**< current feasibility tolerance in LPI */
    293 SCIP_Real lpidualfeastol; /**< current reduced costs feasibility tolerance in LPI */
    294 SCIP_Real lpibarrierconvtol; /**< current convergence tolerance used in barrier algorithm in LPI */
    295 SCIP_Real lpiconditionlimit; /**< current condition number limit in LPI */
    296 SCIP_Real lpimarkowitz; /**< current markowitz threshold */
    297 SCIP_Real objsqrnorm; /**< squared Euclidean norm of objective function vector of problem variables */
    298 SCIP_Real objsumnorm; /**< sum norm of objective function vector of problem variables */
    299 SCIP_Real degeneracy; /**< share of degenerate non-basic variables in the current LP */
    300 SCIP_Real varconsratio; /**< variable-constraint ratio of the optimal face */
    301 SCIP_LPI* lpi; /**< LP solver interface */
    302 SCIP_COL** lpicols; /**< array with columns currently stored in the LP solver */
    303 SCIP_ROW** lpirows; /**< array with rows currently stored in the LP solver */
    304 SCIP_COL** chgcols; /**< array of changed columns not yet applied to the LP solver */
    305 SCIP_ROW** chgrows; /**< array of changed rows not yet applied to the LP solver */
    306 SCIP_COL** cols; /**< array with current LP columns in correct order */
    307 SCIP_COL** lazycols; /**< array with current LP lazy columns */
    308 SCIP_ROW** rows; /**< array with current LP rows in correct order */
    309 SCIP_LPEXACT* lpexact; /**< pointer to exact rational lp, or null if in normal fp soliving mode */
    310 SCIP_Real* soldirection; /**< normalized vector in direction of primal solution from current LP solution */
    311 SCIP_LPISTATE* divelpistate; /**< stores LPI state (basis information) before diving starts */
    312 SCIP_Real* divechgsides; /**< stores the lhs/rhs changed in the current diving */
    313 SCIP_SIDETYPE* divechgsidetypes; /**< stores the side type of the changes done in the current diving */
    314 SCIP_ROW** divechgrows; /**< stores the rows changed in the current diving */
    315 SCIP_LPSOLVALS* storedsolvals; /**< collected values of the LP data which depend on the LP solution */
    316 SCIP_SOL* validsoldirsol; /**< primal solution for which the currently stored solution direction vector is valid */
    317 SCIP_Longint validsollp; /**< LP number for which the currently stored solution values are valid */
    318 SCIP_Longint validfarkaslp; /**< LP number for which the currently stored Farkas row multipliers are valid */
    319 SCIP_Longint validsoldirlp; /**< LP number for which the currently stored solution direction vector is valid */
    320 SCIP_Longint validdegeneracylp; /**< LP number for which the currently stored degeneracy information is valid */
    321 SCIP_Longint divenolddomchgs; /**< number of domain changes before diving has started */
    322 int lpicolssize; /**< available slots in lpicols vector */
    323 int nlpicols; /**< number of columns in the LP solver */
    324 int lpifirstchgcol; /**< first column of the LP which differs from the column in the LP solver */
    325 int lpirowssize; /**< available slots in lpirows vector */
    326 int nlpirows; /**< number of rows in the LP solver */
    327 int lpifirstchgrow; /**< first row of the LP which differs from the row in the LP solver */
    328 int chgcolssize; /**< available slots in chgcols vector */
    329 int nchgcols; /**< current number of chgcols (number of used slots in chgcols vector) */
    330 int chgrowssize; /**< available slots in chgrows vector */
    331 int nchgrows; /**< current number of chgrows (number of used slots in chgrows vector) */
    332 int colssize; /**< available slots in cols vector */
    333 int soldirectionsize; /**< available slots in soldirection vector */
    334 int ncols; /**< current number of LP columns (number of used slots in cols vector) */
    335 int lazycolssize; /**< available slots in lazycols vector */
    336 int nlazycols; /**< current number of LP lazy columns (number of used slots in lazycols vector) */
    337 int nremovablecols; /**< number of removable columns in the LP */
    338 int firstnewcol; /**< first column added at the current node */
    339 int rowssize; /**< available slots in rows vector */
    340 int nrows; /**< current number of LP rows (number of used slots in rows vector) */
    341 int nremovablerows; /**< number of removable rows in the LP */
    342 int firstnewrow; /**< first row added at the current node */
    343 int looseobjvalinf; /**< number of loose variables with infinite best bound in current solution */
    344 int nloosevars; /**< number of loose variables in LP */
    345 int glbpseudoobjvalinf; /**< number of variables with infinite best bound in global pseudo solution */
    346 int pseudoobjvalinf; /**< number of variables with infinite best bound in current pseudo solution */
    347 int ndivingrows; /**< number of rows when entering diving mode */
    348 int ndivechgsides; /**< number of side changes in current diving */
    349 int divechgsidessize; /**< size of the arrays */
    350 int divinglpiitlim; /**< LPI iteration limit when entering diving mode */
    351 int lpiitlim; /**< current iteration limit setting in LPI */
    352 int lpifastmip; /**< current FASTMIP setting in LPI */
    353 int lpithreads; /**< current THREADS setting in LPI */
    354 int lpitiming; /**< current timing type in LPI */
    355 int lpirandomseed; /**< current initial random seed in LPI */
    356 int lpiscaling; /**< current SCALING setting in LPI */
    357 int lpirefactorinterval;/**< current refactorization interval */
    358 SCIP_PRICING lpipricing; /**< current pricing setting in LPI */
    359 SCIP_LPSOLSTAT lpsolstat; /**< solution status of last LP solution */
    360 SCIP_LPALGO lastlpalgo; /**< algorithm used for last LP solve */
    361 SCIP_Bool objsqrnormunreliable;/**< is squared Euclidean norm of objective function vector of problem
    362 * variables unreliable and need recalculation? */
    363 SCIP_Bool lpisolutionpolishing;/**< LP solution polishing method (0: disabled, 1: enabled) */
    364 SCIP_Bool looseobjvalid; /**< is the loose objective value valid or should it be recomputed from scratch? */
    365 SCIP_Bool glbpseudoobjvalid; /**< is the global pseudo solution value valid or should it be recomputed from scratch? */
    366 SCIP_Bool pseudoobjvalid; /**< is the pseudo solution value valid or should it be recomputed from scratch? */
    367 SCIP_Bool flushdeletedcols; /**< have LPI-columns been deleted in the last lpFlush() call? */
    368 SCIP_Bool flushaddedcols; /**< have LPI-columns been added in the last lpFlush() call? */
    369 SCIP_Bool flushdeletedrows; /**< have LPI-rows been deleted in the last lpFlush() call? */
    370 SCIP_Bool flushaddedrows; /**< have LPI-rows been added in the last lpFlush() call? */
    371 SCIP_Bool updateintegrality; /**< does integrality information need to be updated? */
    372 SCIP_Bool flushed; /**< are all cached changes applied to the LP solver? */
    373 SCIP_Bool solved; /**< is current LP solved? */
    374 SCIP_Bool primalfeasible; /**< is current LP solution (rather LPI state) primal feasible? */
    375 SCIP_Bool primalchecked; /**< was current LP solution checked for primal feasibility?? */
    376 SCIP_Bool dualfeasible; /**< is current LP solution (rather LPI state) dual feasible? */
    377 SCIP_Bool dualchecked; /**< was current LP solution checked for primal feasibility?? */
    378 SCIP_Bool solisbasic; /**< is current LP solution a basic solution? */
    379 SCIP_Bool rootlpisrelax; /**< is root LP a relaxation of the problem and its solution value a valid global lower bound? */
    380 SCIP_Bool isrelax; /**< is the current LP a relaxation of the problem for which it has been solved and its
    381 * solution value a valid local lower bound? */
    382 SCIP_Bool installing; /**< whether the solution process is in stalling */
    383 SCIP_Bool strongbranching; /**< whether the lp is used for strong branching */
    384 SCIP_Bool probing; /**< are we currently in probing mode? */
    385 SCIP_Bool strongbranchprobing;/**< are we currently in probing mode for strong branching? */
    386 SCIP_Bool diving; /**< LP is used for diving: col bounds and obj don't correspond to variables */
    387 SCIP_Bool divingobjchg; /**< objective values were changed in diving or probing: LP objective is invalid */
    388 SCIP_Bool divinglazyapplied; /**< lazy bounds were applied to the LP during diving */
    389 SCIP_Bool resolvelperror; /**< an error occurred during resolving the LP after diving or probing */
    390 SCIP_Bool adjustlpval; /**< does an infinite LP objective value has been adjusted so far? */
    391 SCIP_Bool lpifromscratch; /**< current FROMSCRATCH setting in LPI */
    392 SCIP_Bool lpipresolving; /**< current PRESOLVING setting in LPI */
    393 SCIP_Bool lpilpinfo; /**< current LPINFO setting in LPI */
    394 SCIP_Bool lpihasfeastol; /**< does the LPI support the FEASTOL parameter? */
    395 SCIP_Bool lpihasdualfeastol; /**< does the LPI support the DUALFEASTOL parameter? */
    396 SCIP_Bool lpihasbarrierconvtol;/**< does the LPI support the BARRIERCONVTOL parameter? */
    397 SCIP_Bool lpihasfastmip; /**< does the LPI support the FASTMIP parameter? */
    398 SCIP_Bool lpihasscaling; /**< does the LPI support the SCALING parameter? */
    399 SCIP_Bool lpihaspresolving; /**< does the LPI support the PRESOLVING parameter? */
    400 SCIP_Bool lpihasrowrep; /**< does the LPI support row representation of a simplex basis? */
    401 SCIP_Bool lpihaspolishing; /**< does the LPI support solution polishing? */
    402 SCIP_Bool lpihasrefactor; /**< does the LPI support changing the refactorization interval? */
    403 SCIP_Real lpirowrepswitch; /**< simplex algorithm shall use row representation of the basis
    404 * if number of rows divided by number of columns exceeds this value */
    405 SCIP_Bool divelpwasprimfeas; /**< primal feasibility when diving started */
    406 SCIP_Bool divelpwasprimchecked;/**< primal feasibility was checked when diving started */
    407 SCIP_Bool divelpwasdualfeas; /**< dual feasibility when diving started */
    408 SCIP_Bool divelpwasdualchecked;/**< dual feasibility was checked when diving started */
    409 SCIP_Bool hasprovedbound; /**< is the bound of the lp proved to be exactly dual feasible */
    410};
    411
    412#ifdef __cplusplus
    413}
    414#endif
    415
    416#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
    SCIP_Real primsol
    Definition: struct_lp.h:96
    unsigned int basisstatus
    Definition: struct_lp.h:98
    SCIP_Real redcost
    Definition: struct_lp.h:97
    SCIP_Real lb
    Definition: struct_lp.h:140
    SCIP_Real maxprimsol
    Definition: struct_lp.h:154
    SCIP_Real ub
    Definition: struct_lp.h:141
    unsigned int lbchanged
    Definition: struct_lp.h:185
    SCIP_ROW ** rows
    Definition: struct_lp.h:163
    unsigned int objchanged
    Definition: struct_lp.h:184
    int lpdepth
    Definition: struct_lp.h:176
    int nlprows
    Definition: struct_lp.h:172
    SCIP_Real sbsolval
    Definition: struct_lp.h:157
    SCIP_Real sbdown
    Definition: struct_lp.h:155
    SCIP_Real sbup
    Definition: struct_lp.h:156
    SCIP_Real lazylb
    Definition: struct_lp.h:143
    SCIP_COLSOLVALS * storedsolvals
    Definition: struct_lp.h:161
    unsigned int basisstatus
    Definition: struct_lp.h:181
    SCIP_Real redcost
    Definition: struct_lp.h:151
    SCIP_Real lazyub
    Definition: struct_lp.h:145
    SCIP_Real minprimsol
    Definition: struct_lp.h:153
    SCIP_Real sblpobjval
    Definition: struct_lp.h:158
    SCIP_Real flushedobj
    Definition: struct_lp.h:147
    int len
    Definition: struct_lp.h:171
    unsigned int coefchanged
    Definition: struct_lp.h:187
    SCIP_Real flushedlb
    Definition: struct_lp.h:148
    unsigned int removable
    Definition: struct_lp.h:190
    unsigned int impliedintegral
    Definition: struct_lp.h:189
    SCIP_Real farkascoef
    Definition: struct_lp.h:152
    unsigned int sbupvalid
    Definition: struct_lp.h:193
    SCIP_Longint obsoletenode
    Definition: struct_lp.h:160
    unsigned int lprowssorted
    Definition: struct_lp.h:182
    SCIP_Longint validredcostlp
    Definition: struct_lp.h:165
    int lppos
    Definition: struct_lp.h:174
    int age
    Definition: struct_lp.h:179
    SCIP_Real flushedub
    Definition: struct_lp.h:149
    unsigned int nonlprowssorted
    Definition: struct_lp.h:183
    int nsbcalls
    Definition: struct_lp.h:178
    int * linkpos
    Definition: struct_lp.h:168
    SCIP_Real * vals
    Definition: struct_lp.h:164
    unsigned int ubchanged
    Definition: struct_lp.h:186
    SCIP_Real primsol
    Definition: struct_lp.h:150
    SCIP_Longint validfarkaslp
    Definition: struct_lp.h:166
    int nunlinked
    Definition: struct_lp.h:173
    int lpipos
    Definition: struct_lp.h:175
    unsigned int integral
    Definition: struct_lp.h:188
    SCIP_Longint validsblp
    Definition: struct_lp.h:167
    int size
    Definition: struct_lp.h:170
    int sbitlim
    Definition: struct_lp.h:177
    SCIP_Longint sbnode
    Definition: struct_lp.h:159
    SCIP_Real obj
    Definition: struct_lp.h:139
    int index
    Definition: struct_lp.h:169
    unsigned int sbdownvalid
    Definition: struct_lp.h:191
    SCIP_Real unchangedobj
    Definition: struct_lp.h:142
    SCIP_VAR * var
    Definition: struct_lp.h:162
    int var_probindex
    Definition: struct_lp.h:180
    SCIP_Bool dualchecked
    Definition: struct_lp.h:124
    SCIP_Bool solisbasic
    Definition: struct_lp.h:125
    SCIP_Bool dualfeasible
    Definition: struct_lp.h:123
    SCIP_Bool primalfeasible
    Definition: struct_lp.h:121
    SCIP_Bool primalchecked
    Definition: struct_lp.h:122
    SCIP_Real lpobjval
    Definition: struct_lp.h:120
    SCIP_Bool lpissolved
    Definition: struct_lp.h:126
    SCIP_Bool hasprovedboundexact
    Definition: struct_lp.h:127
    SCIP_LPSOLSTAT lpsolstat
    Definition: struct_lp.h:119
    SCIP_Bool glbpseudoobjvalid
    Definition: struct_lp.h:365
    SCIP_Real * divechgsides
    Definition: struct_lp.h:312
    SCIP_ROW ** rows
    Definition: struct_lp.h:308
    SCIP_Real feastol
    Definition: struct_lp.h:290
    SCIP_Real lpirowrepswitch
    Definition: struct_lp.h:403
    SCIP_Real objsumnorm
    Definition: struct_lp.h:298
    SCIP_Longint validsoldirlp
    Definition: struct_lp.h:319
    SCIP_Real pseudoobjval
    Definition: struct_lp.h:284
    SCIP_Real relglbpseudoobjval
    Definition: struct_lp.h:283
    SCIP_Bool lpihasfeastol
    Definition: struct_lp.h:394
    SCIP_Bool lpihasrefactor
    Definition: struct_lp.h:402
    int glbpseudoobjvalinf
    Definition: struct_lp.h:345
    SCIP_Real objsqrnorm
    Definition: struct_lp.h:297
    SCIP_Bool flushaddedcols
    Definition: struct_lp.h:368
    SCIP_ROW ** lpirows
    Definition: struct_lp.h:303
    SCIP_SIDETYPE * divechgsidetypes
    Definition: struct_lp.h:313
    int lpicolssize
    Definition: struct_lp.h:322
    int lpiitlim
    Definition: struct_lp.h:351
    SCIP_Bool strongbranching
    Definition: struct_lp.h:383
    SCIP_Bool probing
    Definition: struct_lp.h:384
    SCIP_Real rellooseobjval
    Definition: struct_lp.h:279
    SCIP_Bool updateintegrality
    Definition: struct_lp.h:371
    SCIP_Bool isrelax
    Definition: struct_lp.h:380
    SCIP_Bool lpipresolving
    Definition: struct_lp.h:392
    int lpirefactorinterval
    Definition: struct_lp.h:357
    SCIP_Real varconsratio
    Definition: struct_lp.h:300
    SCIP_Bool lpihasbarrierconvtol
    Definition: struct_lp.h:396
    int lpifirstchgrow
    Definition: struct_lp.h:327
    SCIP_Bool lpifromscratch
    Definition: struct_lp.h:391
    SCIP_Bool objsqrnormunreliable
    Definition: struct_lp.h:361
    SCIP_Bool primalfeasible
    Definition: struct_lp.h:374
    SCIP_Real lpiconditionlimit
    Definition: struct_lp.h:295
    SCIP_COL ** cols
    Definition: struct_lp.h:306
    SCIP_LPALGO lastlpalgo
    Definition: struct_lp.h:360
    SCIP_Bool lpihasdualfeastol
    Definition: struct_lp.h:395
    int lpifirstchgcol
    Definition: struct_lp.h:324
    int divinglpiitlim
    Definition: struct_lp.h:350
    int nlazycols
    Definition: struct_lp.h:336
    SCIP_Bool lpihasscaling
    Definition: struct_lp.h:398
    SCIP_Real rootlpobjval
    Definition: struct_lp.h:287
    SCIP_Real * soldirection
    Definition: struct_lp.h:310
    int rowssize
    Definition: struct_lp.h:339
    int ncols
    Definition: struct_lp.h:334
    SCIP_Real cutoffbound
    Definition: struct_lp.h:289
    SCIP_Bool strongbranchprobing
    Definition: struct_lp.h:385
    int nremovablerows
    Definition: struct_lp.h:341
    SCIP_Real lpidualfeastol
    Definition: struct_lp.h:293
    SCIP_Bool installing
    Definition: struct_lp.h:382
    SCIP_Real rootlooseobjval
    Definition: struct_lp.h:288
    SCIP_LPEXACT * lpexact
    Definition: struct_lp.h:309
    SCIP_Bool dualfeasible
    Definition: struct_lp.h:376
    int nchgrows
    Definition: struct_lp.h:331
    int firstnewcol
    Definition: struct_lp.h:338
    int lpithreads
    Definition: struct_lp.h:353
    SCIP_Bool solisbasic
    Definition: struct_lp.h:378
    SCIP_Bool divelpwasdualfeas
    Definition: struct_lp.h:407
    SCIP_Bool rootlpisrelax
    Definition: struct_lp.h:379
    SCIP_Bool lpisolutionpolishing
    Definition: struct_lp.h:363
    SCIP_Bool lpihaspresolving
    Definition: struct_lp.h:399
    SCIP_PRICING lpipricing
    Definition: struct_lp.h:358
    SCIP_Real looseobjval
    Definition: struct_lp.h:277
    SCIP_Bool divelpwasprimchecked
    Definition: struct_lp.h:406
    SCIP_Bool flushaddedrows
    Definition: struct_lp.h:370
    SCIP_COL ** chgcols
    Definition: struct_lp.h:304
    int nrows
    Definition: struct_lp.h:340
    SCIP_Bool primalchecked
    Definition: struct_lp.h:375
    SCIP_LPSOLVALS * storedsolvals
    Definition: struct_lp.h:315
    int lpiscaling
    Definition: struct_lp.h:356
    int lpirandomseed
    Definition: struct_lp.h:355
    int lpifastmip
    Definition: struct_lp.h:352
    SCIP_LPISTATE * divelpistate
    Definition: struct_lp.h:311
    SCIP_Real lpifeastol
    Definition: struct_lp.h:292
    SCIP_Longint validsollp
    Definition: struct_lp.h:317
    SCIP_Bool lpihasfastmip
    Definition: struct_lp.h:397
    SCIP_SOL * validsoldirsol
    Definition: struct_lp.h:316
    SCIP_Bool divingobjchg
    Definition: struct_lp.h:387
    int ndivechgsides
    Definition: struct_lp.h:348
    int lazycolssize
    Definition: struct_lp.h:335
    SCIP_ROW ** chgrows
    Definition: struct_lp.h:305
    SCIP_Real lpimarkowitz
    Definition: struct_lp.h:296
    int firstnewrow
    Definition: struct_lp.h:342
    int ndivingrows
    Definition: struct_lp.h:347
    SCIP_Bool lpilpinfo
    Definition: struct_lp.h:393
    SCIP_Real relpseudoobjval
    Definition: struct_lp.h:286
    SCIP_LPSOLSTAT lpsolstat
    Definition: struct_lp.h:359
    int colssize
    Definition: struct_lp.h:332
    SCIP_Real lpibarrierconvtol
    Definition: struct_lp.h:294
    SCIP_ROW ** divechgrows
    Definition: struct_lp.h:314
    int nloosevars
    Definition: struct_lp.h:344
    int chgrowssize
    Definition: struct_lp.h:330
    SCIP_Longint validdegeneracylp
    Definition: struct_lp.h:320
    int nlpicols
    Definition: struct_lp.h:323
    SCIP_Real lpobjval
    Definition: struct_lp.h:276
    int nlpirows
    Definition: struct_lp.h:326
    int chgcolssize
    Definition: struct_lp.h:328
    SCIP_Longint divenolddomchgs
    Definition: struct_lp.h:321
    int pseudoobjvalinf
    Definition: struct_lp.h:346
    SCIP_Bool solved
    Definition: struct_lp.h:373
    SCIP_Bool divinglazyapplied
    Definition: struct_lp.h:388
    int lpitiming
    Definition: struct_lp.h:354
    SCIP_Bool resolvelperror
    Definition: struct_lp.h:389
    SCIP_Bool dualchecked
    Definition: struct_lp.h:377
    SCIP_Bool divelpwasdualchecked
    Definition: struct_lp.h:408
    SCIP_Bool pseudoobjvalid
    Definition: struct_lp.h:366
    int nchgcols
    Definition: struct_lp.h:329
    SCIP_Longint validfarkaslp
    Definition: struct_lp.h:318
    SCIP_Bool looseobjvalid
    Definition: struct_lp.h:364
    SCIP_Bool adjustlpval
    Definition: struct_lp.h:390
    SCIP_Bool diving
    Definition: struct_lp.h:386
    SCIP_Bool hasprovedbound
    Definition: struct_lp.h:409
    SCIP_Real glbpseudoobjval
    Definition: struct_lp.h:281
    int divechgsidessize
    Definition: struct_lp.h:349
    SCIP_Bool lpihaspolishing
    Definition: struct_lp.h:401
    SCIP_COL ** lpicols
    Definition: struct_lp.h:302
    int lpirowssize
    Definition: struct_lp.h:325
    int nremovablecols
    Definition: struct_lp.h:337
    SCIP_LPI * lpi
    Definition: struct_lp.h:301
    SCIP_Bool flushdeletedrows
    Definition: struct_lp.h:369
    SCIP_Bool lpihasrowrep
    Definition: struct_lp.h:400
    int looseobjvalinf
    Definition: struct_lp.h:343
    int soldirectionsize
    Definition: struct_lp.h:333
    SCIP_COL ** lazycols
    Definition: struct_lp.h:307
    SCIP_Real degeneracy
    Definition: struct_lp.h:299
    SCIP_Bool flushed
    Definition: struct_lp.h:372
    SCIP_Bool divelpwasprimfeas
    Definition: struct_lp.h:405
    SCIP_Real lpiobjlim
    Definition: struct_lp.h:291
    SCIP_Bool flushdeletedcols
    Definition: struct_lp.h:367
    SCIP_Real activity
    Definition: struct_lp.h:109
    unsigned int basisstatus
    Definition: struct_lp.h:110
    SCIP_Real dualsol
    Definition: struct_lp.h:108
    SCIP_Longint nlpsaftercreation
    Definition: struct_lp.h:226
    unsigned int normunreliable
    Definition: struct_lp.h:268
    int rank
    Definition: struct_lp.h:253
    unsigned int basisstatus
    Definition: struct_lp.h:255
    int nlpcols
    Definition: struct_lp.h:240
    SCIP_Real minactivity
    Definition: struct_lp.h:220
    SCIP_Longint activeinlpcounter
    Definition: struct_lp.h:225
    unsigned int lpcolssorted
    Definition: struct_lp.h:256
    unsigned int inglobalcutpool
    Definition: struct_lp.h:267
    SCIP_Real rhs
    Definition: struct_lp.h:208
    SCIP_Real maxactivity
    Definition: struct_lp.h:221
    int nunlinked
    Definition: struct_lp.h:241
    SCIP_Real dualfarkas
    Definition: struct_lp.h:218
    int lppos
    Definition: struct_lp.h:243
    SCIP_Longint obsoletenode
    Definition: struct_lp.h:224
    unsigned int delaysort
    Definition: struct_lp.h:258
    SCIP_Real flushedrhs
    Definition: struct_lp.h:210
    int index
    Definition: struct_lp.h:237
    unsigned int lhschanged
    Definition: struct_lp.h:260
    int size
    Definition: struct_lp.h:238
    unsigned int nonlpcolssorted
    Definition: struct_lp.h:257
    char * name
    Definition: struct_lp.h:229
    unsigned int origintype
    Definition: struct_lp.h:270
    SCIP_Real * vals
    Definition: struct_lp.h:232
    unsigned int validminmaxidx
    Definition: struct_lp.h:259
    unsigned int removable
    Definition: struct_lp.h:266
    int numintcols
    Definition: struct_lp.h:248
    unsigned int local
    Definition: struct_lp.h:264
    SCIP_Real maxval
    Definition: struct_lp.h:214
    SCIP_Longint validpsactivitydomchg
    Definition: struct_lp.h:222
    SCIP_Real flushedlhs
    Definition: struct_lp.h:209
    int numminval
    Definition: struct_lp.h:251
    SCIP_Longint validactivitybdsdomchg
    Definition: struct_lp.h:223
    SCIP_Real lhs
    Definition: struct_lp.h:207
    int lpipos
    Definition: struct_lp.h:244
    int maxidx
    Definition: struct_lp.h:247
    int * linkpos
    Definition: struct_lp.h:233
    SCIP_Real sqrnorm
    Definition: struct_lp.h:211
    SCIP_COL ** cols
    Definition: struct_lp.h:230
    SCIP_ROWEXACT * rowexact
    Definition: struct_lp.h:235
    SCIP_Real objprod
    Definition: struct_lp.h:213
    unsigned int integral
    Definition: struct_lp.h:263
    int nummaxval
    Definition: struct_lp.h:250
    void * origin
    Definition: struct_lp.h:228
    SCIP_Real constant
    Definition: struct_lp.h:206
    SCIP_ROWSOLVALS * storedsolvals
    Definition: struct_lp.h:227
    unsigned int coefchanged
    Definition: struct_lp.h:262
    SCIP_Real activity
    Definition: struct_lp.h:217
    SCIP_EVENTFILTER * eventfilter
    Definition: struct_lp.h:234
    SCIP_Real minval
    Definition: struct_lp.h:215
    SCIP_Real pseudoactivity
    Definition: struct_lp.h:219
    SCIP_Real sumnorm
    Definition: struct_lp.h:212
    int * cols_index
    Definition: struct_lp.h:231
    int minidx
    Definition: struct_lp.h:246
    unsigned int rhschanged
    Definition: struct_lp.h:261
    int age
    Definition: struct_lp.h:252
    SCIP_Real dualsol
    Definition: struct_lp.h:216
    int lpdepth
    Definition: struct_lp.h:245
    unsigned int modifiable
    Definition: struct_lp.h:265
    unsigned int fromcutpool
    Definition: struct_lp.h:254
    unsigned int nlocks
    Definition: struct_lp.h:269
    SCIP_Longint validactivitylp
    Definition: struct_lp.h:236
    int nuses
    Definition: struct_lp.h:242
    int numimplintcols
    Definition: struct_lp.h:249
    int len
    Definition: struct_lp.h:239
    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
    type definitions for specific LP solvers interface
    enum SCIP_Pricing SCIP_PRICING
    Definition: type_lpi.h:86
    type definitions for problem variables