Scippy

SCIP

Solving Constraint Integer Programs

type_presol.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 2002-2022 Zuse Institute Berlin */
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 type_presol.h
26  * @ingroup TYPEDEFINITIONS
27  * @brief type definitions for presolvers
28  * @author Tobias Achterberg
29  */
30 
31 /** @defgroup DEFPLUGINS_PRESOL Default Presolvers
32  * @ingroup DEFPLUGINS
33  * @brief implementation files (.c files) of the default presolvers of SCIP
34  */
35 
36 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
37 
38 #ifndef __SCIP_TYPE_PRESOL_H__
39 #define __SCIP_TYPE_PRESOL_H__
40 
41 #include "scip/def.h"
42 #include "scip/type_retcode.h"
43 #include "scip/type_result.h"
44 #include "scip/type_scip.h"
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
50 typedef struct SCIP_Presol SCIP_PRESOL; /**< presolver data structure */
51 typedef struct SCIP_PresolData SCIP_PRESOLDATA; /**< presolver specific data */
52 
53 
54 /** copy method for presolver plugins (called when SCIP copies plugins)
55  *
56  * input:
57  * - scip : SCIP main data structure
58  * - presol : the presolver itself
59  */
60 #define SCIP_DECL_PRESOLCOPY(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
61 
62 /** destructor of presolver to free user data (called when SCIP is exiting)
63  *
64  * input:
65  * - scip : SCIP main data structure
66  * - presol : the presolver itself
67  */
68 #define SCIP_DECL_PRESOLFREE(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
69 
70 /** initialization method of presolver (called after problem was transformed)
71  *
72  * input:
73  * - scip : SCIP main data structure
74  * - presol : the presolver itself
75  */
76 #define SCIP_DECL_PRESOLINIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
77 
78 /** deinitialization method of presolver (called before transformed problem is freed)
79  *
80  * input:
81  * - scip : SCIP main data structure
82  * - presol : the presolver itself
83  */
84 #define SCIP_DECL_PRESOLEXIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
85 
86 /** presolving initialization method of presolver (called when presolving is about to begin)
87  *
88  * This method is called when the presolving process is about to begin, even if presolving is turned off.
89  * The presolver may use this call to initialize its data structures.
90  *
91  * Necessary modifications that have to be performed even if presolving is turned off should be done here or in the
92  * presolving deinitialization call (SCIP_DECL_PRESOLSEXITPRE()).
93  *
94  * input:
95  * - scip : SCIP main data structure
96  * - presol : the presolver itself
97  */
98 #define SCIP_DECL_PRESOLINITPRE(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
99 
100 /** presolving deinitialization method of presolver (called after presolving has been finished)
101  *
102  * This method is called after the presolving has been finished, even if presolving is turned off.
103  * The presolver may use this call e.g. to clean up or modify its data structures.
104  *
105  * Necessary modifications that have to be performed even if presolving is turned off should be done here or in the
106  * presolving initialization call (SCIP_DECL_PRESOLINITPRE()).
107  *
108  * Besides necessary modifications and clean up, no time consuming operations should be performed, especially if the
109  * problem has already been solved. Use the method SCIPgetStatus(), which in this case returns SCIP_STATUS_OPTIMAL,
110  * SCIP_STATUS_INFEASIBLE, SCIP_STATUS_UNBOUNDED, or SCIP_STATUS_INFORUNBD.
111  *
112  * input:
113  * - scip : SCIP main data structure
114  * - presol : the presolver itself
115  */
116 #define SCIP_DECL_PRESOLEXITPRE(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
117 
118 /** execution method of presolver
119  *
120  * The presolver should go through the variables and constraints and tighten the domains or
121  * constraints. Each tightening should increase the given total numbers of changes.
122  *
123  * input:
124  * - scip : SCIP main data structure
125  * - presol : the presolver itself
126  * - nrounds : number of presolving rounds already done
127  * - presoltiming : current presolving timing
128  * - nnewfixedvars : number of variables fixed since the last call to the presolver
129  * - nnewaggrvars : number of variables aggregated since the last call to the presolver
130  * - nnewchgvartypes : number of variable type changes since the last call to the presolver
131  * - nnewchgbds : number of variable bounds tightened since the last call to the presolver
132  * - nnewholes : number of domain holes added since the last call to the presolver
133  * - nnewdelconss : number of deleted constraints since the last call to the presolver
134  * - nnewaddconss : number of added constraints since the last call to the presolver
135  * - nnewupgdconss : number of upgraded constraints since the last call to the presolver
136  * - nnewchgcoefs : number of changed coefficients since the last call to the presolver
137  * - nnewchgsides : number of changed left or right hand sides since the last call to the presolver
138  *
139  * @note the counters state the changes since the last call including the changes of this presolver during its last
140  * last call
141  *
142  * @note if the presolver uses dual information it is nesassary to check via calling SCIPallowWeakDualReds and
143  * SCIPallowStrongDualReds if dual reductions are allowed.
144  *
145  * input/output:
146  * - nfixedvars : pointer to total number of variables fixed of all presolvers
147  * - naggrvars : pointer to total number of variables aggregated of all presolvers
148  * - nchgvartypes : pointer to total number of variable type changes of all presolvers
149  * - nchgbds : pointer to total number of variable bounds tightened of all presolvers
150  * - naddholes : pointer to total number of domain holes added of all presolvers
151  * - ndelconss : pointer to total number of deleted constraints of all presolvers
152  * - naddconss : pointer to total number of added constraints of all presolvers
153  * - nupgdconss : pointer to total number of upgraded constraints of all presolvers
154  * - nchgcoefs : pointer to total number of changed coefficients of all presolvers
155  * - nchgsides : pointer to total number of changed left/right hand sides of all presolvers
156  *
157  * output:
158  * - result : pointer to store the result of the presolving call
159  *
160  * possible return values for *result:
161  * - SCIP_UNBOUNDED : at least one variable is not bounded by any constraint in obj. direction -> problem is unbounded
162  * - SCIP_CUTOFF : at least one constraint is infeasible in the variable's bounds -> problem is infeasible
163  * - SCIP_SUCCESS : the presolver found a reduction
164  * - SCIP_DIDNOTFIND : the presolver searched, but did not find a presolving change
165  * - SCIP_DIDNOTRUN : the presolver was skipped
166  */
167 #define SCIP_DECL_PRESOLEXEC(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol, int nrounds, SCIP_PRESOLTIMING presoltiming, \
168  int nnewfixedvars, int nnewaggrvars, int nnewchgvartypes, int nnewchgbds, int nnewholes, \
169  int nnewdelconss, int nnewaddconss, int nnewupgdconss, int nnewchgcoefs, int nnewchgsides, \
170  int* nfixedvars, int* naggrvars, int* nchgvartypes, int* nchgbds, int* naddholes, \
171  int* ndelconss, int* naddconss, int* nupgdconss, int* nchgcoefs, int* nchgsides, SCIP_RESULT* result)
172 
173 #ifdef __cplusplus
174 }
175 #endif
176 
177 #endif
struct SCIP_PresolData SCIP_PRESOLDATA
Definition: type_presol.h:51
type definitions for return codes for SCIP methods
type definitions for SCIP&#39;s main datastructure
result codes for SCIP callback methods
common defines and data types used in all packages of SCIP