Scippy

SCIP

Solving Constraint Integer Programs

relax.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 relax.h
26  * @ingroup INTERNALAPI
27  * @brief internal methods for relaxators
28  * @author Tobias Achterberg
29  */
30 
31 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32 
33 #ifndef __SCIP_RELAX_H__
34 #define __SCIP_RELAX_H__
35 
36 
37 #include "scip/def.h"
38 #include "blockmemshell/memory.h"
39 #include "scip/type_primal.h"
40 #include "scip/type_relax.h"
41 #include "scip/type_result.h"
42 #include "scip/type_retcode.h"
43 #include "scip/type_set.h"
44 #include "scip/type_sol.h"
45 #include "scip/type_stat.h"
46 #include "scip/type_tree.h"
47 #include "scip/type_var.h"
48 #include "scip/pub_relax.h"
49 
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53 
54 /** copies the given relaxator to a new scip */
56  SCIP_RELAX* relax, /**< relaxator */
57  SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
58  );
59 
60 /** creates a relaxator */
62  SCIP_RELAX** relax, /**< pointer to relaxator data structure */
63  SCIP_SET* set, /**< global SCIP settings */
64  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
65  BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
66  const char* name, /**< name of relaxator */
67  const char* desc, /**< description of relaxator */
68  int priority, /**< priority of the relaxator (negative: after LP, non-negative: before LP) */
69  int freq, /**< frequency for calling relaxator */
70  SCIP_DECL_RELAXCOPY ((*relaxcopy)), /**< copy method of relaxator or NULL if you don't want to copy your plugin into sub-SCIPs */
71  SCIP_DECL_RELAXFREE ((*relaxfree)), /**< destructor of relaxator */
72  SCIP_DECL_RELAXINIT ((*relaxinit)), /**< initialize relaxator */
73  SCIP_DECL_RELAXEXIT ((*relaxexit)), /**< deinitialize relaxator */
74  SCIP_DECL_RELAXINITSOL((*relaxinitsol)), /**< solving process initialization method of relaxator */
75  SCIP_DECL_RELAXEXITSOL((*relaxexitsol)), /**< solving process deinitialization method of relaxator */
76  SCIP_DECL_RELAXEXEC ((*relaxexec)), /**< execution method of relaxator */
77  SCIP_RELAXDATA* relaxdata /**< relaxator data */
78  );
79 
80 /** calls destructor and frees memory of relaxator */
82  SCIP_RELAX** relax, /**< pointer to relaxator data structure */
83  SCIP_SET* set /**< global SCIP settings */
84  );
85 
86 /** initializes relaxator */
88  SCIP_RELAX* relax, /**< relaxator */
89  SCIP_SET* set /**< global SCIP settings */
90  );
91 
92 /** calls exit method of relaxator */
94  SCIP_RELAX* relax, /**< relaxator */
95  SCIP_SET* set /**< global SCIP settings */
96  );
97 
98 /** informs relaxator that the branch and bound process is being started */
100  SCIP_RELAX* relax, /**< relaxator */
101  SCIP_SET* set /**< global SCIP settings */
102  );
103 
104 /** informs relaxator that the branch and bound process data is being freed */
106  SCIP_RELAX* relax, /**< relaxator */
107  SCIP_SET* set /**< global SCIP settings */
108  );
109 
110 /** calls execution method of relaxator */
112  SCIP_RELAX* relax, /**< relaxator */
113  SCIP_SET* set, /**< global SCIP settings */
114  SCIP_TREE* tree, /**< branch and bound tree */
115  SCIP_STAT* stat, /**< dynamic problem statistics */
116  int depth, /**< depth of current node */
117  SCIP_Real* lowerbound, /**< pointer to lower bound computed by the relaxator */
118  SCIP_RESULT* result /**< pointer to store the result of the callback method */
119  );
120 
121 /** sets priority of relaxator */
123  SCIP_RELAX* relax, /**< relaxator */
124  SCIP_SET* set, /**< global SCIP settings */
125  int priority /**< new priority of the relaxator */
126  );
127 
128 /** set copy callback of relaxation handler */
129 void SCIPrelaxSetCopy(
130  SCIP_RELAX* relax, /**< relaxation handler */
131  SCIP_DECL_RELAXCOPY ((*relaxcopy)) /**< copy method of relaxation handler */
132  );
133 
134 /** set destructor callback of relaxation handler */
135 void SCIPrelaxSetFree(
136  SCIP_RELAX* relax, /**< relaxation handler */
137  SCIP_DECL_RELAXFREE ((*relaxfree)) /**< destructor of relaxation handler */
138  );
139 
140 /** set initialization callback of relaxation handler */
141 void SCIPrelaxSetInit(
142  SCIP_RELAX* relax, /**< relaxation handler */
143  SCIP_DECL_RELAXINIT ((*relaxinit)) /**< initialize relaxation handler */
144  );
145 
146 /** set deinitialization callback of relaxation handler */
147 void SCIPrelaxSetExit(
148  SCIP_RELAX* relax, /**< relaxation handler */
149  SCIP_DECL_RELAXEXIT ((*relaxexit)) /**< deinitialize relaxation handler */
150  );
151 
152 /** set solving process initialization callback of relaxation handler */
154  SCIP_RELAX* relax, /**< relaxation handler */
155  SCIP_DECL_RELAXINITSOL((*relaxinitsol)) /**< solving process initialization method of relaxation handler */
156  );
157 
158 /** set solving process deinitialization callback of relaxation handler */
160  SCIP_RELAX* relax, /**< relaxation handler */
161  SCIP_DECL_RELAXEXITSOL((*relaxexitsol)) /**< solving process deinitialization callback relaxation handler */
162  );
163 
164 /** returns whether the relaxation was completely solved at the current node */
166  SCIP_RELAX* relax, /**< relaxator */
167  SCIP_STAT* stat /**< dynamic problem statistics */
168  );
169 
170 /*
171  * methods for the global relaxation data
172  */
173 
174 /** enables or disables all clocks of \p relax, depending on the value of the flag */
176  SCIP_RELAX* relax, /**< the relaxation handler for which all clocks should be enabled or disabled */
177  SCIP_Bool enable /**< should the clocks of the relaxation handler be enabled? */
178  );
179 
180 /** creates global relaxation data */
182  SCIP_RELAXATION** relaxation, /**< global relaxation data */
183  BMS_BLKMEM* blkmem, /**< block memory */
184  SCIP_SET* set, /**< global SCIP settings */
185  SCIP_STAT* stat, /**< problem statistics data */
186  SCIP_PRIMAL* primal, /**< primal data */
187  SCIP_TREE* tree /**< branch and bound tree */
188  );
189 
190 /** frees global relaxation data */
192  SCIP_RELAXATION** relaxation /**< global relaxation data */
193  );
194 
195 /** sets the relaxsolzero flag in the relaxation data to the given value */
197  SCIP_RELAXATION* relaxation, /**< global relaxation data */
198  SCIP_Bool iszero /**< are all values of the relaxation solution set to zero? */
199  );
200 
201 /** returns whether the global relaxation solution is cleared and all values are set to zero */
203  SCIP_RELAXATION* relaxation /**< global relaxation data */
204  );
205 
206 /** sets the relaxsolvalid and includeslp flags in the relaxation data to the given values */
208  SCIP_RELAXATION* relaxation, /**< global relaxation data */
209  SCIP_Bool isvalid, /**< is the stored solution valid? */
210  SCIP_Bool includeslp /**< does the relaxator contain all cuts in the LP? */
211  );
212 
213 /** returns whether the global relaxation solution is valid */
215  SCIP_RELAXATION* relaxation /**< global relaxation data */
216  );
217 
218 /** returns whether the global relaxation solution was computed by a relaxator which included all LP cuts */
220  SCIP_RELAXATION* relaxation /**< global relaxation data */
221  );
222 
223 /** sets the objective value of the global relaxation solution */
225  SCIP_RELAXATION* relaxation, /**< global relaxation data */
226  SCIP_Real obj /**< objective value */
227  );
228 
229 /** returns the objective value of the global relaxation solution w.r.t. the transformed problem */
231  SCIP_RELAXATION* relaxation /**< global relaxation data */
232  );
233 
234 /** adds the given value to the global relaxation solution's objective value */
236  SCIP_RELAXATION* relaxation, /**< global relaxation data */
237  SCIP_Real val /**< value to add to the objective value */
238  );
239 
240 /** updates objective value of current relaxation solution after change of objective coefficient */
242  SCIP_RELAXATION* relaxation, /**< global relaxation data */
243  SCIP_SET* set, /**< global SCIP settings */
244  SCIP_VAR* var, /**< variable with changed objective coefficient */
245  SCIP_Real oldobj, /**< old objective coefficient */
246  SCIP_Real newobj /**< new objective coefficient */
247  );
248 
249 /** store the most recent relaxation handler \p relax responsible for the solution */
251  SCIP_RELAXATION* relaxation, /**< global relaxation data */
252  SCIP_RELAX* relax /**< relaxation handler responsible for the most recent relaxation solution */
253  );
254 
255 /** returns the most recent relaxation handler responsible for the solution, or NULL if unspecified */
257  SCIP_RELAXATION* relaxation /**< global relaxation data */
258  );
259 
260 #ifdef __cplusplus
261 }
262 #endif
263 
264 #endif
enum SCIP_Result SCIP_RESULT
Definition: type_result.h:61
#define SCIP_DECL_RELAXFREE(x)
Definition: type_relax.h:64
void SCIPrelaxSetExit(SCIP_RELAX *relax, SCIP_DECL_RELAXEXIT((*relaxexit)))
Definition: relax.c:509
SCIP_RETCODE SCIPrelaxInit(SCIP_RELAX *relax, SCIP_SET *set)
Definition: relax.c:231
void SCIPrelaxationSetSolValid(SCIP_RELAXATION *relaxation, SCIP_Bool isvalid, SCIP_Bool includeslp)
Definition: relax.c:795
void SCIPrelaxationUpdateVarObj(SCIP_RELAXATION *relaxation, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
Definition: relax.c:860
void SCIPrelaxSetInit(SCIP_RELAX *relax, SCIP_DECL_RELAXINIT((*relaxinit)))
Definition: relax.c:498
void SCIPrelaxSetPriority(SCIP_RELAX *relax, SCIP_SET *set, int priority)
Definition: relax.c:572
SCIP_RETCODE SCIPrelaxFree(SCIP_RELAX **relax, SCIP_SET *set)
Definition: relax.c:204
SCIP_Bool SCIPrelaxationIsLpIncludedForSol(SCIP_RELAXATION *relaxation)
Definition: relax.c:818
#define SCIP_DECL_RELAXINIT(x)
Definition: type_relax.h:72
#define SCIP_DECL_RELAXINITSOL(x)
Definition: type_relax.h:91
void SCIPrelaxSetCopy(SCIP_RELAX *relax, SCIP_DECL_RELAXCOPY((*relaxcopy)))
Definition: relax.c:476
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63
SCIP_RELAX * SCIPrelaxationGetSolRelax(SCIP_RELAXATION *relaxation)
Definition: relax.c:891
type definitions for global SCIP settings
SCIP_RETCODE SCIPrelaxExit(SCIP_RELAX *relax, SCIP_SET *set)
Definition: relax.c:275
type definitions for return codes for SCIP methods
SCIP_Bool SCIPrelaxationIsSolZero(SCIP_RELAXATION *relaxation)
Definition: relax.c:785
type definitions for problem statistics
SCIP_RETCODE SCIPrelaxCopyInclude(SCIP_RELAX *relax, SCIP_SET *set)
Definition: relax.c:83
SCIP_Bool SCIPrelaxationIsSolValid(SCIP_RELAXATION *relaxation)
Definition: relax.c:808
#define SCIP_DECL_RELAXEXIT(x)
Definition: type_relax.h:80
void SCIPrelaxSetFree(SCIP_RELAX *relax, SCIP_DECL_RELAXFREE((*relaxfree)))
Definition: relax.c:487
void SCIPrelaxSetExitsol(SCIP_RELAX *relax, SCIP_DECL_RELAXEXITSOL((*relaxexitsol)))
Definition: relax.c:531
SCIP_RETCODE SCIPrelaxInitsol(SCIP_RELAX *relax, SCIP_SET *set)
Definition: relax.c:305
void SCIPrelaxationSetSolRelax(SCIP_RELAXATION *relaxation, SCIP_RELAX *relax)
Definition: relax.c:880
#define SCIP_DECL_RELAXCOPY(x)
Definition: type_relax.h:56
type definitions for problem variables
SCIP_RETCODE SCIPrelaxCreate(SCIP_RELAX **relax, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, int freq, SCIP_DECL_RELAXCOPY((*relaxcopy)), SCIP_DECL_RELAXFREE((*relaxfree)), SCIP_DECL_RELAXINIT((*relaxinit)), SCIP_DECL_RELAXEXIT((*relaxexit)), SCIP_DECL_RELAXINITSOL((*relaxinitsol)), SCIP_DECL_RELAXEXITSOL((*relaxexitsol)), SCIP_DECL_RELAXEXEC((*relaxexec)), SCIP_RELAXDATA *relaxdata)
Definition: relax.c:172
type definitions for relaxators
SCIP_RETCODE SCIPrelaxationFree(SCIP_RELAXATION **relaxation)
Definition: relax.c:762
void SCIPrelaxationSetSolObj(SCIP_RELAXATION *relaxation, SCIP_Real obj)
Definition: relax.c:828
SCIP_Bool SCIPrelaxIsSolved(SCIP_RELAX *relax, SCIP_STAT *stat)
Definition: relax.c:708
#define SCIP_Bool
Definition: def.h:93
SCIP_RETCODE SCIPrelaxationCreate(SCIP_RELAXATION **relaxation, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree)
Definition: relax.c:734
type definitions for branch and bound tree
void SCIPrelaxSetInitsol(SCIP_RELAX *relax, SCIP_DECL_RELAXINITSOL((*relaxinitsol)))
Definition: relax.c:520
void SCIPrelaxEnableOrDisableClocks(SCIP_RELAX *relax, SCIP_Bool enable)
Definition: relax.c:606
type definitions for storing primal CIP solutions
struct SCIP_RelaxData SCIP_RELAXDATA
Definition: type_relax.h:47
#define SCIP_DECL_RELAXEXEC(x)
Definition: type_relax.h:127
SCIP_RETCODE SCIPrelaxExec(SCIP_RELAX *relax, SCIP_SET *set, SCIP_TREE *tree, SCIP_STAT *stat, int depth, SCIP_Real *lowerbound, SCIP_RESULT *result)
Definition: relax.c:353
SCIP_RETCODE SCIPrelaxExitsol(SCIP_RELAX *relax, SCIP_SET *set)
Definition: relax.c:329
void SCIPrelaxationSetSolZero(SCIP_RELAXATION *relaxation, SCIP_Bool iszero)
Definition: relax.c:774
#define SCIP_Real
Definition: def.h:186
public methods for relaxation handlers
result codes for SCIP callback methods
void SCIPrelaxationSolObjAdd(SCIP_RELAXATION *relaxation, SCIP_Real val)
Definition: relax.c:849
#define SCIP_DECL_RELAXEXITSOL(x)
Definition: type_relax.h:102
type definitions for collecting primal CIP solutions and primal informations
common defines and data types used in all packages of SCIP
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:439
SCIP_Real SCIPrelaxationGetSolObj(SCIP_RELAXATION *relaxation)
Definition: relax.c:839
memory allocation routines