1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /*                                                                           */
3 /*                  This file is part of the program and library             */
4 /*         SCIP --- Solving Constraint Integer Programs                      */
5 /*                                                                           */
6 /*    Copyright (C) 2002-2021 Konrad-Zuse-Zentrum                            */
7 /*                            fuer Informationstechnik Berlin                */
8 /*                                                                           */
9 /*  SCIP is distributed under the terms of the ZIB Academic License.         */
10 /*                                                                           */
11 /*  You should have received a copy of the ZIB Academic License              */
12 /*  along with SCIP; see the file COPYING. If not visit scipopt.org.         */
13 /*                                                                           */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file   type_lpi.h
17  * @brief  type definitions for specific LP solvers interface
18  * @author Tobias Achterberg
19  */
20 
21 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
22 
23 #ifndef __SCIP_TYPE_LPI_H__
24 #define __SCIP_TYPE_LPI_H__
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 /** objective sense */
31 enum SCIP_ObjSen
32 {
33    SCIP_OBJSEN_MAXIMIZE = -1,           /**< maximize objective function */
34    SCIP_OBJSEN_MINIMIZE = +1            /**< minimize objective function */
35 };
36 typedef enum SCIP_ObjSen SCIP_OBJSEN;
37 
38 /** LP solver parameters */
39 enum SCIP_LPParam
40 {
41    SCIP_LPPAR_FROMSCRATCH    =  0,      /**< solver should start from scratch at next call? */
42    SCIP_LPPAR_FASTMIP        =  1,      /**< fast mip setting of LP solver */
43    SCIP_LPPAR_SCALING        =  2,      /**< should LP solver use scaling? */
44    SCIP_LPPAR_PRESOLVING     =  3,      /**< should LP solver use presolving? */
45    SCIP_LPPAR_PRICING        =  4,      /**< pricing strategy */
46    SCIP_LPPAR_LPINFO         =  5,      /**< should LP solver output information to the screen? */
47    SCIP_LPPAR_FEASTOL        =  6,      /**< feasibility tolerance for primal variables and slacks, strictly positive */
48    SCIP_LPPAR_DUALFEASTOL    =  7,      /**< feasibility tolerance for dual variables and reduced costs, strictly positive */
49    SCIP_LPPAR_BARRIERCONVTOL =  8,      /**< convergence tolerance used in barrier algorithm */
50    SCIP_LPPAR_OBJLIM         =  9,      /**< objective limit (stop if objective is known be larger/smaller than limit for min/max-imization) */
51    SCIP_LPPAR_LPITLIM        = 10,      /**< LP iteration limit, greater than or equal 0 */
52    SCIP_LPPAR_LPTILIM        = 11,      /**< LP time limit, positive */
53    SCIP_LPPAR_MARKOWITZ      = 12,      /**< Markowitz tolerance */
54    SCIP_LPPAR_ROWREPSWITCH   = 13,      /**< simplex algorithm shall use row representation of the basis
55                                          *   if number of rows divided by number of columns exceeds this value
56                                          *   (0 <= value or -1 = valu ; if negative, this change never occurs) */
57    SCIP_LPPAR_THREADS        = 14,      /**< number of threads used to solve the LP */
58    SCIP_LPPAR_CONDITIONLIMIT = 15,      /**< maximum condition number of LP basis counted as stable */
59    SCIP_LPPAR_TIMING         = 16,      /**< type of timer (1 - cpu, 2 - wallclock, 0 - off) */
60    SCIP_LPPAR_RANDOMSEED     = 17,      /**< inital random seed, e.g. for perturbations in the simplex (0: LP default) */
61    SCIP_LPPAR_POLISHING      = 18,      /**< set solution polishing (0 - disable, 1 - enable) */
62    SCIP_LPPAR_REFACTOR       = 19       /**< set refactorization interval (0 - automatic) */
63 };
64 typedef enum SCIP_LPParam SCIP_LPPARAM;
65 
66 /** LP pricing strategy */
67 enum SCIP_Pricing
68 {
69    SCIP_PRICING_LPIDEFAULT  = 0,        /**< the SCIP/LP interface should use its preferred strategy */
70    SCIP_PRICING_AUTO        = 1,        /**< the LP solver should use its preferred strategy */
71    SCIP_PRICING_FULL        = 2,        /**< full pricing */
72    SCIP_PRICING_PARTIAL     = 3,        /**< partial pricing */
73    SCIP_PRICING_STEEP       = 4,        /**< steepest edge pricing */
74    SCIP_PRICING_STEEPQSTART = 5,        /**< steepest edge pricing without initial dual norms */
75    SCIP_PRICING_DEVEX       = 6         /**< devex pricing */
76 };
77 typedef enum SCIP_Pricing SCIP_PRICING;
78 
79 /** basis status for columns and rows */
80 enum SCIP_BaseStat
81 {
82    SCIP_BASESTAT_LOWER = 0,             /**< (slack) variable is at its lower bound */
83    SCIP_BASESTAT_BASIC = 1,             /**< (slack) variable is basic */
84    SCIP_BASESTAT_UPPER = 2,             /**< (slack) variable is at its upper bound */
85    SCIP_BASESTAT_ZERO  = 3              /**< free variable is non-basic and set to zero */
86 };
87 typedef enum SCIP_BaseStat SCIP_BASESTAT;
88 
89 /** LP solution quality quantities */
90 enum SCIP_LPSolQuality
91 {
92    SCIP_LPSOLQUALITY_ESTIMCONDITION = 0,    /**< estimated condition number of (scaled) basis matrix (SCIP_Real) */
93    SCIP_LPSOLQUALITY_EXACTCONDITION = 1     /**< exact condition number of (scaled) basis matrix (SCIP_Real) */
94 };
95 typedef enum SCIP_LPSolQuality SCIP_LPSOLQUALITY;
96 
97 typedef struct SCIP_LPi SCIP_LPI;                 /**< solver dependent LP interface */
98 typedef struct SCIP_LPiState SCIP_LPISTATE;       /**< complete LP state (i.e. basis information) */
99 typedef struct SCIP_LPiNorms SCIP_LPINORMS;       /**< LP pricing norms information */
100 
101 #ifdef __cplusplus
102 }
103 #endif
104 
105 #endif
106