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 (c) 2002-2024 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 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
47extern "C" {
48#endif
49
50typedef struct SCIP_Presol SCIP_PRESOL; /**< presolver data structure */
51typedef 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
common defines and data types used in all packages of SCIP
struct SCIP_PresolData SCIP_PRESOLDATA
Definition: type_presol.h:51
result codes for SCIP callback methods
type definitions for return codes for SCIP methods
type definitions for SCIP's main datastructure